Размер файла: 6.33Kb
<?php
/*******************************************************************
* Glype is copyright and trademark 2007-2013 UpsideOut, Inc. d/b/a Glype
* and/or its licensors, successors and assigners. All rights reserved.
*
* Use of Glype is subject to the terms of the Software License Agreement.
* http://www.glype.com/license.php
*******************************************************************
* This page displays a list of cookies that have been forwarded
* to the user and allows individual cookies to be deleted.
******************************************************************/
/*****************************************************************
* Initialize glype
******************************************************************/
require 'includes/init.php';
// Stop caching
sendNoCache();
// Start buffering
ob_start();
/*****************************************************************
* Create content
******************************************************************/
echo <<<OUT
<h2 class="first">Manage Cookies</h2>
<p>You can view and delete cookies set on your computer by sites accessed through our service. Your cookies are listed below:</p>
<form action="includes/process.php?action=cookies" method="post">
<table cellpadding="2" cellspacing="0" align="center">
<tr>
<th width="33%">Website</th>
<th width="33%">Name</th>
<th width="33%">Value</th>
<th> </th>
</tr>
OUT;
/*****************************************************************
* Find cookies
******************************************************************/
// Server side storage
if ( $CONFIG['cookies_on_server'] ) {
// Check cookie file exists
if ( file_exists($cookieFile = $CONFIG['cookies_folder'] . session_id()) ) {
// Load into array
if ( $cookieLine = file($cookieFile, FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES) ) {
// Process line by line
foreach ( $cookieLine as $line ) {
// Comment line?
if ( ! isset($line[0]) || $line[0] == '#' ) {
continue;
}
// Clear newlines
$line = rtrim($line);
// Split by tab
$details = explode("\t", $line);
// Check valid split, expecting 7 items
if ( count($details) != 7 ) {
continue;
}
// Save in array(domain, path, name value)
$showCookies[] = array($details[0], $details[2], $details[5], $details[6]);
}
}
}
} else if ( isset($_COOKIE[COOKIE_PREFIX]) ) {
// Cookies on client
// Encoded or unencoded?
if ( $CONFIG['encode_cookies'] ) {
// Encoded cookies stored client-side
foreach ( $_COOKIE[COOKIE_PREFIX] as $attributes => $value ) {
// Decode cookie to [domain,path,name]
$attributes = explode(' ', base64_decode($attributes));
// Check successful decoding and skip if failed
if ( ! isset($attributes[2]) ) {
continue;
}
// Extract parts
list($domain, $path, $name) = $attributes;
// Decode cookie value
$value = base64_decode($value);
// Secure cookies marked by !SEC suffix so remove the suffix
$value = str_replace('!SEC', '', $value);
// Add cookie
$showCookies[] = array($domain, $path, $name, $value);
}
} else {
// Unencoded cookies stored client-side
foreach ( $_COOKIE[COOKIE_PREFIX] as $domain => $paths ) {
// $domain holds the domain (surprisingly) and $path is an array
// of keys (paths) and more arrays (each child array of $path = one cookie)
// e.g. Array('domain.com' => Array('/' => Array('cookie_name' => 'value')))
foreach ( $paths as $path => $cookies ) {
foreach ( $cookies as $name => $value ) {
// Secure cookies marked by !SEC suffix so remove the suffix
$value = str_replace('!SEC', '', $value);
// Add cookie
$showCookies[] = array($domain, $path, $name, $value);
}
}
}
}
}
/*****************************************************************
* Print cookies
******************************************************************/
// Any to print?
if ( empty($showCookies) ) {
echo <<<OUT
<tr>
<td colspan="4" align="center">No cookies found</td>
</tr>
OUT;
} else {
// Loop through and print them
foreach ( $showCookies as $id => $cookie ) {
// Join domain & path to create "website"
$website = $cookie[0] . ( $cookie[1] == '/' ? '' : $cookie[1] );
// Cookie name
$name = htmlentities($cookie[2]);
// Get cookie value
$value = $cookie[3];
// Truncate value to avoid stretching page
if ( strlen($value) > 35 ) {
// Create a row ID
$rowID = 'cookieRow' . $id;
// Wrap the long value and escape ' so we can use it in javascript
$wrapped = str_replace("'", "\'", wordwrap($cookie[3], 30, ' ', true));
// Truncate the string
$truncated = substr($value, 0, 30);
// Replace the value with a shorten version that expands onclick
$value = <<<OUT
<span id="{$rowID}">{$truncated}<a style="cursor:pointer;" onclick="document.getElementById('{$rowID}').innerHTML='{$wrapped}';">...</a></span>
OUT;
}
echo <<<OUT
<tr>
<td>{$website}</td>
<td>{$name}</td>
<td>{$value}</td>
<td><input type="checkbox" name="delete[]" value="{$cookie[0]}|{$cookie[1]}|{$name}"></td>
</tr>
OUT;
}
}
/*****************************************************************
* Finish page
******************************************************************/
echo <<<OUT
<tr>
<th colspan="3" align="right"><input type="submit" value="Delete"></th>
<th><input type="checkbox" name="checkall" onclick="selectAll(this)"></th>
</tr>
</table>
</form>
<script type="text/javascript">
function selectAll(checkbox) {
var theForm = checkbox.form;
for(var z=0; z<theForm.length;z++){
if(theForm[z].type == 'checkbox' && theForm[z].name != 'checkall'){
theForm[z].checked = checkbox.checked;
}
}
}
</script>
OUT;
/*****************************************************************
* Send content wrapped in our theme
******************************************************************/
// Get buffer
$content = ob_get_contents();
// Clear buffer
ob_end_clean();
// Print content wrapped in theme
echo replaceContent($content);