From 5e95090defff64bc8cd7a318a73aa930948fb66d Mon Sep 17 00:00:00 2001 From: Peter Palfrader Date: Mon, 15 Nov 2004 09:20:11 +0000 Subject: Initial import --- web/Makefile.am | 12 + web/account-create.php | 106 ++++++++ web/account-edit.php | 174 +++++++++++++ web/allpingers/Makefile.am | 42 +++ web/allpingers/index.wml | 114 ++++++++ web/allpingers/pingers/aarg | 13 + web/allpingers/pingers/amessage | 13 + web/allpingers/pingers/amigo | 13 + web/allpingers/pingers/ath | 11 + web/allpingers/pingers/austria | 13 + web/allpingers/pingers/banana | 13 + web/allpingers/pingers/bigapple | 9 + web/allpingers/pingers/bikikii | 15 ++ web/allpingers/pingers/chicago | 13 + web/allpingers/pingers/citrus | 13 + web/allpingers/pingers/cmeclax | 13 + web/allpingers/pingers/cside | 13 + web/allpingers/pingers/dingo | 11 + web/allpingers/pingers/equars | 13 + web/allpingers/pingers/freedom | 13 + web/allpingers/pingers/frell | 13 + web/allpingers/pingers/george | 13 + web/allpingers/pingers/gurski | 13 + web/allpingers/pingers/hermes | 13 + web/allpingers/pingers/metacolo | 13 + web/allpingers/pingers/noreply | 13 + web/allpingers/pingers/nowwhat | 13 + web/allpingers/pingers/panta | 11 + web/allpingers/pingers/paranoia | 13 + web/allpingers/pingers/randseed | 13 + web/allpingers/pingers/rufus | 13 + web/allpingers/pingers/senshi | 8 + web/allpingers/pingers/void | 13 + web/allpingers/pingers/zerofree | 13 + web/images/Makefile.am | 19 ++ web/include/Config.inc | 41 +++ web/include/DB.inc | 330 ++++++++++++++++++++++++ web/include/Makefile.am | 15 ++ web/include/Messages.inc | 24 ++ web/include/Namespace.inc | 63 +++++ web/include/Session.inc | 180 +++++++++++++ web/include/Template.inc | 238 +++++++++++++++++ web/include/Tools.inc | 152 +++++++++++ web/include/User.inc | 150 +++++++++++ web/index.php | 27 ++ web/login.php | 56 ++++ web/logout.php | 25 ++ web/remsaint-subscription.php | 126 +++++++++ web/remsaint.php | 76 ++++++ web/resources.html | 62 +++++ web/rot26/Makefile.am | 6 + web/rot26/index.html | 65 +++++ web/rot26/keys/292faf0ee7c93743c76df482c0fa550a | 15 ++ web/rot26/keys/30b16a30c2b3af1ec5d5625fcb5059ef | 15 ++ web/rot26/keys/4B8AC6A8.asc | 41 +++ web/rot26/keys/66DC9EA2.asc | 32 +++ web/rot26/keys/7f6d997678b19ccac110f6e669143126 | 15 ++ web/rot26/keys/A91FB036.asc | 37 +++ web/rot26/keys/Makefile.am | 15 ++ web/rot26/keys/c4818fe61b42c8d27e87a476fcd76b6f | 15 ++ web/rot26/keys/d4285164186b2fdda3af791e1571e3cc | 15 ++ web/template/Makefile.am | 15 ++ web/template/account-create.html | 100 +++++++ web/template/account-edit.html | 145 +++++++++++ web/template/index.html | 130 ++++++++++ web/template/login.html | 95 +++++++ web/template/logout.html | 56 ++++ web/template/meta-chain.html | 54 ++++ web/template/metastats.html | 67 +++++ web/template/remsaint-status.html | 262 +++++++++++++++++++ web/template/remsaint-subscription.html | 27 ++ web/tls/Makefile.am | 35 +++ web/tls/template.tmpl | 118 +++++++++ 73 files changed, 3771 insertions(+) create mode 100644 web/Makefile.am create mode 100644 web/account-create.php create mode 100644 web/account-edit.php create mode 100644 web/allpingers/Makefile.am create mode 100644 web/allpingers/index.wml create mode 100644 web/allpingers/pingers/aarg create mode 100644 web/allpingers/pingers/amessage create mode 100644 web/allpingers/pingers/amigo create mode 100644 web/allpingers/pingers/ath create mode 100644 web/allpingers/pingers/austria create mode 100644 web/allpingers/pingers/banana create mode 100644 web/allpingers/pingers/bigapple create mode 100644 web/allpingers/pingers/bikikii create mode 100644 web/allpingers/pingers/chicago create mode 100644 web/allpingers/pingers/citrus create mode 100644 web/allpingers/pingers/cmeclax create mode 100644 web/allpingers/pingers/cside create mode 100644 web/allpingers/pingers/dingo create mode 100644 web/allpingers/pingers/equars create mode 100644 web/allpingers/pingers/freedom create mode 100644 web/allpingers/pingers/frell create mode 100644 web/allpingers/pingers/george create mode 100644 web/allpingers/pingers/gurski create mode 100644 web/allpingers/pingers/hermes create mode 100644 web/allpingers/pingers/metacolo create mode 100644 web/allpingers/pingers/noreply create mode 100644 web/allpingers/pingers/nowwhat create mode 100644 web/allpingers/pingers/panta create mode 100644 web/allpingers/pingers/paranoia create mode 100644 web/allpingers/pingers/randseed create mode 100644 web/allpingers/pingers/rufus create mode 100644 web/allpingers/pingers/senshi create mode 100644 web/allpingers/pingers/void create mode 100644 web/allpingers/pingers/zerofree create mode 100644 web/images/Makefile.am create mode 100644 web/include/Config.inc create mode 100644 web/include/DB.inc create mode 100644 web/include/Makefile.am create mode 100644 web/include/Messages.inc create mode 100644 web/include/Namespace.inc create mode 100644 web/include/Session.inc create mode 100644 web/include/Template.inc create mode 100644 web/include/Tools.inc create mode 100644 web/include/User.inc create mode 100644 web/index.php create mode 100644 web/login.php create mode 100644 web/logout.php create mode 100644 web/remsaint-subscription.php create mode 100644 web/remsaint.php create mode 100644 web/resources.html create mode 100644 web/rot26/Makefile.am create mode 100644 web/rot26/index.html create mode 100644 web/rot26/keys/292faf0ee7c93743c76df482c0fa550a create mode 100644 web/rot26/keys/30b16a30c2b3af1ec5d5625fcb5059ef create mode 100644 web/rot26/keys/4B8AC6A8.asc create mode 100644 web/rot26/keys/66DC9EA2.asc create mode 100644 web/rot26/keys/7f6d997678b19ccac110f6e669143126 create mode 100644 web/rot26/keys/A91FB036.asc create mode 100644 web/rot26/keys/Makefile.am create mode 100644 web/rot26/keys/c4818fe61b42c8d27e87a476fcd76b6f create mode 100644 web/rot26/keys/d4285164186b2fdda3af791e1571e3cc create mode 100644 web/template/Makefile.am create mode 100644 web/template/account-create.html create mode 100644 web/template/account-edit.html create mode 100644 web/template/index.html create mode 100644 web/template/login.html create mode 100644 web/template/logout.html create mode 100644 web/template/meta-chain.html create mode 100644 web/template/metastats.html create mode 100644 web/template/remsaint-status.html create mode 100644 web/template/remsaint-subscription.html create mode 100644 web/tls/Makefile.am create mode 100644 web/tls/template.tmpl (limited to 'web') diff --git a/web/Makefile.am b/web/Makefile.am new file mode 100644 index 0000000..a40c4c0 --- /dev/null +++ b/web/Makefile.am @@ -0,0 +1,12 @@ +SUBDIRS = \ + allpingers \ + images \ + include \ + rot26 \ + template \ + tls + +based_in = htdocs +include $(top_srcdir)/Makefile.common + +doc_DATA = account-create.php account-edit.php index.php login.php logout.php remsaint-subscription.php remsaint.php resources.html diff --git a/web/account-create.php b/web/account-create.php new file mode 100644 index 0000000..f56273f --- /dev/null +++ b/web/account-create.php @@ -0,0 +1,106 @@ + 1, + have_session => 1, + have_user => 1 ) +) or + die("Nobody loves me. I don't even have space for a name."); + +$rules = Array(); +$rules['commit']['username'] = array(type => 'string'); +$rules['commit']['name'] = array(type => 'string', optional => 1); +$rules['commit']['address'] = array(type => 'string'); +$rules['commit']['goto'] = array(type => 'string', optional => 1); +$rules['ask']['goto'] = array(type => 'string', optional => 1); +$rules['ask']['username'] = array(type => 'string', optional => 1); +$rules['ask']['name'] = array(type => 'string', optional => 1); +$rules['ask']['address'] = array(type => 'string', optional => 1); +$arguments = param_check($GLOBALS, $rules, array(params_required=>false)); + +$message = ''; +$created = 0; + +if ( $arguments['form_id']=='commit' ) { + $namespace->session->set_id(); + $username = $arguments['username']; + $address = $arguments['address']; + $name = $arguments['name']; + + if (! preg_match('/^[a-zA-Z][a-zA-Z0-9]+$/', $username) ) + error("Username '$username' does not match ^[a-zA-Z][a-zA-Z0-9]+"); + if (! preg_match('/^[a-zA-Z0-9+=_.-]+@[a-zA-Z0-9+=_.-]+$/', $address) ) + error("Address '$address' does not match ^[a-zA-Z0-9+=_.-]+@[a-zA-Z0-9+=_.-]+$"); + + $password = md5($_SERVER["UNIQUE_ID"].time.rand(0,1000000)); + $password = substr($password, 0, 8); + + $account = array(); + $account['username'] = $username; + $account['name'] = $name; + $account['password'] = $password; + + $result = $namespace->database->insert('account', $account); + if ($result) { + $account = $namespace->database->query_row('SELECT account.ref FROM account WHERE account.username=?', array($username)); + assert($account); + assert(isset($account['ref'])); + $addr = array(); + $addr['address'] = $address; + $addr['verified'] = 'T'; + $addr['enabled'] = 'T'; + $addr['account_ref'] = $account['ref']; + $result = $namespace->database->insert('address', $addr); + assert($result); + + $created = 1; + $message = "Someone, probably you, has requested the following Account on www.noreply.org:\n". + "\n". + "Username: $username\n". + "Name: $name\n". + "Address: $address\n". + "\n". + "Your Password is »".$password."«\n". + "\n". + "You can log in at\n". + "http://www.noreply.org/login.php?form_id=login&username=$username\n\n". + "\n". + "Should you have problems please contact ".$namespace->config->mail_operator.".\n"; + mail($address, "Your Noreply Account", $message, + "From: ".$namespace->config->mail_from."\n". + "Sender: ".$namespace->config->mail_sender."\n". + "Reply-To: ".$namespace->config->mail_replyto."\n". + "Mime-Version: 1.0\n". + "Content-Type: text/plain; charset=iso-8859-1\n". + "Content-Disposition: inline" + ); + } else + $message = 'Error (perhaps the username already exists).'; +} + +if (! $created ) { + $data = array(); + $data['goto'] = $arguments['goto']; + $data['message'] = $message; + $data['username'] = $namespace->session->data['user']['username']; + $data['username_field'] = $arguments['username']; + $data['name_field'] = $arguments['name']; + $data['username_field'] = $arguments['username']; + $data['address_field'] = $arguments['address']; + + $template = new Template('account-create.html', $namespace->config->template_path); + $template->parse($data); + print $template->output(); +} else { + redirect($namespace, './login.php?form_id=login&goto='.$arguments['goto'].'&username='.$username.'&message=Account+Created.+Password+will+be+sent+via+email.'); +} + +$namespace->stop(); + + +# vim:set ts=4: +# vim:set shiftwidth=4: +?> diff --git a/web/account-edit.php b/web/account-edit.php new file mode 100644 index 0000000..5702a23 --- /dev/null +++ b/web/account-edit.php @@ -0,0 +1,174 @@ + 1, + have_session => 1, + have_user => 1 ) +) or + die("Nobody loves me. I don't even have space for a name."); + +if (! $namespace->user->check_login()) { + redirect($namespace, 'login.php?form_id=login&goto=account-edit.php'); + $namespace->stop(); + exit; +}; + +$rules = Array(); +$rules['commit']['name'] = array(type => 'string', optional => 1); +$rules['commit']['password1'] = array(type => 'string', optional => 1); +$rules['commit']['password2'] = array(type => 'string', optional => 1); + +$rules['addr_enable']['address_ref'] = array(type => 'integer'); +$rules['addr_enable']['enable'] = array(type => 'string', length=>200, discard=>1); + +$rules['addr_disable']['address_ref'] = array(type => 'integer'); +$rules['addr_disable']['disable'] = array(type => 'string', length=>200, discard=>1); + +$rules['addr_verify']['address_ref'] = array(type => 'integer'); +$rules['addr_verify']['code'] = array(type => 'string', length=>200); +$rules['addr_verify']['verify'] = array(type => 'string', length=>200, discard=>1); + +$rules['addr_delete']['address_ref'] = array(type => 'integer'); +$rules['addr_delete']['delete'] = array(type => 'string', length=>200, discard=>1); + +$rules['addr_new']['address'] = array(type => 'string', length=>512); +$rules['addr_new']['addr_new'] = array(type => 'string', length=>200, discard=>1); + +$arguments = param_check($GLOBALS, $rules, array(params_required=>false)); + +$message = ''; +$created = 0; + +unset($selected_address); +if (isset($arguments['address_ref'])) { + $selected_address = $namespace->database->query_row('SELECT address.ref, address.address FROM address WHERE address.account_ref=? AND address.ref=?', array($namespace->session->data['user']['ref'], $arguments['address_ref'])); + if (! $selected_address) + error('Insufficient priviliges'); +}; + +switch($arguments['form_id']) { + case 'commit': + $namespace->session->set_id(); + $name = $arguments['name']; + $password1 = $arguments['password1']; + $password2 = $arguments['password2']; + + if ($password1 != $password2) { + $message .= 'Pasword mismatch.'; + } else { + $account = array(); + $account['name'] = $name; + if ($password1 != '') { + $account['password'] = $password1; + }; + + $result = $namespace->database->update('account', $namespace->session->data['user']['ref'], $account); + if ($result) + $message = 'Update successfull.'; + else + $message = 'Error (do not ask me what happened. I would be the last to know.)'; + } + break; + + case 'addr_enable': + $result = $namespace->database->update('address', $arguments['address_ref'], array(enabled => 'T')); + if ($result) $message = 'Update successfull.'; + else $message = 'Error (do not ask me what happened. I would be the last to know.)'; + break; + + case 'addr_disable': + $result = $namespace->database->update('address', $arguments['address_ref'], array(enabled => 'F')); + if ($result) $message = 'Update successfull.'; + else $message = 'Error (do not ask me what happened. I would be the last to know.)'; + break; + + case 'addr_verify': + assert(isset($selected_address)); + assert(isset($selected_address['address'])); + $address = $selected_address['address']; + $code = md5($address . $namespace->config->secret); + $code = substr($code, 0, 8); + if ($code == $arguments['code']) { + $update = array(); + $update['verified'] = 'T'; + $result = $namespace->database->update('address', $arguments['address_ref'], $update); + if ($result) $message = 'Update successfull.'; + else $message = 'Error (do not ask me what happened. I would be the last to know.)'; + } else + $message = 'Mismatch - Address not enabled'; + break; + + case 'addr_delete': + $result = $namespace->database->delete_row('address', $arguments['address_ref']); + if ($result) $message = 'Update successfull.'; + else $message = 'Error (do not ask me what happened. I would be the last to know.)'; + break; + + case 'addr_new': + $address = $arguments['address']; + if (! preg_match('/^[a-zA-Z0-9+=_.-]+@[a-zA-Z0-9+=_.-]+$/', $address) ) + error("Address '$address' does not match ^[a-zA-Z0-9+=_.-]+@[a-zA-Z0-9+=_.-]+$"); + + $code = md5($address.$namespace->config->secret); + $code = substr($code, 0, 8); + + $addr = array(); + $addr['address'] = $address; + $addr['account_ref'] = $namespace->session->data['user']['ref']; + $addr['verified'] = 'F'; + $addr['enabled'] = 'T'; + + $username = $namespace->session->data['user']['username']; + $result = $namespace->database->insert('address', $addr); + if ($result) { + $message = "Someone, probably you, has requested the following address be added to the $username\r\n". + "account on www.noreply.org:\r\n". + "\r\n". + "Address: $address\r\n". + "\r\n". + "Your Code to activate that address is »".$code."«\r\n". + "\r\n". + "You can log in at\r\n". + "http://www.noreply.org/login.php?form_id=login&username=$username\n\r\n". + "\r\n". + "Should you have problems please contact ".$namespace->config->mail_operator.".\r\n"; + mail($address, "Your Noreply Account", $message, + "From: ".$namespace->config->mail_from."\r\n". + "Sender: ".$namespace->config->mail_sender."\r\n". + "Reply-To: ".$namespace->config->mail_replyto + ); + $message = 'Update successfull. An email with the authorization code has been sent.'; + } else + $message = 'Error (perhaps the username already exists).'; + break; + + case '': + break; + + default: + error('unknown form '.$form_id.' in switch statement'); +} + +$row = $namespace->database->query_row('SELECT ref, username, name FROM account WHERE ref=?', array($namespace->session->data['user']['ref'])); + +$data = array(); +$data['message'] = $message; +$data['user'] = $namespace->session->data['user']['username']; +$data['username_field'] = $row['username']; +$data['name_field'] = $row['name']; +$data['addresses'] = $namespace->database->query_all('SELECT address.*, true as t, false as f FROM address WHERE account_ref=?', array($row['ref'])); +$data['PHP_SELF'] = $PHP_SELF; + +$template = new Template('account-edit.html', $namespace->config->template_path); +$template->parse($data); +print $template->output(); + +$namespace->stop(); + + +# vim:set ts=4: +# vim:set shiftwidth=4: +?> diff --git a/web/allpingers/Makefile.am b/web/allpingers/Makefile.am new file mode 100644 index 0000000..d76f5e4 --- /dev/null +++ b/web/allpingers/Makefile.am @@ -0,0 +1,42 @@ +SUBDIRS = + +based_in = htdocs +include $(top_srcdir)/Makefile.common + +doc_DATA = allpingers.txt allpingers.xml index.html + + + +index.html: index.wml allpingers.txt + wml -n -o $@ $< + +#SRCS = $(wildcard pingers/*) +#all: allpingers.txt allpingers.xml $(HTMLFILES) + +SRCS = pingers/* +allpingers.txt: $(SRCS) pingers/ + ( \ + echo "# A L L P I N G E R S' I N D E X"; \ + echo "#"; \ + echo -n "# Generated: "; \ + date --rfc-822; \ + echo "#"; \ + echo "# This list can be found on the web on http://www.noreply.org/"; \ + echo "#"; \ + echo "# If anything is wrong/broken/missing please mail the maintainer at"; \ + echo "# pingers@palfrader.org"; \ + echo; \ + for i in `cd pingers && ls -1`; do \ + if (echo -n "$$i" | grep -vq '[^a-z0-9]') ; then \ + echo "[$$i]"; \ + cat pingers/$$i; \ + echo ; \ + fi; \ + done \ + ) > $@ + +allpingers.xml: allpingers.txt + $(top_srcdir)/bin/allpingers-ini2xml < $< > $@ + +clean: + rm -f $(doc_DATA) diff --git a/web/allpingers/index.wml b/web/allpingers/index.wml new file mode 100644 index 0000000..66aa35b --- /dev/null +++ b/web/allpingers/index.wml @@ -0,0 +1,114 @@ + + + + Canonical List of All Pingers + + + + + + + + + + + +
www.noreply.org :: All Pingers
 
  + +

Canonical List of All Pingers

+

+ + + + + + + + + + + + + <: + use warnings; + use strict; + sub join_links($$) { + my ($a, $b) = @_; + if (defined $a) { + if (defined $b) { + return $a.' '.$b; + } else { + return $a; + }; + } else { + if (defined $b) { + return $b; + } else { + return ' '; + }; + }; + }; + open(F,"allpingers.txt") or die("Could not open allpingers.txt: $!"); + my $source; + my %pinger; + while() { + s/\s*(.*)\s*/$1/; + next if (/^\s*#/); + $source = $1, next if (/^\[(.*)\]$/); + if (/(.+?)\s*=\s*(.+)/) { + $pinger{$source}->{$1} = $2 if defined $source; + }; + } + close(F); + for $source (sort keys %pinger) { + print("\n"); + printf('', $pinger{$source}->{base}, $source); + my $r1_t = sprintf('T', $pinger{$source}->{rlist} ) if defined $pinger{$source}->{rlist}; + my $r1_h = sprintf('H', $pinger{$source}->{rlist_html} ) if defined $pinger{$source}->{rlist_html}; + my $r2_t = sprintf('T', $pinger{$source}->{rlist2} ) if defined $pinger{$source}->{rlist2}; + my $r2_h = sprintf('H', $pinger{$source}->{rlist2_html}) if defined $pinger{$source}->{rlist2_html}; + my $m1_t = sprintf('T', $pinger{$source}->{mlist} ) if defined $pinger{$source}->{mlist}; + my $m1_h = sprintf('H', $pinger{$source}->{mlist_html} ) if defined $pinger{$source}->{mlist_html}; + my $m2_t = sprintf('T', $pinger{$source}->{mlist2} ) if defined $pinger{$source}->{mlist2}; + my $m2_h = sprintf('H', $pinger{$source}->{mlist2_html}) if defined $pinger{$source}->{mlist2_html}; + my $rchain_t = sprintf('T', $pinger{$source}->{rchain} ) if defined $pinger{$source}->{rchain}; + my $rchain_h = sprintf('H', $pinger{$source}->{rchain_html}) if defined $pinger{$source}->{rchain_html}; + my $pgp = sprintf('ALL', $pinger{$source}->{pgpring} ) if defined $pinger{$source}->{pgpring}; + my $pgp_rsa = sprintf('RSA', $pinger{$source}->{pgpring_rsa}) if defined $pinger{$source}->{pgpring_rsa}; + my $mixring = sprintf('pubring.mix', $pinger{$source}->{mixring} ) if defined $pinger{$source}->{mixring}; + my $typelist = sprintf('type2.list', $pinger{$source}->{type2list} ) if defined $pinger{$source}->{type2list}; + my $comment = $pinger{$source}->{comment}; + + printf('', join_links($r1_t, $r1_h)); + printf('', join_links($r2_t, $r2_h)); + printf('', join_links($m1_t, $m1_h)); + printf('', join_links($m2_t, $m2_h)); + printf('', join_links($rchain_t, $rchain_h)); + printf('', join_links($pgp, $pgp_rsa)); + printf('', join_links($mixring, $typelist)); + printf('', (defined $comment && $comment ne '') ? $comment : ' '); + + print("\n"); + } + :> +
PingerCPunk V1CPunk V2Mix V1Mix V2rchainPGP KeyringMix KeyringComment
%s%s%s%s%s%s%s%s%s
+ +

+ If anything is wrong/broken/needs to be added/removed please mail the maintainer at web@palfrader.org. +

+ The canonical list of all pingers in a machine readable format can be + found here: allpingers.txt. + It was last updated <: print scalar gmtime() :>. +

+ For testing purposes I've also generated an XML + document with all pingers. Feedback especially on the DTD is very + much apprechiated. + + #


+ #

+ #A similar list can be found at Frog's: http://www.privacyresources.org/frogadmin/Pingers.html. + +

 
web@palfrader.org - + Valid HTML 4.01!
+ + diff --git a/web/allpingers/pingers/aarg b/web/allpingers/pingers/aarg new file mode 100644 index 0000000..81a6b72 --- /dev/null +++ b/web/allpingers/pingers/aarg @@ -0,0 +1,13 @@ +base = http://www.aarg.net/remailer/ +rlist = http://www.aarg.net/remailer/rlist.txt +mlist = http://www.aarg.net/remailer/mlist.txt +rlist2 = http://www.aarg.net/remailer/rlist2.txt +mlist2 = http://www.aarg.net/remailer/mlist2.txt +rlist_html = http://www.aarg.net/remailer/rlist.html +mlist_html = http://www.aarg.net/remailer/mlist.html +rlist2_html = http://www.aarg.net/remailer/rlist2.html +mlist2_html = http://www.aarg.net/remailer/mlist2.html +pgpring = http://www.aarg.net/remailer/pgp-all.asc +pgpring_rsa = http://www.aarg.net/remailer/pgp-rsa.asc +mixring = http://www.aarg.net/remailer/pubring.mix +type2list = http://www.aarg.net/remailer/type2.list diff --git a/web/allpingers/pingers/amessage b/web/allpingers/pingers/amessage new file mode 100644 index 0000000..9c42495 --- /dev/null +++ b/web/allpingers/pingers/amessage @@ -0,0 +1,13 @@ +base = http://remail.amessage.info/results/ +rlist = http://remail.amessage.info/results/rlist.txt +mlist = http://remail.amessage.info/results/mlist.txt +rlist2 = http://remail.amessage.info/results/rlist2.txt +mlist2 = http://remail.amessage.info/results/mlist2.txt +rlist_html = http://remail.amessage.info/results/rlist.html +mlist_html = http://remail.amessage.info/results/mlist.html +rlist2_html = http://remail.amessage.info/results/rlist2.html +mlist2_html = http://remail.amessage.info/results/mlist2.html +pgpring = http://remail.amessage.info/results/pgp-all.asc +pgpring_rsa = http://remail.amessage.info/results/pgp-rsa.asc +mixring = http://remail.amessage.info/results/pubring.mix +type2list = http://remail.amessage.info/results/type2.list diff --git a/web/allpingers/pingers/amigo b/web/allpingers/pingers/amigo new file mode 100644 index 0000000..b527283 --- /dev/null +++ b/web/allpingers/pingers/amigo @@ -0,0 +1,13 @@ +base = http://www.remailer.org.uk/stats/ +rlist = http://www.remailer.org.uk/stats/rlist.txt +mlist = http://www.remailer.org.uk/stats/mlist.txt +rlist2 = http://www.remailer.org.uk/stats/rlist2.txt +mlist2 = http://www.remailer.org.uk/stats/mlist2.txt +rlist_html = http://www.remailer.org.uk/stats/rlist.html +mlist_html = http://www.remailer.org.uk/stats/mlist.html +rlist2_html = http://www.remailer.org.uk/stats/rlist2.html +mlist2_html = http://www.remailer.org.uk/stats/mlist2.html +pgpring = http://www.remailer.org.uk/stats/pgp-all.asc +pgpring_rsa = http://www.remailer.org.uk/stats/pgp-rsa.asc +mixring = http://www.remailer.org.uk/stats/pubring.mix +type2list = http://www.remailer.org.uk/stats/type2.list diff --git a/web/allpingers/pingers/ath b/web/allpingers/pingers/ath new file mode 100644 index 0000000..c838287 --- /dev/null +++ b/web/allpingers/pingers/ath @@ -0,0 +1,11 @@ +base = http://rlist.ath.cx/ +rlist = http://rlist.ath.cx/rlist.txt +mlist = http://rlist.ath.cx/mlist.txt +rlist2 = http://rlist.ath.cx/rlist2.txt +mlist2 = http://rlist.ath.cx/mlist2.txt +rlist_html = http://rlist.ath.cx/rlist.html +mlist_html = http://rlist.ath.cx/mlist.html +rlist2_html = http://rlist.ath.cx/rlist2.html +mlist2_html = http://rlist.ath.cx/mlist2.html +mixring = http://rlist.ath.cx/pubring.mix +type2list = http://rlist.ath.cx/type2.list diff --git a/web/allpingers/pingers/austria b/web/allpingers/pingers/austria new file mode 100644 index 0000000..c9e3201 --- /dev/null +++ b/web/allpingers/pingers/austria @@ -0,0 +1,13 @@ +base = http://www.tahina.priv.at/~cm/stats/ +rlist = http://www.tahina.priv.at/~cm/stats/rlist.txt +mlist = http://www.tahina.priv.at/~cm/stats/mlist.txt +rlist2 = http://www.tahina.priv.at/~cm/stats/rlist2.txt +mlist2 = http://www.tahina.priv.at/~cm/stats/mlist2.txt +rlist_html = http://www.tahina.priv.at/~cm/stats/rlist.html +mlist_html = http://www.tahina.priv.at/~cm/stats/mlist.html +rlist2_html = http://www.tahina.priv.at/~cm/stats/rlist2.html +mlist2_html = http://www.tahina.priv.at/~cm/stats/mlist2.html +pgpring = http://www.tahina.priv.at/~cm/stats/pgp-all.asc +pgpring_rsa = http://www.tahina.priv.at/~cm/stats/pgp-rsa.asc +mixring = http://www.tahina.priv.at/~cm/stats/pubring.mix +type2list = http://www.tahina.priv.at/~cm/stats/type2.list diff --git a/web/allpingers/pingers/banana b/web/allpingers/pingers/banana new file mode 100644 index 0000000..f70571c --- /dev/null +++ b/web/allpingers/pingers/banana @@ -0,0 +1,13 @@ +base = http://www.bananasplit.info/echolot/ +rlist = http://www.bananasplit.info/echolot/rlist.txt +mlist = http://www.bananasplit.info/echolot/mlist.txt +rlist2 = http://www.bananasplit.info/echolot/rlist2.txt +mlist2 = http://www.bananasplit.info/echolot/mlist2.txt +rlist_html = http://www.bananasplit.info/echolot/rlist.html +mlist_html = http://www.bananasplit.info/echolot/mlist.html +rlist2_html = http://www.bananasplit.info/echolot/rlist2.html +mlist2_html = http://www.bananasplit.info/echolot/mlist2.html +pgpring = http://www.bananasplit.info/echolot/pgp-all.asc +pgpring_rsa = http://www.bananasplit.info/echolot/pgp-rsa.asc +mixring = http://www.bananasplit.info/echolot/pubring.mix +type2list = http://www.bananasplit.info/echolot/type2.list diff --git a/web/allpingers/pingers/bigapple b/web/allpingers/pingers/bigapple new file mode 100644 index 0000000..ad400c5 --- /dev/null +++ b/web/allpingers/pingers/bigapple @@ -0,0 +1,9 @@ +base = http://bigapple.dynalias.net:88/bigapple/ +rlist = http://bigapple.dynalias.net:88/bigapple/rlist +mlist = http://bigapple.dynalias.net:88/bigapple/mlist +rlist2 = http://bigapple.dynalias.net:88/bigapple/rlist2 +mlist2 = http://bigapple.dynalias.net:88/bigapple/mlist2 +rlist_html = http://bigapple.dynalias.net:88/bigapple/rlist.html +mlist_html = http://bigapple.dynalias.net:88/bigapple/mlist.html +rlist2_html = http://bigapple.dynalias.net:88/bigapple/rlist2.html +mlist2_html = http://bigapple.dynalias.net:88/bigapple/mlist2.html diff --git a/web/allpingers/pingers/bikikii b/web/allpingers/pingers/bikikii new file mode 100644 index 0000000..e1646bc --- /dev/null +++ b/web/allpingers/pingers/bikikii @@ -0,0 +1,15 @@ +base = http://bikikii-remailer.noneto.com/stats/ +rlist = http://bikikii-remailer.noneto.com/stats/rlist +mlist = http://bikikii-remailer.noneto.com/stats/mlist +rlist2 = http://bikikii-remailer.noneto.com/stats/rlist2 +mlist2 = http://bikikii-remailer.noneto.com/stats/mlist2 +rlist_html = http://bikikii-remailer.noneto.com/stats/rlist.html +mlist_html = http://bikikii-remailer.noneto.com/stats/mlist.html +rlist2_html = http://bikikii-remailer.noneto.com/stats/rlist2.html +mlist2_html = http://bikikii-remailer.noneto.com/stats/mlist2.html +rchain = http://bikikii-remailer.noneto.com/stats/rchain +rchain_html = http://bikikii-remailer.noneto.com/stats/rchain.html +pgpring = http://bikikii-remailer.noneto.com/stats/pubring-all.asc +pgpring_rsa = http://bikikii-remailer.noneto.com/stats/pubring-rsa.asc +mixring = http://bikikii-remailer.noneto.com/stats/pubring_mix.txt +type2list = http://bikikii-remailer.noneto.com/stats/type2_lis.txt diff --git a/web/allpingers/pingers/chicago b/web/allpingers/pingers/chicago new file mode 100644 index 0000000..7c23c19 --- /dev/null +++ b/web/allpingers/pingers/chicago @@ -0,0 +1,13 @@ +base = http://xenophon.homeip.net/echolot/ +rlist = http://xenophon.homeip.net/echolot/rlist.txt +mlist = http://xenophon.homeip.net/echolot/mlist.txt +rlist2 = http://xenophon.homeip.net/echolot/rlist2.txt +mlist2 = http://xenophon.homeip.net/echolot/mlist2.txt +rlist_html = http://xenophon.homeip.net/echolot/rlist.html +mlist_html = http://xenophon.homeip.net/echolot/mlist.html +rlist2_html = http://xenophon.homeip.net/echolot/rlist2.html +mlist2_html = http://xenophon.homeip.net/echolot/mlist2.html +pgpring = http://xenophon.homeip.net/echolot/pgp-all.asc +pgpring_rsa = http://xenophon.homeip.net/echolot/pgp-rsa.asc +mixring = http://xenophon.homeip.net/echolot/pubring.mix +type2list = http://xenophon.homeip.net/echolot/type2.list diff --git a/web/allpingers/pingers/citrus b/web/allpingers/pingers/citrus new file mode 100644 index 0000000..27982c0 --- /dev/null +++ b/web/allpingers/pingers/citrus @@ -0,0 +1,13 @@ +base = http://privacy.outel.org/ +rlist = http://privacy.outel.org/rlist.txt +mlist = http://privacy.outel.org/mlist.txt +rlist2 = http://privacy.outel.org/rlist2.txt +mlist2 = http://privacy.outel.org/mlist2.txt +rlist_html = http://privacy.outel.org/rlist.html +mlist_html = http://privacy.outel.org/mlist.html +rlist2_html = http://privacy.outel.org/rlist2.html +mlist2_html = http://privacy.outel.org/mlist2.html +pgpring = http://privacy.outel.org/pubring.asc +pgpring_rsa = http://privacy.outel.org/pubringrsa.asc +mixring = http://privacy.outel.org/pubring.mix +type2list = http://privacy.outel.org/type2.list diff --git a/web/allpingers/pingers/cmeclax b/web/allpingers/pingers/cmeclax new file mode 100644 index 0000000..b5b6d78 --- /dev/null +++ b/web/allpingers/pingers/cmeclax @@ -0,0 +1,13 @@ +base = http://freedom.gmsociety.org/cmeclax/gumdatni.html +rlist = http://freedom.gmsociety.org/cmeclax/rlist.txt +mlist = http://freedom.gmsociety.org/cmeclax/mlist.txt +rlist2 = http://freedom.gmsociety.org/cmeclax/rlist2.txt +mlist2 = http://freedom.gmsociety.org/cmeclax/mlist2.txt +rlist_html = http://freedom.gmsociety.org/cmeclax/rlist.html +mlist_html = http://freedom.gmsociety.org/cmeclax/mlist.html +rlist2_html = http://freedom.gmsociety.org/cmeclax/rlist2.html +mlist2_html = http://freedom.gmsociety.org/cmeclax/mlist2.html +pgpring = http://freedom.gmsociety.org/cmeclax/pubring.asc +pgpring_rsa = http://freedom.gmsociety.org/cmeclax/pubringrsa.asc +mixring = http://freedom.gmsociety.org/cmeclax/pubring.mix +type2list = http://freedom.gmsociety.org/cmeclax/type2.list diff --git a/web/allpingers/pingers/cside b/web/allpingers/pingers/cside new file mode 100644 index 0000000..ae360a4 --- /dev/null +++ b/web/allpingers/pingers/cside @@ -0,0 +1,13 @@ +base = http://www.cside.dyndns.org/stats/ +rlist = http://www.cside.dyndns.org/stats/rlist.txt +mlist = http://www.cside.dyndns.org/stats/mlist.txt +rlist2 = http://www.cside.dyndns.org/stats/rlist2.txt +mlist2 = http://www.cside.dyndns.org/stats/mlist2.txt +rlist_html = http://www.cside.dyndns.org/stats/rlist.html +mlist_html = http://www.cside.dyndns.org/stats/mlist.html +rlist2_html = http://www.cside.dyndns.org/stats/rlist2.html +mlist2_html = http://www.cside.dyndns.org/stats/mlist2.html +pgpring = http://www.cside.dyndns.org/stats/pgp-all.asc +pgpring_rsa = http://www.cside.dyndns.org/stats/pgp-rsa.asc +mixring = http://www.cside.dyndns.org/stats/pubring.mix +type2list = http://www.cside.dyndns.org/stats/type2.list diff --git a/web/allpingers/pingers/dingo b/web/allpingers/pingers/dingo new file mode 100644 index 0000000..6b37c5c --- /dev/null +++ b/web/allpingers/pingers/dingo @@ -0,0 +1,11 @@ +base = http://dingo.1hwy.com/ +rlist = http://dingo.1hwy.com/Dingorlist.txt +mlist = http://dingo.1hwy.com/Dingomlist.txt +rlist2 = http://dingo.1hwy.com/Dingorlist2.txt +mlist2 = http://dingo.1hwy.com/Dingomlist2.txt +rlist_html = http://dingo.1hwy.com/Dingorlist.html +mlist_html = http://dingo.1hwy.com/Dingomlist.html +rlist2_html = http://dingo.1hwy.com/Dingorlist2.html +mlist2_html = http://dingo.1hwy.com/Dingomlist2.html +rchain = http://dingo.1hwy.com/dingorchain.txt +rchain_html = http://dingo.1hwy.com/DingorChain.html diff --git a/web/allpingers/pingers/equars b/web/allpingers/pingers/equars new file mode 100644 index 0000000..ced4188 --- /dev/null +++ b/web/allpingers/pingers/equars @@ -0,0 +1,13 @@ +base = http://equars.com/echolot/ +rlist = http://equars.com/echolot/rlist.txt +mlist = http://equars.com/echolot/mlist.txt +rlist2 = http://equars.com/echolot/rlist2.txt +mlist2 = http://equars.com/echolot/mlist2.txt +rlist_html = http://equars.com/echolot/rlist.html +mlist_html = http://equars.com/echolot/mlist.html +rlist2_html = http://equars.com/echolot/rlist2.html +mlist2_html = http://equars.com/echolot/mlist2.html +pgpring = http://equars.com/echolot/pgp-all.asc +pgpring_rsa = http://equars.com/echolot/pgp-rsa.asc +mixring = http://equars.com/echolot/pubring.mix +type2list = http://equars.com/echolot/type2.list diff --git a/web/allpingers/pingers/freedom b/web/allpingers/pingers/freedom new file mode 100644 index 0000000..c5f9a57 --- /dev/null +++ b/web/allpingers/pingers/freedom @@ -0,0 +1,13 @@ +base = http://freedom.gmsociety.org/stats/ +rlist = http://freedom.gmsociety.org/stats/rlist +mlist = http://freedom.gmsociety.org/stats/mlist +rlist2 = http://freedom.gmsociety.org/stats/rlist2.txt +mlist2 = http://freedom.gmsociety.org/stats/mlist2.txt +rlist_html = http://freedom.gmsociety.org/stats/remailer-list.html +mlist_html = http://freedom.gmsociety.org/stats/mixmaster-list.html +rlist2_html = http://freedom.gmsociety.org/stats/rlist2.html +mlist2_html = http://freedom.gmsociety.org/stats/mlist2.html +rchain_html = http://freedom.gmsociety.org/stats/mlist2.html +pgpring = http://freedom.gmsociety.org/stats/rsa-pubring.asc +mixring = http://freedom.gmsociety.org/stats/pubring.mix +type2list = http://freedom.gmsociety.org/stats/type2.list diff --git a/web/allpingers/pingers/frell b/web/allpingers/pingers/frell new file mode 100644 index 0000000..089b1d8 --- /dev/null +++ b/web/allpingers/pingers/frell @@ -0,0 +1,13 @@ +base = http://echolot.theremailer.net/ +rlist = http://echolot.theremailer.net/rlist.txt +mlist = http://echolot.theremailer.net/mlist.txt +rlist2 = http://echolot.theremailer.net/rlist2.txt +mlist2 = http://echolot.theremailer.net/mlist2.txt +rlist_html = http://echolot.theremailer.net/rlist.html +mlist_html = http://echolot.theremailer.net/mlist.html +rlist2_html = http://echolot.theremailer.net/rlist2.html +mlist2_html = http://echolot.theremailer.net/mlist2.html +pgpring = http://echolot.theremailer.net/pgp-all.asc +pgpring_rsa = http://echolot.theremailer.net/pgp-rsa.asc +mixring = http://echolot.theremailer.net/pubring.mix +type2list = http://echolot.theremailer.net/type2.list diff --git a/web/allpingers/pingers/george b/web/allpingers/pingers/george new file mode 100644 index 0000000..82bc3e7 --- /dev/null +++ b/web/allpingers/pingers/george @@ -0,0 +1,13 @@ +base = http://stats.mixmaster.it/ +rlist = http://stats.mixmaster.it/rlist.txt +mlist = http://stats.mixmaster.it/mlist.txt +rlist2 = http://stats.mixmaster.it/rlist2.txt +mlist2 = http://stats.mixmaster.it/mlist2.txt +rlist_html = http://stats.mixmaster.it/rlist.html +mlist_html = http://stats.mixmaster.it/mlist.html +rlist2_html = http://stats.mixmaster.it/rlist2.html +mlist2_html = http://stats.mixmaster.it/mlist2.html +pgpring = http://stats.mixmaster.it/pgp-all.asc +pgpring_rsa = http://stats.mixmaster.it/pgp-rsa.asc +mixring = http://stats.mixmaster.it/pubring.mix +type2list = http://stats.mixmaster.it/type2.list diff --git a/web/allpingers/pingers/gurski b/web/allpingers/pingers/gurski new file mode 100644 index 0000000..6f929fe --- /dev/null +++ b/web/allpingers/pingers/gurski @@ -0,0 +1,13 @@ +base = http://www.gurski.org/remstats/ +rlist = http://www.gurski.org/remstats/rlist.txt +mlist = http://www.gurski.org/remstats/mlist.txt +rlist2 = http://www.gurski.org/remstats/rlist2.txt +mlist2 = http://www.gurski.org/remstats/mlist2.txt +rlist_html = http://www.gurski.org/remstats/rlist.html +mlist_html = http://www.gurski.org/remstats/mlist.html +rlist2_html = http://www.gurski.org/remstats/rlist2.html +mlist2_html = http://www.gurski.org/remstats/mlist2.html +pgpring = http://www.gurski.org/remstats/pgp-all.asc +pgpring_rsa = http://www.gurski.org/remstats/pgp-rsa.asc +mixring = http://www.gurski.org/remstats/pubring.mix +type2list = http://www.gurski.org/remstats/type2.list diff --git a/web/allpingers/pingers/hermes b/web/allpingers/pingers/hermes new file mode 100644 index 0000000..f628b80 --- /dev/null +++ b/web/allpingers/pingers/hermes @@ -0,0 +1,13 @@ +base = http://hermes.eocto.net/~pinger/ +rlist = http://hermes.eocto.net/~pinger/rlist.txt +mlist = http://hermes.eocto.net/~pinger/mlist.txt +rlist2 = http://hermes.eocto.net/~pinger/rlist2.txt +mlist2 = http://hermes.eocto.net/~pinger/mlist2.txt +rlist_html = http://hermes.eocto.net/~pinger/rlist.html +mlist_html = http://hermes.eocto.net/~pinger/mlist.html +rlist2_html = http://hermes.eocto.net/~pinger/rlist2.html +mlist2_html = http://hermes.eocto.net/~pinger/mlist2.html +pgpring = http://hermes.eocto.net/~pinger/pgp-all.asc +pgpring_rsa = http://hermes.eocto.net/~pinger/pgp-rsa.asc +mixring = http://hermes.eocto.net/~pinger/pubring.mix +type2list = http://hermes.eocto.net/~pinger/type2.list diff --git a/web/allpingers/pingers/metacolo b/web/allpingers/pingers/metacolo new file mode 100644 index 0000000..f75e899 --- /dev/null +++ b/web/allpingers/pingers/metacolo @@ -0,0 +1,13 @@ +base = http://remailer.metacolo.com/stats/ +rlist = http://remailer.metacolo.com/stats/rlist.txt +mlist = http://remailer.metacolo.com/stats/mlist.txt +rlist2 = http://remailer.metacolo.com/stats/rlist2.txt +mlist2 = http://remailer.metacolo.com/stats/mlist2.txt +rlist_html = http://remailer.metacolo.com/stats/rlist.html +mlist_html = http://remailer.metacolo.com/stats/mlist.html +rlist2_html = http://remailer.metacolo.com/stats/rlist2.html +mlist2_html = http://remailer.metacolo.com/stats/mlist2.html +pgpring = http://remailer.metacolo.com/stats/pgp-all.asc +pgpring_rsa = http://remailer.metacolo.com/stats/pgp-rsa.asc +mixring = http://remailer.metacolo.com/stats/pubring.mix +type2list = http://remailer.metacolo.com/stats/type2.list diff --git a/web/allpingers/pingers/noreply b/web/allpingers/pingers/noreply new file mode 100644 index 0000000..ee5f342 --- /dev/null +++ b/web/allpingers/pingers/noreply @@ -0,0 +1,13 @@ +base = http://www.noreply.org/echolot/ +rlist = http://www.noreply.org/echolot/rlist.txt +mlist = http://www.noreply.org/echolot/mlist.txt +rlist2 = http://www.noreply.org/echolot/rlist2.txt +mlist2 = http://www.noreply.org/echolot/mlist2.txt +rlist_html = http://www.noreply.org/echolot/rlist.html +mlist_html = http://www.noreply.org/echolot/mlist.html +rlist2_html = http://www.noreply.org/echolot/rlist2.html +mlist2_html = http://www.noreply.org/echolot/mlist2.html +pgpring = http://www.noreply.org/echolot/pgp-all.asc +pgpring_rsa = http://www.noreply.org/echolot/pgp-rsa.asc +mixring = http://www.noreply.org/echolot/pubring.mix +type2list = http://www.noreply.org/echolot/type2.list diff --git a/web/allpingers/pingers/nowwhat b/web/allpingers/pingers/nowwhat new file mode 100644 index 0000000..3da1a7e --- /dev/null +++ b/web/allpingers/pingers/nowwhat @@ -0,0 +1,13 @@ +base = http://nym.komite.net/echolot/ +rlist = http://nym.komite.net/echolot/rlist.txt +mlist = http://nym.komite.net/echolot/mlist.txt +rlist2 = http://nym.komite.net/echolot/rlist2.txt +mlist2 = http://nym.komite.net/echolot/mlist2.txt +rlist_html = http://nym.komite.net/echolot/rlist.html +mlist_html = http://nym.komite.net/echolot/mlist.html +rlist2_html = http://nym.komite.net/echolot/rlist2.html +mlist2_html = http://nym.komite.net/echolot/mlist2.html +pgpring = http://nym.komite.net/echolot/pgp-all.asc +pgpring_rsa = http://nym.komite.net/echolot/pgp-rsa.asc +mixring = http://nym.komite.net/echolot/pubring.mix +type2list = http://nym.komite.net/echolot/type2.list diff --git a/web/allpingers/pingers/panta b/web/allpingers/pingers/panta new file mode 100644 index 0000000..f2920f1 --- /dev/null +++ b/web/allpingers/pingers/panta @@ -0,0 +1,11 @@ +base = http://www.panta-rhei.dyndns.org/stats/ +rlist = http://www.panta-rhei.dyndns.org/stats/stats/rlist.txt +mlist = http://www.panta-rhei.dyndns.org/stats/stats/mlist.txt +rlist2 = http://www.panta-rhei.dyndns.org/stats/stats/rlist2.txt +mlist2 = http://www.panta-rhei.dyndns.org/stats/stats/mlist2.txt +rlist_html = http://www.panta-rhei.dyndns.org/stats/stats/rlist.html +mlist_html = http://www.panta-rhei.dyndns.org/stats/stats/mlist.html +rlist2_html = http://www.panta-rhei.dyndns.org/stats/stats/rlist2.html +mlist2_html = http://www.panta-rhei.dyndns.org/stats/stats/mlist2.html +rchain = http://www.panta-rhei.dyndns.org/stats/stats/rchain.txt +rchain_html = http://www.panta-rhei.dyndns.org/stats/stats/rchain.html diff --git a/web/allpingers/pingers/paranoia b/web/allpingers/pingers/paranoia new file mode 100644 index 0000000..5031696 --- /dev/null +++ b/web/allpingers/pingers/paranoia @@ -0,0 +1,13 @@ +base = http://remailer.autistici.org/stats/ +rlist = http://remailer.autistici.org/stats/rlist.txt +mlist = http://remailer.autistici.org/stats/mlist.txt +rlist2 = http://remailer.autistici.org/stats/rlist2.txt +mlist2 = http://remailer.autistici.org/stats/mlist2.txt +rlist_html = http://remailer.autistici.org/stats/rlist.html +mlist_html = http://remailer.autistici.org/stats/mlist.html +rlist2_html = http://remailer.autistici.org/stats/rlist2.html +mlist2_html = http://remailer.autistici.org/stats/mlist2.html +pgpring = http://remailer.autistici.org/stats/pgp-all.asc +pgpring_rsa = http://remailer.autistici.org/stats/pgp-rsa.asc +mixring = http://remailer.autistici.org/stats/pubring.mix +type2list = http://remailer.autistici.org/stats/type2.list diff --git a/web/allpingers/pingers/randseed b/web/allpingers/pingers/randseed new file mode 100644 index 0000000..a52299b --- /dev/null +++ b/web/allpingers/pingers/randseed @@ -0,0 +1,13 @@ +base = http://stats.melontraffickers.com/ +rlist = http://stats.melontraffickers.com/rlist.txt +mlist = http://stats.melontraffickers.com/mlist.txt +rlist2 = http://stats.melontraffickers.com/rlist2.txt +mlist2 = http://stats.melontraffickers.com/mlist2.txt +rlist_html = http://stats.melontraffickers.com/rlist.html +mlist_html = http://stats.melontraffickers.com/mlist.html +rlist2_html = http://stats.melontraffickers.com/rlist2.html +mlist2_html = http://stats.melontraffickers.com/mlist2.html +pgpring = http://stats.melontraffickers.com/pgp-all.asc +pgpring_rsa = http://stats.melontraffickers.com/pgp-rsa.asc +mixring = http://stats.melontraffickers.com/pubring.mix +type2list = http://stats.melontraffickers.com/type2.list diff --git a/web/allpingers/pingers/rufus b/web/allpingers/pingers/rufus new file mode 100644 index 0000000..fb776ee --- /dev/null +++ b/web/allpingers/pingers/rufus @@ -0,0 +1,13 @@ +base = http://rufus.neuropool.org/ +rlist = http://rufus.neuropool.org/rlist.txt +mlist = http://rufus.neuropool.org/mlist.txt +rlist2 = http://rufus.neuropool.org/rlist2.txt +mlist2 = http://rufus.neuropool.org/mlist2.txt +rlist_html = http://rufus.neuropool.org/rlist.html +mlist_html = http://rufus.neuropool.org/mlist.html +rlist2_html = http://rufus.neuropool.org/rlist2.html +mlist2_html = http://rufus.neuropool.org/mlist2.html +pgpring = http://rufus.neuropool.org/pgp-all.asc +pgpring_rsa = http://rufus.neuropool.org/pgp-rsa.asc +mixring = http://rufus.neuropool.org/pubring.mix +type2list = http://rufus.neuropool.org/type2.list diff --git a/web/allpingers/pingers/senshi b/web/allpingers/pingers/senshi new file mode 100644 index 0000000..52876a6 --- /dev/null +++ b/web/allpingers/pingers/senshi @@ -0,0 +1,8 @@ +base = http://private.addcom.de/senshiremailer/ +rlist2 = http://private.addcom.de/senshiremailer/rlist2.txt +mlist2 = http://private.addcom.de/senshiremailer/mlist2.txt +rlist_html = http://private.addcom.de/senshiremailer/rlist.html +mlist_html = http://private.addcom.de/senshiremailer/mlist.html +pgpring = http://private.addcom.de/senshiremailer/pgpkeys.asc +mixring = http://private.addcom.de/senshiremailer/pubring.mix +type2list = http://private.addcom.de/senshiremailer/type2.lis diff --git a/web/allpingers/pingers/void b/web/allpingers/pingers/void new file mode 100644 index 0000000..211ba5f --- /dev/null +++ b/web/allpingers/pingers/void @@ -0,0 +1,13 @@ +base = http://void.hn.org/results/ +rlist = http://void.hn.org/results/rlist.txt +mlist = http://void.hn.org/results/mlist.txt +rlist2 = http://void.hn.org/results/rlist2.txt +mlist2 = http://void.hn.org/results/mlist2.txt +rlist_html = http://void.hn.org/results/rlist.html +mlist_html = http://void.hn.org/results/mlist.html +rlist2_html = http://void.hn.org/results/rlist2.html +mlist2_html = http://void.hn.org/results/mlist2.html +pgpring = http://void.hn.org/results/pgp-all.asc +pgpring_rsa = http://void.hn.org/results/pgp-rsa.asc +mixring = http://void.hn.org/results/pubring.mix +type2list = http://void.hn.org/results/type2.list diff --git a/web/allpingers/pingers/zerofree b/web/allpingers/pingers/zerofree new file mode 100644 index 0000000..e97d31f --- /dev/null +++ b/web/allpingers/pingers/zerofree @@ -0,0 +1,13 @@ +base = http://zerofreedom.homeip.net/echolot/ +rlist = http://zerofreedom.homeip.net/echolot/rlist.txt +mlist = http://zerofreedom.homeip.net/echolot/mlist.txt +rlist2 = http://zerofreedom.homeip.net/echolot/rlist2.txt +mlist2 = http://zerofreedom.homeip.net/echolot/mlist2.txt +rlist_html = http://zerofreedom.homeip.net/echolot/rlist.html +mlist_html = http://zerofreedom.homeip.net/echolot/mlist.html +rlist2_html = http://zerofreedom.homeip.net/echolot/rlist2.html +mlist2_html = http://zerofreedom.homeip.net/echolot/mlist2.html +pgpring = http://zerofreedom.homeip.net/echolot/pgp-all.asc +pgpring_rsa = http://zerofreedom.homeip.net/echolot/pgp-rsa.asc +mixring = http://zerofreedom.homeip.net/echolot/pubring.mix +type2list = http://zerofreedom.homeip.net/echolot/type2.list diff --git a/web/images/Makefile.am b/web/images/Makefile.am new file mode 100644 index 0000000..066d950 --- /dev/null +++ b/web/images/Makefile.am @@ -0,0 +1,19 @@ +SUBDIRS = + +based_in = htdocs +include $(top_srcdir)/Makefile.common + +doc_DATA = remailer-states-long-2.png remailer-states-long.png remailer-states.png + + +remailer-states.png: $(top_srcdir)/data/remailer-states.rrd + $(top_srcdir)/bin/remailer-states-make-image $(top_srcdir)/data . + +remailer-states-long.png: $(top_srcdir)/data/remailer-states.rrd + $(top_srcdir)/bin/remailer-states-make-image-long $(top_srcdir)/data . + +remailer-states-long-2.png: $(top_srcdir)/data/remailer-states.rrd + $(top_srcdir)/bin/remailer-states-make-image-long-2 $(top_srcdir)/data . + +clean: + rm -f $(doc_DATA) diff --git a/web/include/Config.inc b/web/include/Config.inc new file mode 100644 index 0000000..fb3ed29 --- /dev/null +++ b/web/include/Config.inc @@ -0,0 +1,41 @@ +'; + var $mail_sender='Peter Palfrader '; + var $mail_replyto='Peter Palfrader '; + var $mail_operator='Peter Palfrader '; + + var $secret = '3c329081876d2b3be2227432b2648319'; + + function Config() { + } +} + +# vim:set ts=4: +# vim:set shiftwidth=4: +?> diff --git a/web/include/DB.inc b/web/include/DB.inc new file mode 100644 index 0000000..4aaadbf --- /dev/null +++ b/web/include/DB.inc @@ -0,0 +1,330 @@ + + * Florian Reitmeir + */ + +/** + * Database Abstraction Class + * + * This is a small database abstraction class based on ADODB + * + * It provides only a very small set of functions but has + * proven to be sufficient for most projects. + * + * @author Peter Palfrader/3node + * @author Florian Reitmeir/3node + * @version $Id$ + */ + +include('/usr/share/adodb/adodb.inc.php'); + +class Database { + var $connection; + var $errorMsg; + var $errorNo; + + /** + * create a new database object + * + * The constructor creates a database connection to the database + * specified with host, user, + * password, and name. + * + * type specifies the kind of database you want to use + * (postgres, mysql, etc.) + * + * @param string type of DBMS + * @param string host where the DBMS runs + * @param string the username to connect as + * @param string the password to authenticate with + * @param string the name of the database to connect to + * @returns boolean true on success, false on error + */ + function Database($type, $host, $user, $password, $name) { + $this->connection = &ADONewConnection($type); + #if (!$this->connection->PConnect($host, $user, $password, $name)) + if (!$this->connection->Connect($host, $user, $password, $name)) + return false; + + assert( $this->connection ); + $this->database['ErrorMsg'] = ''; + $this->database['ErrorNo'] = 0; + + return true; + } + + + /** + * remove/quote evil characters + * + * This function calls the database backend's quote string + * function which is supposed to quote evil charaters + * like semicolons, single and double quotes etc so that they + * can be used in SQL queries. + * + * @param string the string which should be cleaned + * @returns string the cleaned string + */ + function clean_string(&$string) + { + assert( $this->connection ); + $result = preg_replace ('/[^A-Za-z0-9_-]+/', '', $string); + return $result; + } + + + /** + * execute an SQL query with parameters + * + * This function executes the SQL query passed in query. + * The query is first prepared and then executed with the values + * passed in params. + * + * The ADODB backend emulates binding of parameters if the database + * does not support it natively. Only params' values + * are passed to the binding, not its keys. + * + * You probably do not want to call this function from your code. + * Use the query_row, query_all, + * insert, or update function depending + * on what you want to do. + * + * This function returns a recordset which is an ADODB result type. + * Please * refer to the ADODB documentation for details. On error + * false is * returned and errorMsg and errorNo + * are set appropriatly. + * + * @param string the SQL query to execute + * @param array the values to bind to the execute + * @returns recordset A recordset on success, false otherwhise + */ + function execute_query($query, &$params) + { + assert( $this->connection ); + $this->errormsg = ''; + $this->errorno = 0; + + $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; + $values = array_values($params); + $stmt = $this->connection->Prepare($query); + $recordset = $this->connection->Execute($stmt, $values); + + if ($recordset === false) + { + $this->errorMsg = $this->connection->ErrorMsg(); + $this->errorNo = $this->connection->ErrorNo(); + } + return $recordset; + } + + /** + * execute an SQL query and return the first row + * + * This function executes the SQL query passed in query. + * It takes an optional array of parameters and returns the fields of + * the first result row as an assoziative array. + * + * execute_query is called to do the real work. + * + * @param string the SQL query to execute + * @param array the values to bind to the execute + * @returns array An assiziative array on success, false otherwhise + */ + function query_row($query, $params=array()) + { + assert( $this->connection ); + $recordset = $this->execute_query($query, $params); + if ($recordset === False) + return False; + else + return $recordset->fields; + } + + /** + * execute an SQL query and return all results + * + * This function executes the SQL query passed in query. + * It takes an optional array of parameters and returns an array of + * assoziative arrays (one per result row). + * + * execute_query is called to do the real work. + * + * @param string the SQL query to execute + * @param array the values to bind to the execute + * @returns array An array of assiziative arrays on success, false otherwhise + */ + function query_all($query, $params=array()) + { + assert( $this->connection ); + $recordset = $this->execute_query($query, $params); + + if ($recordset === False) + return False; + + $output = array(); + while (! $recordset->EOF) + { + $output[] = $recordset->fields; + $recordset->MoveNext(); + } + + return $output; + } + + /** + * Insert values into a table + * + * insert inserts a new row into the table table. + * The values to insert are taken from the assoziative array + * params. + * + * This function handles selection of the primary key automatically if + * no ref value is set in the params. + * + * The SQL query is built using tablename and the params passed as + * arguments. execute_query is called to do the real work. + * + * @param string the table to insert the new data into + * @param array assoziative array of values to insert + * @params string name of the tables primary key (defaults to ref) + * @returns boolean True on success, false otherwhise + */ + function insert($table, $params=array(), $refname = "ref") + { + assert( $this->connection ); + $this->errorMsg = ''; + $this->errorNo = 0; + + $keys = array_map($this->clean_string, array_keys($params)); + $qmarks = array(); + $values = array_values($params); + foreach ($params as $key=>$value) + { + $qmarks[] = "?"; + } + + if ($params[$refname]) + $sqlinsert='insert into "'.$this->clean_string($table).'" ('.implode(',', $keys).') values ('.implode(',',$qmarks).')'; + else + $sqlinsert='insert into "'.$this->clean_string($table). + '" ('.$this->clean_string($refname).', '.implode(',', $keys).') + values ( (select coalesce( max('.$this->clean_string($refname).')+1, 1 ) from "'.$this->clean_string($table).'"), ' . implode(',',$qmarks).')'; + + $stmt = $this->connection->Prepare($sqlinsert); + $recordset = $this->connection->Execute($stmt, $values); + + if ($recordset === False) + { + $this->errorMsg = $this->connection->ErrorMsg(); + $this->errorNo = $this->connection->ErrorNo(); + return False; + } + else + return True; + } + + /** + * Update a row in a table + * + * This function updates the table row given by the primary key + * ref. The new values are to be passed via the assoziative + * array params. An optional list of columns which should + * be set to NULL may be given too. + * + * The SQL query is built using tablename and the params passed as + * arguments. execute_query is called to do the real work. + * + * @param string the table to update the row data in + * @param integer the primary key of the row to update + * @param array assoziative array of values to insert + * @param array array of columns to set to NULL + * @params string name of the tables primary key (defaults to ref) + * @returns boolean True on success, false otherwhise + */ + function update($table, $ref, $params=array(), $nullify = array(), $refname="ref") + { + assert( $this->connection ); + $this->errorMsg = ''; + $this->errorNo = 0; + + $sqlparams = array(); + foreach ( $params as $key=>$value ) + { + $sqlparams[]=$this->clean_string($key).'=?'; + } + foreach ( $nullify as $key ) + { + $sqlparams[]=$this->clean_string($key).'= null'; + } + + $values = array_values($params); + $values[] = $ref; + + $sqlupdate='update "'.$this->clean_string($table).'" set '.implode(',', $sqlparams).' where '.$this->clean_string($refname).'=?'; + $stmt = $this->connection->Prepare($sqlupdate); + $recordset = $this->connection->Execute($stmt, $values); + + if ($recordset === False) + { + $this->errorMsg = $this->connection->ErrorMsg(); + $this->errorNo = $this->connection->ErrorNo(); + return False; + } + else + return True; + } + + /** + * Delete a row in a table + * + * This function delete the table row given by the primary key + * ref. + * + * @param string the table to update the row data in + * @param integer the primary key of the row to update + * @params string name of the tables primary key (defaults to ref) + * @returns boolean True on success, false otherwhise + */ + function delete_row($table, $ref, $refname="ref") + { + assert( $this->connection ); + $this->errorMsg = ''; + $this->errorNo = 0; + + $values = array( $ref ); + $sqldelete='delete from "'.$this->clean_string($table).'" where '.$this->clean_string($refname).'=?'; + $stmt = $this->connection->Prepare($sqldelete); + $recordset = $this->connection->Execute($stmt, $values); + + if ($recordset === False) + { + $this->errorMsg = $this->connection->ErrorMsg(); + $this->errorNo = $this->connection->ErrorNo(); + return False; + } + else + return True; + } + + /** + * error function + * + * This function returns a string specifying the Error Code and Message + * from the last statement, or the empty string if no error was raised. + + * @returns string ErrorCode and Message if there was an error, an empty string otherwhise + */ + function error() + { + if ($this->errorNo) + return "ErrorNo: ".$this->errorNo."; ErrorMsg: ".$this->errorMsg.";"; + else + return ""; + } +}; + +# vim:set ts=4: +# vim:set shiftwidth=4: +?> diff --git a/web/include/Makefile.am b/web/include/Makefile.am new file mode 100644 index 0000000..1c8e13d --- /dev/null +++ b/web/include/Makefile.am @@ -0,0 +1,15 @@ +SUBDIRS = + +based_in = . +include $(top_srcdir)/Makefile.common + +doc_DATA = \ + Config.inc \ + DB.inc \ + Messages.inc \ + Namespace.inc \ + Session.inc \ + Template.inc \ + Tools.inc \ + User.inc + diff --git a/web/include/Messages.inc b/web/include/Messages.inc new file mode 100644 index 0000000..5de5497 --- /dev/null +++ b/web/include/Messages.inc @@ -0,0 +1,24 @@ + + */ + +/** + * Messages for RemSaint + * + * @author Peter Palfrader/3node + * @version $Id$ + */ + +class Messages { + var $creating_session_failed = 'Creating Session Failed!'; + + function Messages() { + } + +} + +# vim:set ts=4: +# vim:set shiftwidth=4: +?> diff --git a/web/include/Namespace.inc b/web/include/Namespace.inc new file mode 100644 index 0000000..4cfeccc --- /dev/null +++ b/web/include/Namespace.inc @@ -0,0 +1,63 @@ + + */ + +require_once("../include/Config.inc"); +require_once("../include/DB.inc"); +require_once("../include/Messages.inc"); +require_once("../include/Session.inc"); +require_once("../include/User.inc"); + +class Namespace { + var $have_database = false; + var $have_session = false; + var $have_user = false; + + var $config = false; + var $database = false; + var $messages = false; + var $session = false; + var $user = false; + + function Namespace($options = array()) { + if ($options['have_database']) + $this->have_database = $options['have_database']; + if ($options['have_session']) + $this->have_session = $options['have_session']; + if ($options['have_user']) + $this->have_user = $options['have_user']; + + $this->config = new Config() or + die("Count not create config object"); + $this->messages = new Messages or + die("Could not create messages object"); + + if ($this->have_database) + $this->database = new Database ( + $this->config->db_type, + $this->config->db_host, + $this->config->db_user, + $this->config->db_password, + $this->config->db_name) or + die("Could not create database object"); + if ($this->have_session) + $this->session = new Session( $this->database, $this->config->session_cookie_name, $this->messages ) or + die("Could not create session object"); + if ($this->have_user) + $this->user = new User( $this->database, $this->session, $this->config->auth_timeout ) or + die("Could not create user object"); + } + + function stop() { + if ($this->have_session) { + assert($this->session); + $this->session->close(); + } + } +} + +# vim:set ts=4: +# vim:set shiftwidth=4: +?> diff --git a/web/include/Session.inc b/web/include/Session.inc new file mode 100644 index 0000000..d6c926a --- /dev/null +++ b/web/include/Session.inc @@ -0,0 +1,180 @@ +get_id() and + * throwing an error on failure. + * + * @params object a Database object + * @params string Name of the cookie holding session id + * @params object a Messages object + */ + function Session(&$database, $cookie_name, &$messages) { + assert($cookie_name); + assert($database); + assert($messages); + + $this->cookie_name = $cookie_name; + $this->db = &$database; + $this->messages = &$messages; + + $this->get_id(); + } + + /** + * stores current session to database + * + * This function stores the current session to the database by + * calling store_data and sets id and + * ref to false. + * + * @returns boolean true on success, false otherwhise + */ + function close() { + if (! $this->id) + return true; + + assert($this->id != ''); + assert($this->db); + + if ($this->store_data() === false) + return false; + $this->id = false; + $this->ref = false; + $this->data = false; + return true; + } + + /** + * Get data from database + * + * Fetches data for the current id from the database + * and sets session_data_ref. + * + * @returns boolean true on success, false otherwhise + */ + function get_data() + { + assert($this->id != ''); + assert($this->db); + $row=$this->db->query_row('select ref, data from session where id=?', array($this->id)); + if ( $row === false ) + return false; + + $this->ref = $row['ref']; + $this->data = ($row['data']) ? unserialize($row['data']) : false; + assert($this->ref); + return true; + } + + /** + * Store data in database + * + * Dumps data for the current id into the database. + * + * @returns boolean true on success, false otherwhise + */ + function store_data() + { + assert($this->ref); + assert($this->id != ''); + assert($this->db); + return $this->db->update('session', $this->ref, array(data => serialize($this->data), last_seen => 'now')); + } + + /** + * Create a session in the database with the current id + * + * Creates a session in the database and fills local variables by + * calling get_data(). + * + * @returns boolean true if success + */ + function create_session() + { + assert($this->id != ''); + assert($this->db); + $result = $this->db->insert('session',array(id => $this->id)); + if ( $result === false ) + return false; + return $this->get_data(); + } + + /** + * Create a unique string useable as session ID + * + * @returns string a unique session ID + */ + function create_id() { + $id = $_SERVER["UNIQUE_ID"]; + $id .= md5(time.rand(0,1000000)); + return $id; + } + + /** + * Set session ID for current session + * + * Should there be no session ID a new session ID is created, inserted into + * the database (creating a new session), sent as a cookie to the luser, + * and returned. + * + * Also makes sure ref is set and persistent session data is loaded. + * + * @returns string session ID, boolean false on error + */ + function set_id() { + if ( ! $this->id ) { + $this->id = $this->create_id(); + if ($this->create_session() === false) { + $this->id = false; + return false; + } + setcookie($this->cookie_name, $this->id); + } else { + if ($this->get_data() === false) { + $this->id = false; + return false; + } + } + + return $this->id; + } + + /** + * Get session ID for current session + * + * This function takes the session ID of a cookie, checks wheter it is + * database and if yes, returns it. + * + * Also makes sure ref is set and persistent session data is loaded. + * + * @returns string session ID, boolean false on error + */ + function get_id() { + $this->id=$_COOKIE[$this->cookie_name]; + if ($this->id) + if ($this->get_data() === false) + $this->id = false; + + return $this->id; + } +} + + +?> diff --git a/web/include/Template.inc b/web/include/Template.inc new file mode 100644 index 0000000..144bcdb --- /dev/null +++ b/web/include/Template.inc @@ -0,0 +1,238 @@ +path=$path; + $content_array = file($this->path.'/'.$filename); + $this->raw_content = implode("", $content_array); + $this->global_data=array(); + } + + function parse(&$data) + { + if ( ! $this->begin_parse_time ) + $this->begin_parse_time = microtime(); + if ( $GLOBALS['global_template_params'] ) + $data = array_merge($data, $GLOBALS['global_template_params']); + $this->parsed_content=$this->parse_rek($data, $this->raw_content); + $this->end_parse_time = microtime(); + } + + function evaluate(&$data, &$name, &$values, $and) + { + if ($and === true) + $return_value = true; + else + $return_value = false; + + foreach ($values as $value) + { + if ($and === true) + $return_value &= ($data[$name]==$value); + else + $return_value |= ($data[$name]==$value); + } + return $return_value; + } + + function parse_rek(&$data, &$raw) + { + $position = 0; + $out = ''; + # JA, dieses komische !== brauchts wirklich so. + # GENAU SO + # GLAUBS MIR EINFACH + # $a !== $b Not identical TRUE if $a is not equal to $b, or they are not of the same type. (PHP 4 only) + while ( ($command_position=strpos($raw, '/", substr($raw,$command_position), $matches); + $command = array(); + $command['command']=$matches[1]; + $command['name']=$matches[2]; + if (isset($matches[3])) { + $command['value']=$matches[3]; + preg_match("/(VALUE=.*)\s*>/", substr($raw,$command_position), $matches); + if ( isset($matches) ) + { + $command['values'] = explode('VALUE=', $matches[1]); + unset($command['values'][0]); + foreach ( $command['values'] as $key=>$value) + { + $command['values'][$key] = substr(trim($value),1,-1); + } + } + } + + # get new position + $position=strpos($raw, '>', $command_position)+1; + + switch($command['command']) + { + case 'INCLUDE': + $template = new Template($command['name'],$this->path); + $template->parse($data); + $out.=$template->output(); + break; + case 'VAR_NOESC': + $out.=$data[$command['name']]; + break; + case 'VAR': + $out.=htmlspecialchars($data[$command['name']]); + break; + case 'UNLESS': + $endif_command_position=strpos($raw, '', $position); + $if_text=substr($raw, $position,$endif_command_position-$position); + $position=strpos($raw, '>', $endif_command_position)+1; + + if (isset($command['value'])) + { + if ( ! $this->evaluate($data, $command['name'], $command['values'], false) ) + #if ( $data[$command['name']]!=$command['value'] ) + $out.=$this->parse_rek($data, $if_text); + } + else + { + if ( ! $data[$command['name']] ) + $out.=$this->parse_rek($data, $if_text); + } + break; + case 'IF': + $endif_command_position=strpos($raw, '', $position); + $if_text=substr($raw, $position,$endif_command_position-$position); + $position=strpos($raw, '>', $endif_command_position)+1; + + if (isset($command['value'])) + { + if ( $this->evaluate($data, $command['name'], $command['values'], false) ) + # if ( $data[$command['name']]==$command['value'] ) + $out.=$this->parse_rek($data, $if_text); + } + else + { + if ( $data[$command['name']] ) + $out.=$this->parse_rek($data, $if_text); + } + break; + case 'CMP': + $endif_command_position=strpos($raw, '', $position); + $if_text=substr($raw, $position,$endif_command_position-$position); + $position=strpos($raw, '>', $endif_command_position)+1; + + if ( $data[$command['name']]==$data[$command['value']] ) + $out.=$this->parse_rek($data, $if_text); + break; + case 'LOOP': + $endloop_command_position=strpos($raw, '', $position); + $loop_text=substr($raw, $position,$endloop_command_position-$position); + $position=strpos($raw, '>', $endloop_command_position)+1; + + if ( isset($data[$command['name']]) ) + { + foreach ( $data[$command['name']] as $row ) + { + # test if row is set... + if ( isset( $row ) ) + { + # set global variable scope + $local=array_merge($data, $row); + $out.=$this->parse_rek($local, $loop_text); + } + } + } + break; +# (TMPL_ACCESS - wie TPL_LOOP, nur, dass nicht auf alle array-elemente zugegriffen wird, +# sondern nur auf das in VALUE angegebene. wird VALUE nicht angegeben, wird das 1. element verwendet.) + case 'ACCESS': + $endaccess_command_position=strpos($raw, '', $position); + $access_text=substr($raw, $position,$endaccess_command_position-$position); + $position=strpos($raw, '>', $endaccess_command_position)+1; + if ( isset($data[$command['name']]) ) { + if ( isset( $command['value'] ) ) { + $row = $data[$command['name']][$command['value']]; + } + else { + reset( $data[$command['name']] ); + $row = current( $data[$command['name']] ); + } + if ( isset( $row ) ) + { + # set global variable scope + $local=array_merge($data, $row); + $out.=$this->parse_rek($local, $access_text); + } + } + break; + case 'NAMESPACE': + $endloop_command_position=strpos($raw, '', $position); + $loop_text=substr($raw, $position,$endloop_command_position-$position); + $position=strpos($raw, '>', $endloop_command_position)+1; + + if ( isset($data[$command['name']]) ) + { + $row = $data[$command['name']]; + # set global variable scope + $local=array_merge($data, $row); + $out.=$this->parse_rek($local, $loop_text); + } + break; + case 'RANDOM': + $endloop_command_position = strpos($raw, '', $next_pos); + $loop_text=substr($raw, $position,$endloop_command_position-$position); + + $hits = split( '', $loop_text ); + $chosen = rand(0, sizeof($hits) - 1); + $position=strpos($raw, '>', $endloop_command_position)+1; + + $out.=$this->parse_rek($data, $hits[$chosen]); + break; + } + } + $out.=substr($raw, $position); + return $out; + } + + function output() + { + header('Cache-Control: no-cache, must-revalidate'); + header('Pragma: no-cache'); + $time = $this->end_parse_time-$this->begin_parse_time; + return $this->parsed_content."\n\n"; + } +} +?> diff --git a/web/include/Tools.inc b/web/include/Tools.inc new file mode 100644 index 0000000..430fe54 --- /dev/null +++ b/web/include/Tools.inc @@ -0,0 +1,152 @@ +0) { + foreach ($vars as $key=>$value) { + $param[] = $key.'='.urlencode($value); + } + $pars = '?' . implode('&', $param); + } else { + $pars = ''; + } + + if ($name != '') { + Header('Location: '.$ns->config->baseurl.'/'.$name . $pars); + } elseif (isset ($GLOBALS['followup_to'])) { + Header('Location: '.$GLOBALS['followup_to'] . $pars); + } elseif (isset ($GLOBALS['HTTP_REFERER'])) { + Header('Location: '.$GLOBALS['HTTP_REFERER'] . $pars); + } else { + error('Fehler: Weiss nicht mehr wohin jetzt.'); + }; +} + +function param_check(&$parameters, &$new_check_fields, $optionals=array()) +{ + $check_parameters = array(); + + $params_required = isset($optionals['params_required']) ? $optionals['params_required']: true; + $form_id = isset($optionals['form_id']) ? $optionals['form_id'] : $parameters['form_id']; + + if ( ! isset($form_id) ) + if ( $params_required ) + error('Formular ID: not set'); + else { + $form_id='default'; + } + + if ( $form_id == 'default' && ! isset($new_check_fields[$form_id]) ) + return $check_parameters; + + if ( ! isset($new_check_fields[$form_id]) ) + error("Formular ID: is set ('$form_id') but no ruleset defined"); + + assert($form_id !== false ); + assert($new_check_fields[$form_id] !== false); + + $check_fields = $new_check_fields[$form_id]; + foreach( $check_fields as $field_name => $field ) { + + if ( !isset($parameters[$field_name]) && $field['type'] != 'boolean' ) { + if (!$field['optional'] ) + error('Parameter '.$field_name.' not found'); + } else { + if ( isset($field['length']) && strlen($parameters[$field_name])>$field['length'] ) + error('Parameter '.$field_name.' to long'); + + unset($result); + switch ($field['type']) { + case 'integer': + if (!(is_numeric($parameters[$field_name]) && is_int($parameters[$field_name] + 0))) + error($field_name . ' is not an Integer'); + $result=$parameters[$field_name] + 0; + break; + case 'decimal': + if (! isset($field['scale']) ) + $field['scale'] = 0; + assert(isset($field['precision'])); + assert(isset($field['scale'])); + $vorkomma = '[0-9]{0,'.($field['precision'] - $field['scale']).'}'; + $nachkomma = '[0-9]{0,'.($field['scale']).'}'; + $regex = $vorkomma . '(\.'.$nachkomma.')?'; + $matches = preg_match('/^'.$regex.'$/', $parameters[$field_name]); + if (! $matches) + error($field_name . " is not Decimal (matching $regex)"); + $result=$parameters[$field_name]; + if ($result === '') + $result = 0; + break; + case 'string': + if (!is_string($parameters[$field_name])) + error($field_name . ' is not a String'); + $result=trim($parameters[$field_name]); + break; + case 'boolean': + if ($parameters[$field_name]) + $result=true; + else + $result=false; + break; + case 'anything': + $result=$parameters[$field_name]; + break; + default: + error('unkown Type '.$field['type'].' in Ruleset '.$form_id.' for field '.$field_name); + } + + assert(isset($result)); + if ( isset( $field['modifier'] ) ) + if ( is_array($field['modifier']) ) + foreach ($field['modifier'] as $modifier) { + assert(is_callable($modifier)); + $result = $modifier($result); + } + else { + assert(is_callable($field['modifier'])); + $result = $field['modifier']($result); + } + + if (! $field['discard']) + $check_parameters[$field_name] = $result; + } + } + $check_parameters['form_id']=$form_id; + return $check_parameters; +} + +function print_array(&$fields, $die = 0) +{ + echo "
";
+	print_r($fields);
+	echo "XXXXXXXXXXXX
"; + + if ($die) + exit; +} + +# vim:set ts=4: +# vim:set syntax=php: +# vim:set shiftwidth=4: + +?> diff --git a/web/include/User.inc b/web/include/User.inc new file mode 100644 index 0000000..84d36b3 --- /dev/null +++ b/web/include/User.inc @@ -0,0 +1,150 @@ +session + * + * @param object Database Object + * @param object Session Object + * @param integer Login timout in seconds + */ + function User(&$database, &$session, $auth_timeout) { + assert($session); + assert($database); + assert($auth_timeout); + $this->session = &$session; + $this->auth_timeout = $auth_timeout; + $this->db = &$database; + + $last_seen = $this->session->data['user']['last_seen']; + $ref = $this->session->data['user']['ref']; + $authenticated = false; + + if ( $last_seen && + ( $last_seen + $this->auth_timeout >= time()) && + ( $time_seen <= time() ) && + $this->session->data['user']['authenticated'] && + $this->check_ref_session($ref) ) + $authenticated = true; + else { + $ref = false; + $authenticated = false; + $last_seen = false; + } + + $this->session->data['user']['authenticated'] = $authenticated; + $this->session->data['user']['last_seen'] = $authenticated ? time() : false; + $this->session->data['user']['ref'] = $ref; + } + + /** + * Check if given Ref is a valid user ref + * + * checks if the ref and current session are from the same user. + * + * @param integer user ref + * @returns boolean true if success + */ + function check_ref_session($ref) { + assert($this->session); + assert($this->session->ref); + assert($this->db); + assert($ref); + + $row=$this->db->query_row('SELECT ref FROM account WHERE session_ref=? AND ref=?', array($this->session->ref, $ref)); + + if ( $row === false ) + return false; + else + return true; + } + + /** + * Do the login of a user + * + * Check if username and password are a valid pair, and update session_ref + * in database, set timestamp. + * + * @param string supplied username from user + * @param string supplied password from user + * @returns boolean true if success + */ + function do_login($username, $password) + { + assert($this->session); + assert($this->session->ref); + assert($this->db); +# assert($username); +# assert($password); + if ( ! $username ) + return false; + if ( ! $password ) + return false; + + $row=$this->db->query_row('SELECT ref FROM account WHERE username=? AND password=?', array($username,$password)); + + if ( $row === false ) + return false; + + $update = $this->db->update('account', $row['ref'], array(session_ref=>$this->session->ref)); + if ( ! $update ) + return false; + + $this->session->data['user']['authenticated'] = true; + $this->session->data['user']['last_seen'] = time(); + $this->session->data['user']['ref'] = $row['ref']; + $this->session->data['user']['username'] = $username; + + # FIXME: old session is destroyed + return true; + } + + /** + * Logout the User + * + * logout the user, do not check if has logged in. + * + * @returns boolean true on success, false otherwhise + */ + function do_logout() + { + assert($this->session); + assert($this->session->ref); + $this->session->data['user']['authenticated'] = false; + $this->session->data['user']['last_seen'] = false; + $this->session->data['user']['ref'] = false; + $this->session->data['user']['username'] = false; + return true; + } + + /** + * Check for login status + * + * Checks if user has logged in correctly. + * + * @returns boolean true on authenticated, false otherwhise + */ + function check_login() + { + assert($this->session); + if (! $this->session->get_id()) + return false; + assert($this->session->ref); + return $this->session->data['user']['authenticated']; + } +} + +?> diff --git a/web/index.php b/web/index.php new file mode 100644 index 0000000..6c37e0b --- /dev/null +++ b/web/index.php @@ -0,0 +1,27 @@ + 1, + have_session => 1, + have_user => 1 ) +) or + die("Nobody loves me. I don't even have space for a name."); + +$data = array(); +$data['remotehostname'] = gethostbyaddr($_SERVER['REMOTE_ADDR']); +$data['remoteip'] = $_SERVER['REMOTE_ADDR']; +$data['user'] = $namespace->session->data['user']['username']; +$data['have_ssl'] = $_SERVER['SSL_PROTOCOL'] ? 1 : 0; +$template = new Template('index.html', $namespace->config->template_path); +$template->parse($data); +print $template->output(); + +$namespace->stop(); + +# vim:ts=4: +# vim:shiftwidth=4: +?> diff --git a/web/login.php b/web/login.php new file mode 100644 index 0000000..691e26e --- /dev/null +++ b/web/login.php @@ -0,0 +1,56 @@ + 1, + have_session => 1, + have_user => 1 ) +) or + die("Nobody loves me. I don't even have space for a name."); + +$rules = Array(); +$rules['auth']['password'] = array(type => 'string'); +$rules['auth']['username'] = array(type => 'string'); +$rules['auth']['goto'] = array(type => 'string', optional => 1); +$rules['login']['goto'] = array(type => 'string', optional => 1); +$rules['login']['username'] = array(type => 'string', optional => 1); +$rules['login']['message'] = array(type => 'string', optional => 1); +$arguments = param_check($GLOBALS, $rules, array(params_required=>false)); + +$message = $arguments['message']; +$logged_in = 0; + +if ( $arguments['form_id']=='auth' ) { + $namespace->session->set_id(); + $result = $namespace->user->do_login( $arguments['username'], $arguments['password']); + if ($result) + $logged_in = 1; + else + $message = 'Invalid username/password pair.'; +} + +if (! $logged_in ) { + $data = array(); + $data['goto'] = $arguments['goto']; + $data['message'] = $message; + $data['username'] = $namespace->session->data['user']['username']; + $data['username_field'] = $arguments['username']; + + $template = new Template('login.html', $namespace->config->template_path); + $template->parse($data); + print $template->output(); +} else { + if ($arguments['goto']) + redirect($namespace, $arguments['goto']); + else + redirect($namespace, './'); +} + +$namespace->stop(); + + +# vim:set ts=4: +# vim:set shiftwidth=4: +?> diff --git a/web/logout.php b/web/logout.php new file mode 100644 index 0000000..8069a39 --- /dev/null +++ b/web/logout.php @@ -0,0 +1,25 @@ + 1, + have_session => 1, + have_user => 1 ) +) or + die("Nobody loves me. I don't even have space for a name."); + +$namespace->user->do_logout(); + +$data = array(); + +$template = new Template('logout.html', $namespace->config->template_path); +$template->parse($data); +print $template->output(); + +$namespace->stop(); + +# vim:set ts=4: +# vim:set shiftwidth=4: +?> diff --git a/web/remsaint-subscription.php b/web/remsaint-subscription.php new file mode 100644 index 0000000..0c7bfb5 --- /dev/null +++ b/web/remsaint-subscription.php @@ -0,0 +1,126 @@ + + */ + +/** + * RemSaint + * + * @author Peter Palfrader/3node + * @version $Id$ + */ + +require_once("../include/Namespace.inc"); +require_once("../include/Tools.inc"); +require_once("../include/Template.inc"); + +$namespace = new Namespace( + array( have_database => 1, + have_session => 1, + have_user => 1 ) +) or + die("Nobody loves me. I don't even have space for a name."); + +$message = ''; +$username = ''; + +if (! $namespace->user->check_login()) { + $message = 'Not logged in. Nothing done.'; +} else { + $username = $namespace->session->data['user']['username']; + $rules = Array(); + $rules['subscription']['ref'] = array(type => 'anything'); + $refs = param_check($GLOBALS, $rules); + + $rules = Array(); + foreach ($refs['ref'] as $ref) { + if (! is_int($ref + 0) ) { + $message = 'Wrong refs'; + break; + } else { + $rules['subscription']['warning_'.$ref] = array(type => 'boolean'); + $rules['subscription']['critical_'.$ref] = array(type => 'boolean'); + $rules['subscription']['recovery_'.$ref] = array(type => 'boolean'); + }; + }; + if ($message == '') { + $arguments = param_check($GLOBALS, $rules); + $user_ref = $namespace->session->data['user']['ref']; + + foreach ($refs['ref'] as $ref) { + if ($arguments['warning_'.$ref] || + $arguments['critical_'.$ref] || + $arguments['recovery_'.$ref]) + $user_subs[$ref] = array ( + notify_warning => $arguments['warning_'.$ref], + notify_critical => $arguments['critical_'.$ref], + notify_recovery => $arguments['recovery_'.$ref], + ); + } + $db_subs = $namespace->database->query_all("SELECT remailer.nick, subscription.ref, subscription.remailer_ref, subscription.notify_warning, subscription.notify_critical, subscription.notify_recovery FROM remailer JOIN subscription ON remailer.ref=subscription.remailer_ref WHERE subscription.account_ref=?", array($user_ref)); + foreach ($db_subs as $sub) { + if (isset ($user_subs[$sub['remailer_ref']])) { + $user_sub = $user_subs[$sub['remailer_ref']]; + $sub['notify_warning'] = $sub['notify_warning'] == 't' ? 1 : false; + $sub['notify_critical'] = $sub['notify_critical'] == 't' ? 1 : false; + $sub['notify_recovery'] = $sub['notify_recovery'] == 't' ? 1 : false; + if (($sub['notify_warning'] == $user_sub['notify_warning']) && + ($sub['notify_critical'] == $user_sub['notify_critical']) && + ($sub['notify_recovery'] == $user_sub['notify_recovery'])) { + $message .= 'Not changing subscription to remailer '.$sub['nick'].".
\n"; + } else { + $user = ($user_sub['notify_warning'] ? 'W' : '_') . + ($user_sub['notify_critical'] ? 'C' : '_') . + ($user_sub['notify_recovery'] ? 'R' : '_'); + $db = ($sub['notify_warning'] ? 'W' : '_') . + ($sub['notify_critical'] ? 'C' : '_') . + ($sub['notify_recovery'] ? 'R' : '_'); + $message .= 'Changing subscription to remailer '.$sub['nick']." from $db to $user: "; + $s = array(); + $s['notify_warning'] = $user_sub['notify_warning'] ? 'T' : 'F'; + $s['notify_critical'] = $user_sub['notify_critical'] ? 'T' : 'F'; + $s['notify_recovery'] = $user_sub['notify_recovery'] ? 'T' : 'F'; + $res = $namespace->database->update('subscription', $sub['ref'], $s); + $message .= ($res ? 'OK' : 'FAILED')."
\n"; + } + } else { + $message .= 'Deleting subscription to remailer '.$sub['nick'].': '; + $res = $namespace->database->delete_row('subscription', $sub['ref']); + $message .= ($res ? 'OK' : 'FAILED')."
\n"; + }; + unset($user_subs[$sub['remailer_ref']]); + } + foreach ($user_subs as $ref => $sub) { + $rem = $namespace->database->query_row("SELECT remailer.nick FROM remailer WHERE ref=?", array($ref)); + if ($rem) { + $s = array(); + $s['remailer_ref'] = $ref; + $s['account_ref'] = $user_ref; + $s['notify_warning'] = $sub['notify_warning'] ? 'T' : 'F'; + $s['notify_critical'] = $sub['notify_critical'] ? 'T' : 'F'; + $s['notify_recovery'] = $sub['notify_recovery'] ? 'T' : 'F'; + $message .= 'Adding subscription to remailer '.$rem['nick'].': '; + $res = $namespace->database->insert('subscription', $s); + $message .= ($res ? 'OK' : 'FAILED')."
\n"; + } else { + $message .= 'Remailer '.$rem."does not exist.
\n"; + } + } + $message .= 'done.
'; + } +} + +$data = array(); +$data['message'] = $message; +$data['user'] = $username; + +$template = new Template('remsaint-subscription.html', $namespace->config->template_path); +$template->parse($data); +print $template->output(); + +$namespace->stop(); + +# vim:set ts=4: +# vim:set shiftwidth=4: +?> diff --git a/web/remsaint.php b/web/remsaint.php new file mode 100644 index 0000000..91f3468 --- /dev/null +++ b/web/remsaint.php @@ -0,0 +1,76 @@ + + */ + +/** + * RemSaint + * + * @author Peter Palfrader/3node + * @version $Id$ + */ + +require_once("../include/Namespace.inc"); +require_once("../include/Tools.inc"); +require_once("../include/Template.inc"); + +$namespace = new Namespace( + array( have_database => 1, + have_session => 1, + have_user => 1 ) +) or + die("Nobody loves me. I don't even have space for a name."); + +$rules = Array(); +$rules['list']['manage'] = array(type => 'integer', optional => 1); +$rules['list']['sort'] = array(type => 'string', optional => 1); +$arguments = param_check($GLOBALS, $rules, array(params_required=>false)); + +$user = false; +$userref = false; +$manage = $arguments['manage'] ? 1 : 0; + +if (! $namespace->user->check_login()) + $manage = 0; +else { + $user = $namespace->session->data['user']['username']; + $userref = $namespace->session->data['user']['ref']; +} + +$orderby='nick'; +$sort='nick'; +if ($arguments['sort'] == 'type1') { + $orderby='-reliability_type1'; + $sort='reliability_type1'; +}; +if ($arguments['sort'] == 'type2') { + $orderby='-reliability_type2'; + $sort='reliability_type2'; +}; +if ($arguments['sort'] == 'status') { + $orderby='in_critical, in_warning'; + $sort = 'status'; +}; + + +$data = array(); +# YYYY-MM-DD HH24:MI TZ +if ($manage) + $data['remailers'] = $namespace->database->query_all("SELECT subscription.ref, remailer.ref, remailer.in_warning, remailer.in_critical, remailer.nick, remailer.reliability_type1, remailer.reliability_type2, to_char(remailer.last_update, 'YYYY-MM-DD') AS last_update, listed1, listed2, subscription.notify_warning, subscription.notify_critical, subscription.notify_recovery, true AS t, false AS f FROM remailer LEFT OUTER JOIN (SELECT * FROM subscription WHERE subscription.account_ref=?) as subscription ON remailer.ref=subscription.remailer_ref ORDER BY $orderby", array($userref)); +else + $data['remailers'] = $namespace->database->query_all("SELECT ref, in_warning, in_critical, nick, reliability_type1, reliability_type2, to_char(last_update, 'YYYY-MM-DD') AS last_update, listed1, listed2, true AS t, false AS f FROM remailer ORDER BY $orderby"); +$data['manage'] = $manage; +$data['sort'] = $sort; +$data['user'] = $user; +$data['this'] = $PHP_SELF; + +$template = new Template('remsaint-status.html', $namespace->config->template_path); +$template->parse($data); +print $template->output(); + +$namespace->stop(); + +# vim:set ts=4: +# vim:set shiftwidth=4: +?> diff --git a/web/resources.html b/web/resources.html new file mode 100644 index 0000000..62d31a4 --- /dev/null +++ b/web/resources.html @@ -0,0 +1,62 @@ + + + + Anonymous Remailers Meta Stats and other Information + + + + + + + + + + + +
www.noreply.org :: Resources
 
  + +

remailer-xxx Sites

+

+ The following sites query each remailer in regular intervalls and store the replies + to remailer-conf, remailer-key, remailer-stats and remailer-help. +

+

<conspiracy theory>Since all those services are run by the same entity anyway, it + makes no sense to simply fetch the -keys from all of them and be happy with it if they match. + </conspiracy theory> Get them yourself from each remailer! I mean it! + + +

Other Sites of Interest

+ + +

random links

+
    +
  • rrdtool - the tool used to make some of those nice graphs
  • +
  • ploticus - the tool used to make another part of the graphs
  • +
+ + +
 
web@palfrader.org - + Valid HTML 4.01!
+ + diff --git a/web/rot26/Makefile.am b/web/rot26/Makefile.am new file mode 100644 index 0000000..e1d4e43 --- /dev/null +++ b/web/rot26/Makefile.am @@ -0,0 +1,6 @@ +SUBDIRS = keys + +based_in = htdocs +include $(top_srcdir)/Makefile.common + +doc_DATA = index.html diff --git a/web/rot26/index.html b/web/rot26/index.html new file mode 100644 index 0000000..cceb6c1 --- /dev/null +++ b/web/rot26/index.html @@ -0,0 +1,65 @@ + + + + ROT26 Anonymous Remailer + + + + + + + + + + + +
www.noreply.org :: Rot26
 
  + +

ROT26 Anonymous Remailer

+

+ The rot26 remailer can be reached at rot26@mix.uucico.de. +

+ Its operator reads mail sent to remop@mix.uucico.de. +

+ To get the help file, remailer and admin keys, stats, or configuration send mail to + rot26@mix.uucico.de with a subject of + remailer-help, + remailer-key, + remailer-adminkey, + remailer-stats, or + remailer-conf. + +

History

+ + + + + +
 
web@palfrader.org - + Valid HTML 4.01!
+ + diff --git a/web/rot26/keys/292faf0ee7c93743c76df482c0fa550a b/web/rot26/keys/292faf0ee7c93743c76df482c0fa550a new file mode 100644 index 0000000..4adf332 --- /dev/null +++ b/web/rot26/keys/292faf0ee7c93743c76df482c0fa550a @@ -0,0 +1,15 @@ +rot26 rot26@mix.uucico.de 292faf0ee7c93743c76df482c0fa550a 2:3.0a2-cvs-200212181400 MC 2002-09-18 2003-05-16 + +-----Begin Mix Key----- +292faf0ee7c93743c76df482c0fa550a +258 +AATGjZaLgmatQSsqu8BlbtBH7gDsldoltiCkbDYR +Hde6AjB3QstuOLXmAgRaZSdHgeCCb2EZOAHwyoYL +62HZ/orQQVSOGGfObKy1JnfKNkeNpMDYTgGmsPUF +OfAwmV8I4zhutVGYEjGC4TcW+iPOrcl3DC2SwWQr +3Ol5chdkFRPWLQAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAQAB +-----End Mix Key----- diff --git a/web/rot26/keys/30b16a30c2b3af1ec5d5625fcb5059ef b/web/rot26/keys/30b16a30c2b3af1ec5d5625fcb5059ef new file mode 100644 index 0000000..71e92eb --- /dev/null +++ b/web/rot26/keys/30b16a30c2b3af1ec5d5625fcb5059ef @@ -0,0 +1,15 @@ +rot26 rot26@mix.uucico.de 30b16a30c2b3af1ec5d5625fcb5059ef 2.9beta23pp2 MC + +-----Begin Mix Key----- +30b16a30c2b3af1ec5d5625fcb5059ef +258 +AATh8/BnFVoHQDTYoEouVDI6YBz0hFsrgTsu3w4h +/0t0xeWjaCPhJr4H+BERqSKV/D4+neWdDH1p2xOI +GCjVHcl2SyviJ4o2bXtPaZhsHUDFHIFpjipnyNsg +FEXrkkG3hnu1zo7XK0B3pz+aDQLFkhNhD+kZ8aJG +1bjS02uMPkM5SQAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAQAB +-----End Mix Key----- diff --git a/web/rot26/keys/4B8AC6A8.asc b/web/rot26/keys/4B8AC6A8.asc new file mode 100644 index 0000000..f819867 --- /dev/null +++ b/web/rot26/keys/4B8AC6A8.asc @@ -0,0 +1,41 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.2.4 (GNU/Linux) + +mQGiBD1cbd8RBACLAG5nl/L+Tv6yhOKfDEqOlUXb/Jao5HSHJfm1zSBlO9SQ5aus ++ZU/Wnbo47GjRnMxWuk7UEcWAmTZMz2Hfu57Cngnq33PsXo53/w++P6js5XA/Gqk +5QH9ZkQf2QahHOQgUMIK6IYJ3DgkCmWGPb9RZ1TfHLZeNhl4Aab9ySXTuwCgvDgE +FtfL6v6Ph/touK8gArUeHlUD/2ElVT5hVONdaByJJ/8FoRDo1P5vQrY7S9WJ1v+n +x3KGD7Ndx50s7Dhf0yRooEptbc4vDvBScJaUUsxiSbcM823pWg5NfpHmwZIFO3YM +ptzHOmQIh7AlIxc3yufVitfSAAOEf7ZqByVSKdHySjygsXwTeRvwpFzyggV2pkLf +O8OeA/9eMjDFD3mWg9Yzgn8urp9E/1ldoF7azvn3jDTWQPzXDHtj3/ezjywyCHmx +RtAaFAp8PFPhy+nxh1uxMplzmhHN53d7m98VjKykjsRj7/GAWXsgSmaPvdRXjz+y +NK66NrbSSHId/xRK9C+pMKXODIBm6c6TJrhsEJMd1dohhYtov4iiBCARAgBiBQJA +lEw3Wx0BU3VwZXJzZWRlZCBieSBuZXcgYWRtaW4ga2V5IDY2REM5RUEyIChGQUJF +IDE3MjcgOEUwQyA0NTk4IDVDNkYgOTUxMyBGMUY4IDlBNTMgNjZEQyA5RUEyKS4A +CgkQwWgaQ0uKxqiP3gCgrd/UBxFTGojCW739ShasjX01SXgAnjQ8LNd9glCqblIa +2Pegxc4jDyp/tgAAADZST1QtMjYgUmVtYWlsZXIgT3BlcmF0b3IgKERTQSAyKSA8 +cmVtb3BAbWl4LnV1Y2ljby5kZT6IXwQTEQIAHwUCPVxt3wUJAsfqAAQLBwMCAxUC +AwMWAgECHgECF4AACgkQwWgaQ0uKxqgMfwCglq0HzF9kTAeIYTR2Uzcizzxr2HsA +oKKIK44N55A9KHVgFbkuwci9+dFpiEYEExECAAYFAj1ce2oACgkQ8Pk4lKkfsDYD +EwCdFEjOrvaLZN9fDW/Tn9ZG6s/qbWoAnAxh75Ajzs7cBeu+nbPc0+sscuaRiMIE +ERECAIIFAj7bYZ0FgwFI9kIxFIAAAAAACAAgQGNvbW1lbnRUaGlzIHNpZ25hdHVy +ZSBjZXJ0aWZpZXMgYSByb2xlLkMUgAAAAAAFADVAcm9sZU9wZXJhdG9yIG9mIHRo +ZSByb3QyNiA8cm90MjZAbWl4LnV1Y2ljby5kZT4gcmVtYWlsZXIuAAoJEJWaMx06 +6QoUnLYAnjtNyeGXXnQYIoEZACvvxuXtY1dsAKDHiV3/5P1WCJQ6iR0IK2B2I91J +gYhMBBIRAgAMBQI+YSKJBYMBwzVWAAoJEBRZh+voyzqxV3QAn1+UOje9nMtX8i88 +axlklrjdCUEqAKCtzGKaWt67nkwTz0u4HyNGI5V3PLkCDQQ9XG5vEAgAmHwKrRP0 +qKK6JTKLicJ8WTnndBjltTII9mgTGG6+zmmC7NZ2CyvYr2VM4R6ZAO7rnKiMXK6E +8lMN2c419s/Ds5xtw/eS9olfkU5UC8ZER/qLPigQTLwi9VXKkqfwNmU9ab7/uP+j +9VyIGb0cDS+I8H3kETXlJhSNfHCCcYhy1DuzySBkZV5FxN5jdUq/Nkbb9DCvqkhp +f4ZkqS8q6P6tlJpHWpOI9OM5+rKedu6+Wl9Knq6ft5tXJ8naALyuLg13vC8M8HkC +drtzx3Zqty0ajx32AwRUpLDwhQIiEk6qtJ+Oc/Vq6PBr2Ws6GQzoaxsNrMr4BwIM +tCyM7pyl2pCYqwADBQf9HyrNjh3ztN3krnDhQmdqSa2y+GWhd5jUUE+q0KjO6Qkr +5Ute8gQ6ZiCZcBP771FTjiOb7+cXSCJ0KZfc6wTIOIID+IVFeEejkgIn+KS7GR2O +nUtZWR6E1tqrmlyT/0pbyRUAC1/LbKqczmDxN8HfFEPtlzbfMpbn18KYra28NZh7 +KtlQhNe9g+ZlX4lqsYw1vCY3c3ZEY7xuVuEUQVtTPX26nl0/f4vcYos1UwG4EJFE +X2M8IHh+aG/xVnY/V7KnvMHIuiJiATWKBbLHnKzU5GS3tXxc1f9wWfqtXbsF3/9U +RIvyvT7LMFd8MSa0hX1MZHA8jOStIAQxTT9GWb7mCohMBBgRAgAMBQI9XG5vBQkC +x+oAAAoJEMFoGkNLisaoxjoAnjrqzoKH79qzdOivZllH6nDiQsPwAKCbkL9tBrl3 +kIN3gDccsOVE2TECJw== +=ReZn +-----END PGP PUBLIC KEY BLOCK----- diff --git a/web/rot26/keys/66DC9EA2.asc b/web/rot26/keys/66DC9EA2.asc new file mode 100644 index 0000000..e0aa9a1 --- /dev/null +++ b/web/rot26/keys/66DC9EA2.asc @@ -0,0 +1,32 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.2.2 (GNU/Linux) + +mQGiBEAK1vYRBACpWSyWD9Gx8I25In7Prs8RbLkK3r8fY9/hmCXk6qYYIp+8D1Gn +Qqp1gj4T9ZFgjqfHf7FhmvHLtdruCIj9vPLpTl1IiUOkbVYlYbbWxk96w5pJWriR +9qy5jTBAxQSHu59SKgK0CoEBJ3i0QHW+gs/tn4Kfnw298/3fF0cCmD+UYwCggOBA +evixIlc2nPA1PKJNommJAbkD/2oICHU451awotljwGfEtIFkp5xrKS7Q7VKpCeZw +kV1vvhdDAopVhmoFXqw1whqgbz0J6umOZw+9SQH8tALCwvPfIvhHFjrBdOSI8n1+ +rDRb4h5eYukHPCTIimSFmmycYKNi2xMnYcyBlZclYpMy5hYatr5ezNMMBMK1JDiv +PBU8A/4650cNJFva8zmSRV8aMPBjnqdDo8GtONzOVE6uHUE1/SlENbIgb+lFqrS1 +bXIHxmLdSOerr1W1IXsKUHhzRCRLLAJyJwpcJRj2LncVrEYZW+iod7m2oz3dAkRg +/4+D+DMdgVOdW/CjuwGGGU2Dw8NFNGkNB9908VkYXCgmHTDdjbQ2Uk9ULTI2IFJl +bWFpbGVyIE9wZXJhdG9yIChEU0EgMykgPHJlbW9wQG1peC51dWNpY28uZGU+iGQE +ExECACQFAkAK1vYCGwMFCQPCZwAGCwkIBwMCAxUCAwMWAgECHgECF4AACgkQ8fia +U2bcnqLdBgCfXCla0Op1o6O1WmeZHCE7ZiFpXtsAn2/H0OxDGqP2u8GTaH06vbTF +b4qPiEYEExECAAYFAkAK16AACgkQwWgaQ0uKxqhcxQCdHynVm7FdKqrr/EI/Tg/Z +g+TtZWcAn2i80CMKnjjxbwAYjPhuF1wDU13JuQINBEAK1yQQCAC2cZCd4rEl1Yrk +BRzQiDPN5Ns/Wz61YXswPjLLf8qiW7rZ2ng4oPaSYitbAZHbK5VH3eBgF1eY4RPL +UvenoJUM+vbEoEm3naMrmnKGU0Hs60K4O4aJdpAgWbdWCe3FQo0xCYxQx7xE2cu1 +Esxrs0luY7qFWarKzHnVNKxbo9FcWas9ZqavhvHafkGORw22xmA39vT9UfIdjjoN +abfPHvJgXp3Fcc25TisiJTTwcj1MRGcUFrmkFJTQVoI+LysPesGpYWJY4vd90xFG +JPUNQfGYfxuEfHMd0dl9qIAcMZsoTRT3n+X4YdrP8AnlSKzUmR7SryKw3K0GS/Nw +Ou8e1S4fAAQNCACCTusIjP4Agv/XQAHtEqJmyVp81c60IzjQqcK1MoFHNPETBDOU +iDXZsVj0dRHUltOu9b3VsD83Tu3Ea6yRRnY9iuCItJZVRD0ECuQjzDVr+3nRReTr +PB0jMlcb6WFUZHA7jUnk6YYx5Ix9O0RycCj+fNxb88exD9AtsHogO6ITvwxu109H +SlgLxuc1N6S9kCgXyyp8zAxAAbi6vEKBeZL3R5ZLH+YAlG+5X/SMFS3Be0igXHel +uWQh2E3vGbNlb1NEepNkwjmYHgP28HMDuuK3d1e7KYFZ9O7kM/hCMKpxMwCbfppQ +kZGvkNxvogiiJx++QIiu79fs2t6TlCw0+hBxiE8EGBECAA8FAkAK1yQCGwwFCQPC +ZwAACgkQ8fiaU2bcnqKD7wCfXfd4cnWUZAOBX6g/xaZUF71Ab74AnA+IMh+rhuXK +HPN47wxx3daTvdf/ +=oWAO +-----END PGP PUBLIC KEY BLOCK----- diff --git a/web/rot26/keys/7f6d997678b19ccac110f6e669143126 b/web/rot26/keys/7f6d997678b19ccac110f6e669143126 new file mode 100644 index 0000000..6e3163d --- /dev/null +++ b/web/rot26/keys/7f6d997678b19ccac110f6e669143126 @@ -0,0 +1,15 @@ +rot26 rot26@mix.uucico.de 7f6d997678b19ccac110f6e669143126 2.9b33 MC + +-----Begin Mix Key----- +7f6d997678b19ccac110f6e669143126 +258 +AASyedeKiP1/UKyfrBz2K6gIhv4jfXIaHo8dGmwD +KqkG3DwytgSySSY3wYm0foT7KvEnkG2aTi/uJva/ +gymE+tsuM8l8iY1FOiXwHWLDdyUBPbrLjRkgm7GD +Y7ogSjPhVLeMpzkSyO/ryeUfLZskBUBL0LxjLInB +YBR3o6p/RiT0EQAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAQAB +-----End Mix Key----- diff --git a/web/rot26/keys/A91FB036.asc b/web/rot26/keys/A91FB036.asc new file mode 100644 index 0000000..aaf5a4f --- /dev/null +++ b/web/rot26/keys/A91FB036.asc @@ -0,0 +1,37 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.2.1 (GNU/Linux) + +mQGiBDt9icURBADRl3Su/X/EneAQs22LHpQZRmjXkhAYApF7ZffeF04gKS0oZ+UT +j0gUdLia+vF8JDSq/HjIdKTeBy10Lbt95Da+jxMIgLjH/zSG5O/GJsxGz2KG2End +MI1FOGBh29GcWkBGoWMb2Ala+c16vJeluvg8ANhwsEj8FwkU8ka3GH89GwCgnsoS +R8+Xqo5rebmkJjLvNcPFHEMD/3WRZaDmgW3kT2LQqbNwtVUMNzkxwGMssHxgs3OD +lmxO4N/GH3gqpM2BclFwYi3Xe/bOgWrhD/Mn7CbuEYHiTsuotlycr0AXrjQ88msQ +012fSVZ00vrXAWJnsauJAz+D7ZtK28xO4afo6xz3Ka8V4LWqxn5/mpQB69AS/qg0 +NZFXBADPA4jgNO3sUNNuAuZSnuWnQG4XFF/+0+64kHgu/8t2nxbdaEbFU14bm866 +3oUAATzJXB+0k6M/ABbAqUWPU4OheQgOdJf/uJbe7lKrPlF/8vsfnufKA3yeNpZk +lAXmf16nRfzDBJFtM194QETgmCcXi2WMo1M2QUE4KhgOi28ZxokBAwQgEQIAwwUC +Pch007wdAUtleSBoYXMgYmVlbiBzdXBlcnNlZGVkIGJ5IDRCOEFDNkE4OgoxMDI0 +RC80QjhBQzZBOCAyMDAyLTA4LTE2IFJPVC0yNiBSZW1haWxlciBPcGVyYXRvciAo +RFNBIDIpIDxyZW1vcEBtaXgudXVjaWNvLmRlPgpLZXkgZmluZ2VycHJpbnQgPSA5 +MzNGIERDNjYgNkRDNSBEQzE0IDg4RjEgIDFEMkMgQzE2OCAxQTQzIDRCOEEgQzZB +OAAKCRDw+TiUqR+wNqdHAJ9OjfjjpjyEuXqmp7e2/oP2g33dHACfc0x2HkuBDbrU +vlc/vnfGBazi9QO0LlJPVC0yNiBSZW1haWxlciBPcGVyYXRvciA8cmVtb3BAbWl4 +LnV1Y2ljby5kZT6IRgQQEQIABgUCO32NFgAKCRAh1DwgbkQCYTrlAJ4lf3v0u3+O +YIx/xRVY6gXR/yWppwCeIEu83vGbkmX5xnTDEwFZKeRl2UuIXQQTEQIAHQUCO32J +xgUJAsfqAAULBwoDBAMVAwIDFgIBAheAAAoJEPD5OJSpH7A28YcAoIH9GpQXC2JB +PK38NvmouihEJ+NFAJ9EAPqui8wnjvgn4yJzXLQQsyoizLkCDQQ7fYoAEAgAnR0D +pXxmxDeU2h08XTSG8FxcYhvGg4Oqz8l2zO3PLbDzYCNV+WpiXPUDapQYBiwxAjrO +ixmt5kUM/FjGaFwW3NrrWG4+f8o6wkyMBowQ24ZkXOfkrNUS5MF+/735KHxAkCYt +Bx0Xfrs3lSy6t5/2F++CX6Z8i8RQ53yDAinACddVe8xm123ASAf1JfK5+tXhQMMa +o/HOwpOhbE9yhumQXZDqewJ97ndDHA74KfgAEDxg1G/djHzxstSibv5tQttSanOp +mHdmj4nzl/vfzKNq4xfOIb1tIBqyi5ivtRlJu+MEeHTIWTeo5AWL4AiJAXoYKyDr +4q36qxU/ElO2FYPplwADBwf/T9znpHVWXd09v7b4y84V0deO8i0Ls453Fgww0wJM +LnkQ9cCRHnoGpRgI44C0nfNk5IGnTHVpgoHwooRq3EbYsgof4uVNnZp6PaOcHVdM +r3rwroGpdgxeq+ZyXCSNNoZGt1hIqFtzeDRlrF5PqgEtva51WmlcWAR5w0A0bD8Z +GbcvIJVAbSi9CThmdkFYxGM7XWKBNIMy4Z4E556s6UgGVKzRgL8Uw45B0AKSbmVa +Q3LfUJvHKKDhTwDOIEU5S39JfTAJZjc0/gk5mJRDHx1K2EbHz7fssxfW4HloOf7m +AojOKxVV4wZU/WgdJibQL2+3y/Tw4tlFRK6ER8Rfxs3qrYhMBBgRAgAMBQI7fYoA +BQkCx+oAAAoJEPD5OJSpH7A25hwAn3JxeY+c4hYq+Ur7hMhTXPniZZetAKCOFyRR +xaTu7ODKLRw5XzzIRQfD9w== +=m1uN +-----END PGP PUBLIC KEY BLOCK----- diff --git a/web/rot26/keys/Makefile.am b/web/rot26/keys/Makefile.am new file mode 100644 index 0000000..7aae232 --- /dev/null +++ b/web/rot26/keys/Makefile.am @@ -0,0 +1,15 @@ +SUBDIRS = + +based_in = htdocs +include $(top_srcdir)/Makefile.common + +doc_DATA = \ + 4B8AC6A8.asc \ + 66DC9EA2.asc \ + A91FB036.asc \ + 292faf0ee7c93743c76df482c0fa550a \ + 30b16a30c2b3af1ec5d5625fcb5059ef \ + 7f6d997678b19ccac110f6e669143126 \ + c4818fe61b42c8d27e87a476fcd76b6f \ + d4285164186b2fdda3af791e1571e3cc + diff --git a/web/rot26/keys/c4818fe61b42c8d27e87a476fcd76b6f b/web/rot26/keys/c4818fe61b42c8d27e87a476fcd76b6f new file mode 100644 index 0000000..dbbedfc --- /dev/null +++ b/web/rot26/keys/c4818fe61b42c8d27e87a476fcd76b6f @@ -0,0 +1,15 @@ +rot26 rot26@mix.uucico.de c4818fe61b42c8d27e87a476fcd76b6f 2:3.0b1+ MC 2004-04-10 2005-05-05 + +-----Begin Mix Key----- +c4818fe61b42c8d27e87a476fcd76b6f +258 +AATPwlANI+BmtZRqBANCHU+KKkwQR5MQS8WGIudl +eo/1xKvHOgzkN/vuMuW6swO0syjtx7AThgTVhLe9 +ZPATBvpg1Wz9A6ERJJlQ67Q7NtFY8Slzhxo4eByG +8/p89BpAW3ETMQm/E3SQouQ1Rx2nghgwDURH0ak3 +8ppjHmvUYa3bpQAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAQAB +-----End Mix Key----- diff --git a/web/rot26/keys/d4285164186b2fdda3af791e1571e3cc b/web/rot26/keys/d4285164186b2fdda3af791e1571e3cc new file mode 100644 index 0000000..ae33e9b --- /dev/null +++ b/web/rot26/keys/d4285164186b2fdda3af791e1571e3cc @@ -0,0 +1,15 @@ +rot26 rot26@mix.uucico.de d4285164186b2fdda3af791e1571e3cc 2:3.0a2-cvs-200212181400 MC 2003-04-16 2004-05-10 + +-----Begin Mix Key----- +d4285164186b2fdda3af791e1571e3cc +258 +AATt3jrbs7pRR3ElOVb+DuTXacLM+2HMFsAPdzhT +ohevpWDV4VW4uDUl52J6Dyn9WW2AkjR0fVFlMoat +lIIsjZ9BCwERdzSe5wM+yHvO/RwGkufA+HpbG0AI +0C515VFR2dRcHwy9mNuE0dSbB0Bk+yPzoc9hGjcc +v/kfqFhJrFxihwAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAQAB +-----End Mix Key----- diff --git a/web/template/Makefile.am b/web/template/Makefile.am new file mode 100644 index 0000000..eafd19f --- /dev/null +++ b/web/template/Makefile.am @@ -0,0 +1,15 @@ +SUBDIRS = + +based_in = . +include $(top_srcdir)/Makefile.common + +doc_DATA = \ + account-create.html \ + account-edit.html \ + index.html \ + login.html \ + logout.html \ + meta-chain.html \ + metastats.html \ + remsaint-status.html \ + remsaint-subscription.html diff --git a/web/template/account-create.html b/web/template/account-create.html new file mode 100644 index 0000000..2a01a18 --- /dev/null +++ b/web/template/account-create.html @@ -0,0 +1,100 @@ + + + + Create Account + + + + + + + + + + + + + + + + + + + + + + +
+ + www.noreply.org :: + Create Account +
+ + + Logged in as + - + Logout + + + Not logged in. + +
+  
+   +

+ Creating a new user: +

+ +

+ + + + + + +

+ "> + + + + + + + + + + + + + + + + + + +
+ Username: + "> +
+ Your Name: + "> (optional) +
+ Email Address: + "> +
+   + + +
+
+
+  
+ + web@palfrader.org - + Valid HTML 4.01! + +
+ + + + diff --git a/web/template/account-edit.html b/web/template/account-edit.html new file mode 100644 index 0000000..3e629c0 --- /dev/null +++ b/web/template/account-edit.html @@ -0,0 +1,145 @@ + + + + Update Account + + + + + + + + + + + + + + + + + + + + + + +
+ + www.noreply.org :: + Update Account +
+ + + Logged in as + - + Logout + + + Not logged in. + +
+  
+   +

+ Update account: +

+ +

+ + + + + + +

"> + + + + + + + + + + + + + + + + + + + + + + +
+ Username: + +
+ Your Name: + "> (optional) +
+ Password: + +
+ again: + +
+   + + +
+
+ +

+ Email Addresses + + + + + + + + + + + + + + + + + + + + + + + + + + + + " method="post"> + + + + + + + +
AddressStatusAction 
active, mail will be sent
" method="post">">
disabled, mail will not be sent
" method="post">">
not yet verified
" method="post">">
" method="post">">
new
+

+  
+ + web@palfrader.org - + Valid HTML 4.01! + +
+ + + + diff --git a/web/template/index.html b/web/template/index.html new file mode 100644 index 0000000..33d7d6e --- /dev/null +++ b/web/template/index.html @@ -0,0 +1,130 @@ + + + + Anonymous Remailer Stats, Meta-Stats and other Information + + + + + + + + + + + + + +
www.noreply.org
+ + + Logged in as + - + Logout + + + Not logged in: Login + + +
 
+ + +
+    <<< EHLO 
+    >>> 250-www.noreply.org Hello  [], pleased to meet you.
+    >>> 250-ALLPINGERS
+    >>> 250-PINGER
+    >>> 250-THESAURUS
+    >>> 250-LATENCY
+    >>> 250-LOAD
+    >>> 250-REMSAINT
+    >>> 250-METASTATS
+    >>> 250-TLS-INFO
+    >>> 250-ROT26
+    >>> 250-MIXMINION-NODES
+    >>> 250-TOR-ROUTERS
+    >>> 250-RESOURCES
+    >>> 250 HELP
+
+    <<< HELP ALLPINGERS
+    >>> 214-ALLPINGERS
+    >>> 214-   The canonical list of all pingers. In both a nice HTML
+    >>> 214    table and a machine readable format.
+
+    <<< HELP PINGER
+    >>> 214-PINGER
+    >>> 214-   Mixmaster and Cypherpunk reliability stats and
+    >>> 214    keyrings produced by Echolot.
+
+    <<< HELP THESAURUS
+    >>> 214-THESAURUS
+    >>> 214    remailer-xxx of all remailers by Echolot.
+
+    <<< HELP LATENCY
+    >>> 214-LATENCY
+    >>> 214    graphing of remailer latency stats.
+
+    <<< HELP LOAD
+    >>> 214-LOAD
+    >>> 214-   graphing of remailer load (i.e. messages processed) and
+    >>> 214    their pool sizes if available.
+
+    <<< HELP ROT26
+    >>> 214-ROT26
+    >>> 214    info on the rot26 remailer
+
+    <<< HELP REMSAINT
+    >>> 214-REMSAINT
+    >>> 214-   An overview of all remailers' reliability averaged over
+    >>> 214-   all stats sources. Allows you to subscribe to remailers
+    >>> 214-   so you get warning emails should they fall below a
+    >>> 214-   certain reliability. I recommend operators subscribe
+    >>> 214    to their remailer.
+
+    <<< HELP METASTATS
+    >>> 214-METASTATS
+    >>> 214-   Show stats for all remailers from all pingers in a
+    >>> 214    single table.
+
+    <<< HELP TLS-INFO
+    >>> 214-TLS-INFO
+    >>> 214-   List mail exchanges for each remailer and whether or not
+    >>> 214-   it supports TLS (SSL).  For TLS capable hosts the certificate
+    >>> 214    as gathered by OpenSSL is given too.
+
+    <<< HELP MIXMINION-NODES
+    >>> 214-MIXMINION-NODES
+    >>> 214    Number of recommended mixminion nodes over time.
+
+    <<< HELP TOR-ROUTERS
+    >>> 214-TOR-ROUTERS
+    >>> 214    Number of tor routers running over time.
+
+    <<< HELP RESOURCES
+    >>> 214-RESOURCES
+    >>> 214    links and pointers
+
+    
+  
+ +
 
web@palfrader.org - + Valid HTML 4.01!
+ + diff --git a/web/template/login.html b/web/template/login.html new file mode 100644 index 0000000..867fe9d --- /dev/null +++ b/web/template/login.html @@ -0,0 +1,95 @@ + + + + Login + + + + + + + + + + + + + + + + + + + + + + +
+ + www.noreply.org :: + Login +
+ + + Logged in as + - + Logout + + + Not logged in. + +
+  
+   +

+ Log on as user to noreply. If you do not have an account yet, ">create one. +

+ + Cookies must be enabled beyond this point. + +

+ + + + + + +

+ "> + + + + + + + + + + + + + + +
+ Username: + "> +
+ Password: + +
+   + + +
+
+
+  
+ + web@palfrader.org - + Valid HTML 4.01! + +
+ + + + diff --git a/web/template/logout.html b/web/template/logout.html new file mode 100644 index 0000000..7544e86 --- /dev/null +++ b/web/template/logout.html @@ -0,0 +1,56 @@ + + + + Logout + + + + + + + + + + + + + + + + + + + + + + +
+ + www.noreply.org :: + Logout +
+ + + Logged in as + - + Logout + + + Not logged in - Login. + +
+  
+   +

+ Successfully logged out. +

+  
+ + web@palfrader.org - + Valid HTML 4.01! + +
+ + + + diff --git a/web/template/meta-chain.html b/web/template/meta-chain.html new file mode 100644 index 0000000..816f65d --- /dev/null +++ b/web/template/meta-chain.html @@ -0,0 +1,54 @@ + + +Bad Type-<TMPL_VAR NAME="type"> Chains + + + + + + + + +
www.noreply.org :: metastats :: Chain
 
  + +

Bad Type- Chains

+ (Type I + (unfiltered), + Type II + (unfiltered)) + + +

+Remailers that have less than % reliability in remsaint have been ignored. (">unfiltered). + +

+ + + + + + + + + + + + + + + + + + + +
">fromfrom">toto">pinger
"> 
bad  N/A
+ +

+N/A means that a pinger doesn't list a remailer and therefore probably isn't aware of any broken chains regarding the remailer. +

+Built at . + +

 
web@palfrader.org - + Valid HTML 4.01!
+ + diff --git a/web/template/metastats.html b/web/template/metastats.html new file mode 100644 index 0000000..ea6197f --- /dev/null +++ b/web/template/metastats.html @@ -0,0 +1,67 @@ + + +Metastats @ noreply + + + + + + + + +
www.noreply.org :: metastats :: Type
 
  + + +

Type Metastats

+ (Type 1, + Type 2) + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Remailer\Pinger">
">(cached)
AverageDeviation
Remailers > 97%  
#55FF55#AAFFAA">">#BBBBBB#FFFFFF#66EEEE#BBFFFF#666666">#7777FF#AAAAFF">#7777FF#AAAAFF">
+ +

+Data samples in cyan are ignored because they are too far away from the average or the pinger is too far away from the average too often. + + +

+The following pingers have been ignored: +

    + +
  • :
  • +
    +
+ + +

+Built at . + +

 
web@palfrader.org - + Valid HTML 4.01!
+ + diff --git a/web/template/remsaint-status.html b/web/template/remsaint-status.html new file mode 100644 index 0000000..4652dc9 --- /dev/null +++ b/web/template/remsaint-status.html @@ -0,0 +1,262 @@ + + + + RemSaint - Status + + + + + + + + + + + + + + + + + + + + + + +
+ www.noreply.org :: + RemSaint +
+ + + Logged in as + - + Logout + + + Not logged in: Login + + +
+  
+   + +
+ + +

+ Remsaint is an overview of all remailers' reliability averaged over + all stats sources. Users and operators + can subscribe to remailers to get notified should a remailer + become unreliable. +

+ It can be used by the operator of a remailer so she + gets some hint as soon as problems arise. Often remailers have + dropped out of stats without their operators even noticing it - with a + remsaint subscription this should not happen. +

+ This also allows nym users to change their reply-blocks and so prevents + mail loss (Note that you need to subscribe to all nodes or the + list to not leak any information about your reply block). + +

+ Summary for the last few weeks and the last 12 months:
+ [Number of Remailers in Ok, Warning, and Critical over the last few weeks.] + [Number of Remailers in Ok, Warning, and Critical over the last 12 months.] +
Even more history: Number of Remailers in Ok, Warning, and Critical over the last 24 months. +

+


+ +

+ ?form_id=list&manage=1&sort=">Manage subscriptions + + ?manage=0&sort=">Back to simple overview + + + +

+ If you were logged in you could + subscribe to status changes of those remailers. If you + do not have an account yet, create one. + +


+

+ If you want to get all notifications you can subscribe to the + remsaint-report + mailinglist which gets a copy of each notification as well as + information about added and removed remailers. + Past notifications can be found in the + notification archive. +


+

+ Details: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + "> + + + + + + +
?form_id=list&sort=nick&manage=">Remailer?form_id=list&sort=status&manage=">Status?form_id=list&sort=type1&manage=">Type I?form_id=list&sort=type2&manage=">Type IILast UpdateListed inNotify on
WarningCriticalRecovery
?form_id=list&sort=nick&manage=">Remailer?form_id=list&sort=status&manage=">Status?form_id=list&sort=type1&manage=">Type I?form_id=list&sort=type2&manage=">Type IILast UpdateListed in
.txt">CRITICALWARNINGOK + + + % + + +   + + + + + + % + + +   + + + + + + + + + + + + +   + + + + + + + + +   + + + + " checked> + + "checked> + + " checked> +
+

+ + + + + +

+


+ +

+ ?form_id=list&manage=1&sort=">Manage subscriptions + + ?manage=0&sort=">Back to simple overview + + + +

+ If you were logged in you could + subscribe to status changes of those remailers. If you + do not have an account yet, create one. + +


+

+ States +

    +
  • Critical: Averaged reliability for Type 1 or Type 2 is below 92%.
  • +
  • Warning: Averaged reliability for Type 1 or Type 2 is below 97%.
  • +
  • OK: Averaged reliability for both Type 1 and Type 2 is greater or equal to 97%.
  • +
+ +

+ Notifications +

    +
  • On Warning: You will get an email if the remailer goes from OK to Warning state.
  • +
  • On Critical: You will get an email if the remailer goes from OK or Warning to Critical state.
  • +
  • On Recovery: You will get an email if the remailer goes from Warning or Critical to OK state.
  • +
+ You will also be notified if a remailer you are subscribed to + gets removed from remsaint. This happens if no pinger lists it + anymore. +
+

+ Feedback appreciated. + +


+

+ Links +

+
+

+ Images created using Tobi Oetiker's + rrdtool. +

 
+ + web@palfrader.org + - + Valid HTML 4.01! + +
+ + + + diff --git a/web/template/remsaint-subscription.html b/web/template/remsaint-subscription.html new file mode 100644 index 0000000..08db57b --- /dev/null +++ b/web/template/remsaint-subscription.html @@ -0,0 +1,27 @@ + + +RemSaint - Status + + + + + + + + + +
www.noreply.org :: RemSaint :: Subscriptions
Logged in as - LogoutNot logged in: login
 
  + +

Subscription update:

+ + + +

+Manage subscriptions
+Back to simple overview
+Back to root
+ +

 
web@palfrader.org - + Valid HTML 4.01!
+ + diff --git a/web/tls/Makefile.am b/web/tls/Makefile.am new file mode 100644 index 0000000..72b21e1 --- /dev/null +++ b/web/tls/Makefile.am @@ -0,0 +1,35 @@ +SUBDIRS = + +based_in = htdocs +include $(top_srcdir)/Makefile.common + +doc_DATA = index.html + + +addresses: $(ECHOLOT_BASE)/results/mlist2.txt $(ECHOLOT_BASE)/results/rlist2.txt + cat $(ECHOLOT_BASE)/results/mlist2.txt $(ECHOLOT_BASE)/results/rlist2.txt > addresses + +tls-result: addresses + if [ -e $@ ] ; then \ + mod=`stat -c '%Y' $@`; \ + else \ + mod=0; \ + fi; \ + now=`date +'%s'`; \ + if [ $$(( $$now - $$mod )) -gt $(TLS_AGE) ]; then \ + $(top_srcdir)/bin/tls-check < $< > $@; \ + fi + +index.html: tls-result + rm -f cert-*.txt; + $(top_srcdir)/bin/tls2html < $< > $@; + +clean: + rm -f tls-result index.html addresses cert-*.txt addresses + +install-data-local: index.html + [ -d $(docdir) ] || mkdir $(docdir) + cp cert-*.txt $(docdir) + +uninstall-local: index.html + rm -f $(docdir)/cert-*.txt diff --git a/web/tls/template.tmpl b/web/tls/template.tmpl new file mode 100644 index 0000000..99d8cfa --- /dev/null +++ b/web/tls/template.tmpl @@ -0,0 +1,118 @@ + + +TLS @ noreply + + + + + + + + +
www.noreply.org :: TLS
 
  + +

SMTP - TLS

+ +Transport +Layer +Security (similar to SSL) +brings forward secrecy to Internet Email by encrypting SMTP traffic. +

+Even though usual remailer mail is already encrypted, TLS adds security +because the key used in TLS sessions usually is ephemeral - i.e. it only +exists for seconds and is destroyed immediatly after use. Whether or +not short-lived keys are used depends on the cipher suite chosen. +(The EDH (Ephemeral Diffie-Hellman) ciphers use ephemeral keys.) +

+Ephemeral keys make it impossible to decrypt data which was eavesdropped at one +time by compromising a remailer's key later. +

+Since remailer keys are valid for weeks, sometimes years, this makes +remailing more secure. + +

+The submission column indicates that a mailserver acceps mails on port 587 +(submission). The smtps column that it accepts SSL connections on port 465 +(smtps) for use with stunnel and similar. Some hosts also accept normal +connections on port 2525 - this is indicated in the column 2525. +Please note that some hosts may enforce the use of TLS on the submission port. + +

+ +Stunnel can do STARTTLS using -n smtp or with protocol = smtp in your config file, depending on your version. + +

+See the Encrypted Email +- TLS/SSL on banasplit for a + howto on using stunnel on Windows with Quicksilver and JBN2. + +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
remailermail exchangerpriorityTLSsubmissionsmtps2525error/warning
<>
 ">YES
announced - + does not worknoN/Ayesno">yes
noyesno
 
+ +

+Built at . + +

 
web@palfrader.org - + Valid HTML 4.01!
+ + -- cgit v1.2.3