diff options
author | Peter Palfrader <peter@palfrader.org> | 2004-11-15 09:20:11 +0000 |
---|---|---|
committer | Peter Palfrader <peter@palfrader.org> | 2004-11-15 09:20:11 +0000 |
commit | 5e95090defff64bc8cd7a318a73aa930948fb66d (patch) | |
tree | d977ded4207e51914d539b0ecd20b8583d37c8ea /web | |
parent | 6c3e0ba0a82307abf825bf1cde85638464ab1713 (diff) |
Initial import
Diffstat (limited to 'web')
73 files changed, 3771 insertions, 0 deletions
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 @@ +<? +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['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 @@ +<? +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."); + +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 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<HTML> + <HEAD> + <TITLE>Canonical List of All Pingers</TITLE> + <META name="Description" content="Canonical List of All Pingers"> + <META name="Keywords" content="pinger, stats, statistics, remailer, reliability, anonymous, nym, mixmaster"> + </HEAD> + <BODY bgcolor="#aaaaaa" text="#000000" LINK="#0000ff" ALINK="#ff0000" VLINK="#ff0000"> + <TABLE cellpadding=0 cellspacing=0 width="100%"> + <TR><TD colspan=2 bgcolor="#444444"><FONT color="#ffffff"><A href="/"><FONT color="#bbbbff">www.noreply.org</FONT></A> :: All Pingers</FONT></TD></TR> + <TR><TD colspan=2 bgcolor="#ffffff"> </TD></TR> + <TR><TD bgcolor="#ffffff"> </TD> + <TD bgcolor="#ffffff"> + + <h1>Canonical List of All Pingers</h1> + <p> + <table border=1> + <tr> + <th>Pinger</th> + <th>CPunk V1</th> + <th>CPunk V2</th> + <th>Mix V1</th> + <th>Mix V2</th> + <th>rchain</th> + <th>PGP Keyring</th> + <th>Mix Keyring</th> + <th>Comment</th> + </tr> + <: + 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(<F>) { + 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("<TR>\n"); + printf('<td><a href="%s">%s</a></td>', $pinger{$source}->{base}, $source); + my $r1_t = sprintf('<a href="%s">T</a>', $pinger{$source}->{rlist} ) if defined $pinger{$source}->{rlist}; + my $r1_h = sprintf('<a href="%s">H</a>', $pinger{$source}->{rlist_html} ) if defined $pinger{$source}->{rlist_html}; + my $r2_t = sprintf('<a href="%s">T</a>', $pinger{$source}->{rlist2} ) if defined $pinger{$source}->{rlist2}; + my $r2_h = sprintf('<a href="%s">H</a>', $pinger{$source}->{rlist2_html}) if defined $pinger{$source}->{rlist2_html}; + my $m1_t = sprintf('<a href="%s">T</a>', $pinger{$source}->{mlist} ) if defined $pinger{$source}->{mlist}; + my $m1_h = sprintf('<a href="%s">H</a>', $pinger{$source}->{mlist_html} ) if defined $pinger{$source}->{mlist_html}; + my $m2_t = sprintf('<a href="%s">T</a>', $pinger{$source}->{mlist2} ) if defined $pinger{$source}->{mlist2}; + my $m2_h = sprintf('<a href="%s">H</a>', $pinger{$source}->{mlist2_html}) if defined $pinger{$source}->{mlist2_html}; + my $rchain_t = sprintf('<a href="%s">T</a>', $pinger{$source}->{rchain} ) if defined $pinger{$source}->{rchain}; + my $rchain_h = sprintf('<a href="%s">H</a>', $pinger{$source}->{rchain_html}) if defined $pinger{$source}->{rchain_html}; + my $pgp = sprintf('<a href="%s">ALL</a>', $pinger{$source}->{pgpring} ) if defined $pinger{$source}->{pgpring}; + my $pgp_rsa = sprintf('<a href="%s">RSA</a>', $pinger{$source}->{pgpring_rsa}) if defined $pinger{$source}->{pgpring_rsa}; + my $mixring = sprintf('<a href="%s"><code>pubring.mix</code></a>', $pinger{$source}->{mixring} ) if defined $pinger{$source}->{mixring}; + my $typelist = sprintf('<a href="%s"><code>type2.list</code></a>', $pinger{$source}->{type2list} ) if defined $pinger{$source}->{type2list}; + my $comment = $pinger{$source}->{comment}; + + printf('<td align="center">%s</td>', join_links($r1_t, $r1_h)); + printf('<td align="center">%s</td>', join_links($r2_t, $r2_h)); + printf('<td align="center">%s</td>', join_links($m1_t, $m1_h)); + printf('<td align="center">%s</td>', join_links($m2_t, $m2_h)); + printf('<td align="center">%s</td>', join_links($rchain_t, $rchain_h)); + printf('<td align="center">%s</td>', join_links($pgp, $pgp_rsa)); + printf('<td align="center">%s</td>', join_links($mixring, $typelist)); + printf('<td align="left">%s</td>', (defined $comment && $comment ne '') ? $comment : ' '); + + print("</TR>\n"); + } + :> + </table> + + <p> + If anything is wrong/broken/needs to be added/removed please mail the maintainer at <a href="mailto:web@palfrader.org">web@palfrader.org</a>. + <p> + The canonical list of all pingers in a machine readable format can be + found here: <a href="allpingers.txt"><code>allpingers.txt</code></a>. + It was last updated <: print scalar gmtime() :>. + <p> + For testing purposes I've also generated an <a href="allpingers.xml">XML + document</a> with all pingers. Feedback especially on the DTD is very + much apprechiated. + + #<hr> + #<p> + #A similar list can be found at Frog's: <a href="http://www.privacyresources.org/frogadmin/Pingers.html">http://www.privacyresources.org/frogadmin/Pingers.html</a>. + + </TD></TR> + <TR><TD colspan=2 bgcolor="#ffffff"> </TD></TR> + <TR><TD colspan=2 bgcolor="#444444"><FONT color="#ffffff"><EM><a href="mailto:web@palfrader.org"><font color="#bbbbff">web@palfrader.org</font></a></EM> - + <a href="http://validator.w3.org/check/referer"><font color="#bbbbff">Valid HTML 4.01!</font></a></FONT></TD></TR> + </TABLE> + </BODY> +</HTML> 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 @@ +<? +/* + * RemSaint + * (c) 2002 + * Peter Palfrader + * + * $Id:$ + */ + +class Config { + # where are the templates + var $template_path='../template'; + + # Database + var $db_type='postgres'; + var $db_host='localhost'; + var $db_name='weasel'; + var $db_user='weasel_remsaint'; + var $db_password='Rgr3wB7kwqo'; + + var $session_cookie_name='NOREPLY_SESSION_ID'; + + var $auth_timeout = 3600; + + # misc + var $baseurl='http://www.noreply.org'; + + var $mail_from='Noreply Account System <noreply-accounts@palfrader.org>'; + var $mail_sender='Peter Palfrader <peter@palfrader.org>'; + var $mail_replyto='Peter Palfrader <peter@palfrader.org>'; + var $mail_operator='Peter Palfrader <peter@palfrader.org>'; + + 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 @@ +<? +/* Database Abstraction Class + * + * (c) 2002 Peter Palfrader <pp@3node.com> + * Florian Reitmeir <fr@3node.com> + */ + +/** + * 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 <code>host</code>, <code>user</code>, + * <code>password</code>, and <code>name</code>. + * + * <code>type</code> 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 <code>query</code>. + * The query is first prepared and then executed with the values + * passed in <code>params</code>. + * + * The ADODB backend emulates binding of parameters if the database + * does not support it natively. Only <code>params</code>' values + * are passed to the binding, not its keys. + * + * You probably do not want to call this function from your code. + * Use the <code>query_row</code>, <code>query_all</code>, + * <code>insert</code>, or <code>update</code> 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 <code>errorMsg</code> and <code>errorNo</code> + * 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 <code>query</code>. + * It takes an optional array of parameters and returns the fields of + * the first result row as an assoziative array. + * + * <code>execute_query</code> 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 <code>query</code>. + * It takes an optional array of parameters and returns an array of + * assoziative arrays (one per result row). + * + * <code>execute_query</code> 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 + * + * <code>insert</code> inserts a new row into the table <code>table</code>. + * The values to insert are taken from the assoziative array + * <code>params</code>. + * + * This function handles selection of the primary key automatically if + * no <code>ref</code> value is set in the <code>params</code>. + * + * The SQL query is built using tablename and the params passed as + * arguments. <code>execute_query</code> 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 <code>ref</code>) + * @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 + * <code>ref</code>. The new values are to be passed via the assoziative + * array <code>params</code>. 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. <code>execute_query</code> 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 <code>ref</code>) + * @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 + * <code>ref</code>. + * + * @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 <code>ref</code>) + * @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 + * + * (c) 2002 Peter Palfrader <pp@3node.com> + */ + +/** + * 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 @@ +<? +/* Global Variables and Stuff for remsaint + * + * (c) 2002 Peter Palfrader <pp@3node.com> + */ + +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 @@ +<? +# +# vim:set ts=4: +# vim:set shiftwidth=4; +# + +require_once "../include/Tools.inc"; + + +class Session +{ + var $id = false; + var $ref = false; + var $db = false; + var $messages = false; + var $cookie_name = false; + + /** + * create a new Session + * + * creates a new session by calling <code>get_id()</code> 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 <code>store_data</code> and sets <code>id</code> and + * <code>ref</code> 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 <code>session_data_ref</code>. + * + * @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 <code>get_data()</code>. + * + * @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 @@ +<? + # vim:set ts=4: + # vim:set shiftwidth=4: + + /* + * Beat - 3node BTS + * (c) 2002 + * Guenther Harrasser/3node + * Peter Palfrader/3node + * Florian Reitmeir/3node + * Bernhard Weitzhofer/3node + * + * $Id:$ + */ + +# +# Todo: +# * cachen von Positionen +# * Dokumentation +# * Aufräumen +# * bei IF / UNLESS mit mehreren Values AND/OR auswahl ermöglichen +# +class Template +{ + var $raw_content; + var $parsed_content; + var $path; + + var $begin_parse_time; + var $end_parse_time; + + + # + # new Class, read file.. + function Template($filename,$path='.') + { + $this->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, '<TMPL', $position) ) !== false ) + { + # get text before command + $out.=substr($raw, $position, $command_position-$position); + + # get command + preg_match("/_(.+?)\s+NAME=\"(.+?)\"(?:\s+VALUE=\"(.+?)\")?.*?>/", 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, '</TMPL_UNLESS NAME="'.$command['name'].'">', $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, '</TMPL_IF NAME="'.$command['name'].'">', $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, '</TMPL_CMP NAME="'.$command['name'].'">', $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, '</TMPL_LOOP NAME="'.$command['name'].'">', $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, '</TMPL_ACCESS NAME="'.$command['name'].'">', $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, '</TMPL_NAMESPACE NAME="'.$command['name'].'">', $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, '</TMPL_RANDOM NAME="'.$command['name'].'">', $next_pos); + $loop_text=substr($raw, $position,$endloop_command_position-$position); + + $hits = split( '<TMPL_RANDOM NAME="'.$command['name'].'">', $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<!-- time: ".$time." secs -->\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 @@ +<? + # vim:set ts=4: + # vim:set shiftwidth=4: + + /* + * Backslide - 3node BTS + * (c) 2002 Florian Reitmeir/3node + * Peter Palfrader/3node + * + * $Id: Tools.inc,v 1.2 2002/05/28 14:31:24 weasel Exp $ + */ +# +# Todo: +# * Dokumemtation +# +function error($msg) +{ + + print "Error: $msg\n"; + exit; +} + +function redirect($ns, $name='', $vars = array()) +{ + if (sizeof($vars)>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 "<pre>"; + print_r($fields); + echo "XXXXXXXXXXXX</pre>"; + + 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 @@ +<? +# +# vim:set ts=4: +# vim:set shiftwidth=4; +# + +class User +{ + var $ref; + var $session = false; + var $auth_timeout = false; + + var $db; + + /** + * create a new User object + * + * creates a new user by looking into the <code>session</code> + * + * @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 @@ +<? + +require_once( "../include/Namespace.inc" ); +require_once( "../include/Template.inc" ); +require_once("../include/Tools.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."); + +$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 @@ +<? +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['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 @@ +<? +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."); + +$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 + * + * (c) 2002 Peter Palfrader <pp@3node.com> + */ + +/** + * 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'].".<BR>\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')."<BR>\n"; + } + } else { + $message .= 'Deleting subscription to remailer '.$sub['nick'].': '; + $res = $namespace->database->delete_row('subscription', $sub['ref']); + $message .= ($res ? 'OK' : 'FAILED')."<BR>\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')."<BR>\n"; + } else { + $message .= 'Remailer '.$rem."does not exist.<BR>\n"; + } + } + $message .= 'done.<BR>'; + } +} + +$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 + * + * (c) 2002 Peter Palfrader <pp@3node.com> + */ + +/** + * 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 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<HTML> + <HEAD> + <TITLE>Anonymous Remailers Meta Stats and other Information</TITLE> + <META name="Description" content="Anonymous Remailers Meta Stats and other Information"> + <META name="Keywords" content="stats, statistics, remailer, reliability, anonymous, nym, mixmaster"> + </HEAD> + <BODY bgcolor="#aaaaaa" text="#000000" LINK="#0000ff" ALINK="#ff0000" VLINK="#ff0000"> + <TABLE cellpadding=0 cellspacing=0 width="100%"> + <TR><TD colspan=2 bgcolor="#444444"><FONT color="#ffffff"><A href="/"><FONT color="#bbbbff">www.noreply.org</FONT></A> :: Resources</FONT></TD></TR> + <TR><TD colspan=2 bgcolor="#ffffff"> </TD></TR> + <TR><TD bgcolor="#ffffff"> </TD> + <TD bgcolor="#ffffff"> + + <H1>remailer-xxx Sites</H1> + <P> + The following sites query each remailer in regular intervalls and store the replies + to remailer-conf, remailer-key, remailer-stats and remailer-help. + <UL> + <li><a href="http://www.aarg.net/remailer/thesaurus/">AARG! Pinger</a></li> + <li><a href="http://www.tahina.priv.at/~cm/stats/thesaurus/">austria</a></li> + <li><a href="http://www.bananasplit.info/echolot/thesaurus/">banana</a></li> + <li><a href="http://remailer.cryptofortress.com/thesaurus/">cf</a></li> + <li><a href="http://xenophon.homeip.net/echolot/thesaurus/">chicago remailer</a></li> + <li><a href="http://privacy.outel.org/thesaurus/">citrus</a></li> + <li><a href="http://www.cside.dyndns.org/stats/thesaurus/">cside</a></li> + <li><a href="http://remailer.hyperreal.info/thesaurus/">dot (hyperreal.info)</a></li> + <li><a href="http://frell.ambush.de/remailer/echolot/thesaurus/">frell.eu.org</a></li> + <li><a href="http://stats.mixmaster.it/thesaurus/">george</a></li> + <li><a href="http://www.gurski.org/remstats/thesaurus/">gurski.org</a></li> + <li><a href="http://hermes.eocto.net/~pinger/thesaurus/">hermes</a></li> + <li><a href="http://remailer.metacolo.com/stats/thesaurus/">metacolo</a></li> + <li><a href="http://www.noreply.org/echolot/thesaurus/">Noreply</a></li> + <li><a href="http://remailer.autistici.org/stats/thesaurus/">paranoia</a></li> + <li><a href="http://stats.melontraffickers.com/thesaurus/">Randseed Pinger</a></li> + </UL> + <P> <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> <EM>Get them yourself from each remailer!</EM> I mean it! + + + <H1>Other Sites of Interest</H1> + <UL> + <LI><A href="http://riot.eu.org/anon/remap.html">The Remailer Geographical Mapping Project</A> (@ RIOT)</LI> + <!--<LI><A href="http://www.arancio.net/">Orange Project</A></LI>--> + <!--<LI><A href="http://www.nuther-planet.net/farout/misc/default.htm">Farout</A></LI>--> + </UL> + + <H1>random links</H1> + <UL> + <LI><a href="http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/">rrdtool</a> - the tool used to make some of those nice graphs</LI> + <LI><a href="http://ploticus.sourceforge.net/">ploticus</a> - the tool used to make another part of the graphs</LI> + </UL> + + + </TD></TR> + <TR><TD colspan=2 bgcolor="#ffffff"> </TD></TR> + <TR><TD colspan=2 bgcolor="#444444"><FONT color="#ffffff"><EM><a href="mailto:web@palfrader.org"><font color="#bbbbff">web@palfrader.org</font></a></EM> - + <a href="http://validator.w3.org/check/referer"><font color="#bbbbff">Valid HTML 4.01!</font></a></FONT></TD></TR> + </TABLE> + </BODY> +</HTML> 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 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<HTML> + <HEAD> + <TITLE>ROT26 Anonymous Remailer</TITLE> + <META name="Description" content="ROT26 Anonymous Remailer"> + <META name="Keywords" content="stats, statistics, remailer, reliability, anonymous, nym, mixmaster"> + </HEAD> + <BODY bgcolor="#aaaaaa" text="#000000" LINK="#0000ff" ALINK="#ff0000" VLINK="#ff0000"> + <TABLE cellpadding=0 cellspacing=0 width="100%"> + <TR><TD colspan=2 bgcolor="#444444"><FONT color="#ffffff"><A href="/"><FONT color="#bbbbff">www.noreply.org</FONT></A> :: Rot26</FONT></TD></TR> + <TR><TD colspan=2 bgcolor="#ffffff"> </TD></TR> + <TR><TD bgcolor="#ffffff"> </TD> + <TD bgcolor="#ffffff"> + + <h1>ROT26 Anonymous Remailer</h1> + <p> + The rot26 remailer can be reached at <a href="mailto:rot26@mix.uucico.de">rot26@mix.uucico.de</a>. + <p> + Its operator reads mail sent to <a href="mailto:remop@mix.uucico.de">remop@mix.uucico.de</a>. + <p> + To get the help file, remailer and admin keys, stats, or configuration send mail to + <a href="mailto:rot26@mix.uucico.de">rot26@mix.uucico.de</a> with a subject of + <em><a href="mailto:rot26@mix.uucico.de?subject=remailer-help">remailer-help</a></em>, + <em><a href="mailto:rot26@mix.uucico.de?subject=remailer-key">remailer-key</a></em>, + <em><a href="mailto:rot26@mix.uucico.de?subject=remailer-adminkey">remailer-adminkey</a></em>, + <em><a href="mailto:rot26@mix.uucico.de?subject=remailer-stats">remailer-stats</a></em>, or + <em><a href="mailto:rot26@mix.uucico.de?subject=remailer-conf">remailer-conf</a></em>. + + <h1>History</h1> + <ul> + <li><em>2004-05-02</em>: Revoked old admin key <a href="keys/4B8AC6A8.asc"><code>4B8AC6A8</code></a>. No known compromises.</li> + <li><em>2004-04-10</em>: New key <a href="keys/c4818fe61b42c8d27e87a476fcd76b6f"><code>c4818fe61b42c8d27e87a476fcd76b6f</code></a> (Expires: 2005-05-05).</li> + <li><em>2004-01-18</em>: New admin key <a href="keys/66DC9EA2.asc"><code>66DC9EA2</code></a> (<code>FABE 1727 8E0C 4598 5C6F 9513 F1F8 9A53 66DC 9EA2</code>).</li> + <li><em>2003-05-24</em>: Rot26 moves back to its own host with a new hard disk. Hope this one lasts a bit longer.</li> + <li><em>2003-05-22</em>: All known copies of <a href="keys/292faf0ee7c93743c76df482c0fa550a"><code>292faf0ee7c93743c76df482c0fa550a</code></a>'s secret key have been destroyed. No known compromises.</li> + <li><em>2003-05-22</em>: Old key <a href="keys/292faf0ee7c93743c76df482c0fa550a"><code>292faf0ee7c93743c76df482c0fa550a</code></a> decommissioned.</li> + <li><em>2003-04-16</em>: New key <a href="keys/d4285164186b2fdda3af791e1571e3cc"><code>d4285164186b2fdda3af791e1571e3cc</code></a> (Expires: 2004-05-10).</li> + <li><em>2003-02-23</em>: hard disk fails. Able to backup data immediatly before. rot26 moves to another host for the time being.</li> + <li><em>2002-11-07</em>: Revoked old admin key <a href="keys/A91FB036.asc"><code>A91FB036</code></a>. No known compromises.</li> + <li><em>2002-11-02</em>: All known copies of <a href="keys/7f6d997678b19ccac110f6e669143126"><code>7f6d997678b19ccac110f6e669143126</code></a>'s secret key have been destroyed. No known compromises.</li> + <li><em>2002-10-28</em>: Old key <a href="keys/7f6d997678b19ccac110f6e669143126"><code>7f6d997678b19ccac110f6e669143126</code></a> decommissioned.</li> + <li><em>2002-09-18</em>: New key <a href="keys/292faf0ee7c93743c76df482c0fa550a"><code>292faf0ee7c93743c76df482c0fa550a</code></a> (Expires: 2003-05-16).</li> + <li><em>2002-08-16</em>: New admin key <a href="keys/4B8AC6A8.asc"><code>4B8AC6A8</code></a> (<code>933F DC66 6DC5 DC14 88F1 1D2C C168 1A43 4B8A C6A8</code>).</li> + <li><em>2002-02-02</em>: All known copies of <a href="keys/30b16a30c2b3af1ec5d5625fcb5059ef"><code>30b16a30c2b3af1ec5d5625fcb5059ef</code></a>'s secret key have been destroyed. No known compromises.</li> + <li><em>2002-01-10</em>: New key <a href="keys/7f6d997678b19ccac110f6e669143126"><code>7f6d997678b19ccac110f6e669143126</code></a></li> + <li><em>2001-08-26</em>: rot26 entered production state</li> + <li><em>2001-08-18</em>: rot26 open for public testing - mixkey: <a href="keys/30b16a30c2b3af1ec5d5625fcb5059ef"><code>30b16a30c2b3af1ec5d5625fcb5059ef</code></a>; admin key: <a href="keys/A91FB036.asc"><code>A91FB036</code></a> (<code>F85B ACB2 1E32 F5EC EF7D 305F F0F9 3894 A91F B036</code>)</li> + </ul> + + <!-- + <h1>Queue Sizes</h1> + + <img src="MTA-monthly.png" width="497" height="181" alt="Queue Sizes"><br> + <img src="Mix-monthly.png" width="497" height="181" alt="Mix Pool Size"><br> + <img src="Traffic-monthly.png" width="497" height="181" alt="Remailed Messages"><br> + --> + + + </TD></TR> + <TR><TD colspan=2 bgcolor="#ffffff"> </TD></TR> + <TR><TD colspan=2 bgcolor="#444444"><FONT color="#ffffff"><EM><a href="mailto:web@palfrader.org"><font color="#bbbbff">web@palfrader.org</font></a></EM> - + <a href="http://validator.w3.org/check/referer"><font color="#bbbbff">Valid HTML 4.01!</font></a></FONT></TD></TR> + </TABLE> + </BODY> +</HTML> 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 @@ +<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <title>Create Account</title> + </head> + <body bgcolor="#aaaaaa" text="#000000" LINK="#0000ff" ALINK="#ff0000" VLINK="#ff0000"> + <table cellpadding=0 cellspacing=0 width="100%"> + <tr> + <td colspan=2 bgcolor="#444444"> + <font color="#ffffff"> + <a href="/"><font color="#bbbbff">www.noreply.org</font></a> :: + Create Account</font> + </td> + </tr> + <tr> + <td colspan=2 bgcolor="#444444"> + <font color="#ffffff"> + <TMPL_IF NAME="user"> + Logged in as <a href="account-edit.php"><font color="#bbbbff"><TMPL_VAR NAME="user"></font></a> + - + <a href="logout.php"><font color="#bbbbff">Logout</font></a> + </TMPL_IF NAME="user"> + <TMPL_UNLESS NAME="user"> + Not logged in. + </TMPL_UNLESS NAME="user"> + </td> + </tr> + <tr> + <td colspan=2 bgcolor="#ffffff"> + </td> + </tr> + <tr> + <td bgcolor="#ffffff"> + </td> + <td bgcolor="#ffffff"> + <p> + Creating a new user: + <p> + <TMPL_IF NAME="message"> + <p> + <font color="red"> + <strong> + <TMPL_VAR NAME="message"> + </strong> + </font> + </TMPL_IF NAME="message"> + <form method="post"> + <input TYPE="hidden" NAME="goto" VALUE="<TMPL_VAR NAME="goto">"> + <input TYPE="hidden" NAME="form_id" VALUE="commit"> + <table> + <tr> + <th align="left"> + Username:</th> + <td> + <input type="text" name="username" value="<TMPL_VAR NAME="username_field">"> + </td> + </tr> + <tr> + <th align="left"> + Your Name:</th> + <td> + <input type="text" name="name" value="<TMPL_VAR NAME="name_field">"> (optional) + </td> + </tr> + <tr> + <th align="left"> + Email Address:</th> + <td> + <input type="text" name="address" value="<TMPL_VAR NAME="address_field">"> + </td> + </tr> + <tr> + <th align="left"> + </th> + <td> + <input type="submit"> + <input type="reset"> + </td> + </tr> + </table> + </form> + </td> + </tr> + <tr> + <td colspan=2 bgcolor="#ffffff"> + </td> + </tr> + <tr> + <td colspan=2 bgcolor="#444444"> + <font color="#ffffff"> + <em><a href="mailto:web@palfrader.org"><font color="#bbbbff">web@palfrader.org</font></a></em> - + <a href="http://validator.w3.org/check/referer"><font color="#bbbbff">Valid HTML 4.01!</font></a> + </font> + </td> + </tr> + </table> + </body> + <!-- vim:set ts=2: --> + <!-- vim:set shiftwidth=2: --> +</html> 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 @@ +<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <title>Update Account</title> + </head> + <body bgcolor="#aaaaaa" text="#000000" LINK="#0000ff" ALINK="#ff0000" VLINK="#ff0000"> + <table cellpadding=0 cellspacing=0 width="100%"> + <tr> + <td colspan=2 bgcolor="#444444"> + <font color="#ffffff"> + <a href="/"><font color="#bbbbff">www.noreply.org</font></a> :: + Update Account</font> + </td> + </tr> + <tr> + <td colspan=2 bgcolor="#444444"> + <font color="#ffffff"> + <TMPL_IF NAME="user"> + Logged in as <a href="account-edit.php"><font color="#bbbbff"><TMPL_VAR NAME="user"></font></a> + - + <a href="logout.php"><font color="#bbbbff">Logout</font></a> + </TMPL_IF NAME="user"> + <TMPL_UNLESS NAME="user"> + Not logged in. + </TMPL_UNLESS NAME="user"> + </td> + </tr> + <tr> + <td colspan=2 bgcolor="#ffffff"> + </td> + </tr> + <tr> + <td bgcolor="#ffffff"> + </td> + <td bgcolor="#ffffff"> + <p> + Update account: + <p> + <TMPL_IF NAME="message"> + <p> + <font color="red"> + <strong> + <TMPL_VAR NAME="message"> + </strong> + </font> + </TMPL_IF NAME="message"> + <form method="post" action="<TMPL_VAR NAME="PHP_SELF">"> + <input TYPE="hidden" NAME="form_id" VALUE="commit"> + <table> + <tr> + <th align="left"> + Username:</th> + <td> + <TMPL_VAR NAME="username_field"> + </td> + </tr> + <tr> + <th align="left"> + Your Name:</th> + <td> + <input type="text" name="name" value="<TMPL_VAR NAME="name_field">"> (optional) + </td> + </tr> + <tr> + <th align="left"> + Password:</th> + <td> + <input type="password" name="password1"> + </td> + </tr> + <tr> + <th align="left"> + again:</th> + <td> + <input type="password" name="password2"> + </td> + </tr> + <tr> + <th align="left"> + </th> + <td> + <input type="submit" name="commt" value="Update"> + <input type="reset"> + </td> + </tr> + </table> + </form> + + <p> + <strong>Email Addresses</strong> + <table> + <tr> + <th>Address</th> + <th>Status</th> + <th>Action</th> + <th> </th> + </tr> + <TMPL_LOOP NAME="addresses"> + <tr> + <td><TMPL_VAR NAME="address"></td> + <TMPL_CMP NAME="verified" VALUE="t"> + <TMPL_CMP NAME="enabled" VALUE="t"> + <td>active, mail will be sent</td> + <td><form action="<TMPL_VAR NAME="PHP_SELF">" method="post"><input type="hidden" name="form_id" value="addr_disable"><input type="hidden" name="address_ref" value="<TMPL_VAR NAME="ref">"><input type="submit" name="disable" value="Set Disabled"></form></td> + </TMPL_CMP NAME="enabled"> + <TMPL_CMP NAME="enabled" VALUE="f"> + <td>disabled, mail will not be sent</td> + <td><form action="<TMPL_VAR NAME="PHP_SELF">" method="post"><input type="hidden" name="form_id" value="addr_enable"><input type="hidden" name="address_ref" value="<TMPL_VAR NAME="ref">"><input type="submit" name="enable" value="Set Active"></form></td> + </TMPL_CMP NAME="enabled"> + </TMPL_CMP NAME="verified"> + <TMPL_CMP NAME="verified" VALUE="f"> + <td>not yet verified</td> + <td><form action="<TMPL_VAR NAME="PHP_SELF">" method="post"><input type="hidden" name="form_id" value="addr_verify"><input type="hidden" name="address_ref" value="<TMPL_VAR NAME="ref">"><input type="text" name="code" value=""><input type="submit" name="verify" value="Verify"></form></td> + </TMPL_CMP NAME="verified"> + <td><form action="<TMPL_VAR NAME="PHP_SELF">" method="post"><input type="hidden" name="form_id" value="addr_delete"><input type="hidden" name="address_ref" value="<TMPL_VAR NAME="ref">"><input type="submit" value="delete" name="delete"></form></td> + </tr> + </TMPL_LOOP NAME="addresses"> + <form action="<TMPL_VAR NAME="PHP_SELF">" method="post"> + <input type="hidden" name="form_id" value="addr_new"> + <tr> + <td><input type="text" name="address" value=""></td> + <td>new</td> + <td><input type="submit" value="Create" name="addr_new"></td> + </td> + </form> + </table> + </td> + </tr> + <tr> + <td colspan=2 bgcolor="#ffffff"> + </td> + </tr> + <tr> + <td colspan=2 bgcolor="#444444"> + <font color="#ffffff"> + <em><a href="mailto:web@palfrader.org"><font color="#bbbbff">web@palfrader.org</font></a></em> - + <a href="http://validator.w3.org/check/referer"><font color="#bbbbff">Valid HTML 4.01!</font></a> + </font> + </td> + </tr> + </table> + </body> + <!-- vim:set ts=2: --> + <!-- vim:set shiftwidth=2: --> +</html> 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 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<HTML> + <HEAD> + <TITLE>Anonymous Remailer Stats, Meta-Stats and other Information</TITLE> + <META name="Description" content="Anonymous Remailer Stats, Meta-Stats and other Information"> + <META name="Keywords" content="stats, statistics, remailer, reliability, anonymous, nym, mixmaster"> + </HEAD> + <BODY bgcolor="#aaaaaa" text="#000000" LINK="#0000ff" ALINK="#ff0000" VLINK="#ff0000"> + <TABLE cellpadding=0 cellspacing=0 width="100%"> + <TR><TD bgcolor="#444444"><FONT color="#ffffff">www.noreply.org</FONT></TD></TR> + <tr> + <td colspan=2 bgcolor="#444444"> + <font color="#ffffff"> + <TMPL_IF NAME="user"> + Logged in as <a href="account-edit.php"><font color="#bbbbff"><TMPL_VAR NAME="user"></font></a> + - + <a href="logout.php"><font color="#bbbbff">Logout</font></a> + </TMPL_IF NAME="user"> + <TMPL_UNLESS NAME="user"> + Not logged in: <a href="login.php?goto=remsaint.php"><font color="#bbbbff">Login</font></a> + </TMPL_UNLESS NAME="user"> + </font> + </td> + </tr> + <TR><TD bgcolor="#ffffff"> </TD></TR> + <TR><TD bgcolor="#ffffff"> + + + <PRE> + <<< EHLO <TMPL_VAR NAME="remotehostname"> + >>> 250-www.noreply.org Hello <TMPL_VAR NAME="remotehostname"> [<TMPL_VAR NAME="remoteip">], pleased to meet you. +<!--<TMPL_UNLESS NAME="have_ssl"> >>> 250-<A href="https://www.noreply.org/">STARTTLS</A> +</TMPL_UNLESS NAME="have_ssl"><TMPL_IF NAME="have_ssl"> >>> 250-STARTTLS +</TMPL_IF NAME="have_ssl">--> >>> 250-<A href="allpingers/">ALLPINGERS</A> + <!-->>> 250-<A href="pinger/">PINGER</A> + -->>>> 250-<A href="echolot/">PINGER</A> + >>> 250-<A href="echolot/thesaurus/">THESAURUS</A> + >>> 250-<A href="latency/">LATENCY</A> + >>> 250-<A href="load/">LOAD</A> + >>> 250-<A href="remsaint.php">REMSAINT</A> + >>> 250-<A href="meta/">METASTATS</A> + >>> 250-<A href="tls/">TLS-INFO</A> + >>> 250-<A href="rot26/">ROT26</A> + >>> 250-<A href="mixminion-nodes">MIXMINION-NODES</A> + >>> 250-<A href="tor-running-routers">TOR-ROUTERS</A> + >>> 250-<A href="resources.html">RESOURCES</A> + >>> 250 HELP + +<!--<TMPL_IF NAME="have_ssl"> <<< STARTTLS + >>> 200-TLS enabled +</TMPL_IF NAME="have_ssl"> +<TMPL_UNLESS NAME="have_ssl"> <<< HELP STARTTLS + >>> 214-<A href="https://www.noreply.org/">STARTTLS</A> + >>> 214 Access this site via HTTPS (ssl encrypted). + +</TMPL_UNLESS NAME="have_ssl">--> <<< HELP ALLPINGERS + >>> 214-<A href="allpingers/">ALLPINGERS</A> + >>> 214- The canonical list of all pingers. In both a nice HTML + >>> 214 table and a machine readable format. + + <!--<<< HELP PINGER + >>> 214-<A href="pinger/">PINGER</A> + >>> 214- Mixmaster reliability stats as seen from the rot26 + >>> 214 remailer. + + --><<< HELP PINGER + >>> 214-<A href="echolot/">PINGER</A> + >>> 214- Mixmaster and Cypherpunk reliability stats and + >>> 214 keyrings produced by Echolot. + + <<< HELP THESAURUS + >>> 214-<A href="echolot/thesaurus/">THESAURUS</A> + >>> 214 remailer-xxx of all remailers by Echolot. + + <<< HELP LATENCY + >>> 214-<A href="latency/">LATENCY</A> + >>> 214 graphing of remailer latency stats. + + <<< HELP LOAD + >>> 214-<A href="load/">LOAD</A> + >>> 214- graphing of remailer load (i.e. messages processed) and + >>> 214 their pool sizes if available. + + <<< HELP ROT26 + >>> 214-<A href="rot26/">ROT26</A> + >>> 214 info on the rot26 remailer + + <<< HELP REMSAINT + >>> 214-<A href="remsaint.php">REMSAINT</A> + >>> 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-<A href="meta/">METASTATS</A> + >>> 214- Show stats for all remailers from all pingers in a + >>> 214 single table. + + <<< HELP TLS-INFO + >>> 214-<A href="tls/">TLS-INFO</A> + >>> 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-<A href="mixminion-nodes/">MIXMINION-NODES</A> + >>> 214 Number of recommended <a href="http://mixminion.net/">mixminion</a> nodes over time. + + <<< HELP TOR-ROUTERS + >>> 214-<A href="tor-running-routers/">TOR-ROUTERS</A> + >>> 214 Number of <a href="http://freehaven.net/tor/">tor</a> routers running over time. + + <<< HELP RESOURCES + >>> 214-<A href="resources.html">RESOURCES</A> + >>> 214 links and pointers + + <!--<<< HELP STARTLS + >>> 214-<A href="https://www.noreply.org/">STARTLS</A> + >>> 214 This site via https.--> + </PRE> + + </TD></TR> + <TR><TD bgcolor="#ffffff"> </TD></TR> + <TR><TD bgcolor="#444444"><FONT color="#ffffff"><EM><a href="mailto:web@palfrader.org"><font color="#bbbbff">web@palfrader.org</font></a></EM> - + <a href="http://validator.w3.org/check/referer"><font color="#bbbbff">Valid HTML 4.01!</font></a></FONT></TD></TR> + </TABLE> + </BODY> +</HTML> 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 @@ +<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <title>Login</title> + </head> + <body bgcolor="#aaaaaa" text="#000000" LINK="#0000ff" ALINK="#ff0000" VLINK="#ff0000"> + <table cellpadding=0 cellspacing=0 width="100%"> + <tr> + <td colspan=2 bgcolor="#444444"> + <font color="#ffffff"> + <a href="/"><font color="#bbbbff">www.noreply.org</font></a> :: + Login</font> + </td> + </tr> + <tr> + <td colspan=2 bgcolor="#444444"> + <font color="#ffffff"> + <TMPL_IF NAME="user"> + Logged in as <a href="account-edit.php"><font color="#bbbbff"><TMPL_VAR NAME="user"></font></a> + - + <a href="logout.php"><font color="#bbbbff">Logout</font></a> + </TMPL_IF NAME="user"> + <TMPL_UNLESS NAME="user"> + Not logged in. + </TMPL_UNLESS NAME="user"> + </td> + </tr> + <tr> + <td colspan=2 bgcolor="#ffffff"> + </td> + </tr> + <tr> + <td bgcolor="#ffffff"> + </td> + <td bgcolor="#ffffff"> + <p> + Log on as user to noreply. If you do not have an account yet, <a href="account-create.php?form_id=ask&goto=<TMPL_VAR NAME="goto">">create one</a>. + <p> + <strong> + Cookies must be enabled beyond this point.</strong> + <TMPL_IF NAME="message"> + <p> + <font color="red"> + <strong> + <TMPL_VAR NAME="message"> + </strong> + </font> + </TMPL_IF NAME="message"> + <form method="post"> + <input TYPE="hidden" NAME="goto" VALUE="<TMPL_VAR NAME="goto">"> + <input TYPE="hidden" NAME="form_id" VALUE="auth"> + <table> + <tr> + <th align="left"> + Username:</th> + <td> + <input type="text" name="username" value="<TMPL_VAR NAME="username_field">"> + </td> + </tr> + <tr> + <th align="left"> + Password:</th> + <td> + <input type="password" name="password"> + </td> + </tr> + <tr> + <th align="left"> + </th> + <td> + <input type="submit"> + <input type="reset"> + </td> + </tr> + </table> + </form> + </td> + </tr> + <tr> + <td colspan=2 bgcolor="#ffffff"> + </td> + </tr> + <tr> + <td colspan=2 bgcolor="#444444"> + <font color="#ffffff"> + <em><a href="mailto:web@palfrader.org"><font color="#bbbbff">web@palfrader.org</font></a></em> - + <a href="http://validator.w3.org/check/referer"><font color="#bbbbff">Valid HTML 4.01!</font></a> + </font> + </td> + </tr> + </table> + </body> + <!-- vim:set ts=2: --> + <!-- vim:set shiftwidth=2: --> +</html> 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 @@ +<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <title>Logout</title> + </head> + <body bgcolor="#aaaaaa" text="#000000" LINK="#0000ff" ALINK="#ff0000" VLINK="#ff0000"> + <table cellpadding=0 cellspacing=0 width="100%"> + <tr> + <td colspan=2 bgcolor="#444444"> + <font color="#ffffff"> + <a href="/"><font color="#bbbbff">www.noreply.org</font></a> :: + Logout</font> + </td> + </tr> + <tr> + <td colspan=2 bgcolor="#444444"> + <font color="#ffffff"> + <TMPL_IF NAME="user"> + Logged in as <a href="account-edit.php"><font color="#bbbbff"><TMPL_VAR NAME="user"></font></a> + - + <a href="logout.php"><font color="#bbbbff">Logout</font></a> + </TMPL_IF NAME="user"> + <TMPL_UNLESS NAME="user"> + Not logged in - <a href="login.php"><font color="#bbbbff">Login</font></a>. + </TMPL_UNLESS NAME="user"> + </td> + </tr> + <tr> + <td colspan=2 bgcolor="#ffffff"> + </td> + </tr> + <tr> + <td bgcolor="#ffffff"> + </td> + <td bgcolor="#ffffff"> + <p> + Successfully logged out. + </td> + </tr> + <tr> + <td colspan=2 bgcolor="#ffffff"> + </td> + </tr> + <tr> + <td colspan=2 bgcolor="#444444"> + <font color="#ffffff"> + <em><a href="mailto:web@palfrader.org"><font color="#bbbbff">web@palfrader.org</font></a></em> - + <a href="http://validator.w3.org/check/referer"><font color="#bbbbff">Valid HTML 4.01!</font></a> + </font> + </td> + </tr> + </table> + </body> + <!-- vim:set ts=2: --> + <!-- vim:set shiftwidth=2: --> +</html> 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 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head><title>Bad Type-<TMPL_VAR NAME="type"> Chains</title></head> +<body bgcolor="#aaaaaa" text="#000000" LINK="#0000ff" ALINK="#ff0000" VLINK="#ff0000"> +<table cellpadding=0 cellspacing=0 width="100%"> +<tr><td colspan=2 bgcolor="#444444"><font color="#ffffff"><a href="/"><font color="#bbbbff">www.noreply.org</font></a> :: <a href="./"><font color="#bbbbff">metastats</font></a> :: Chain <TMPL_VAR NAME="type"></font></td></tr> +<tr><td colspan=2 bgcolor="#ffffff"> </td></tr> +<tr><td bgcolor="#ffffff"> </td> +<td bgcolor="#ffffff"> + +<h1>Bad Type-<TMPL_VAR NAME="type"> Chains</h1> + <small>(<a href="chain.1.html">Type I</a> + (<a href="chain.1.all.html">unfiltered</a>), + <a href="chain.2.html">Type II</a> + (<a href="chain.2.all.html">unfiltered</a>))</small> + +<TMPL_IF NAME="cutoff"> +<p> +Remailers that have less than <TMPL_VAR NAME="cutoff">% reliability in <a href="../remsaint.php">remsaint</a> have been ignored. (<small><a href="<TMPL_VAR NAME="unfiltered">">unfiltered</a></small>). +</TMPL_IF> +<p> +<table> +<tr> + <th rowspan="2" bgcolor="#eeeeee"><TMPL_IF NAME="fromsortlink"><a href="<TMPL_VAR NAME="fromsortlink">">from</a><TMPL_ELSE>from</TMPL_IF></th><th rowspan="2" bgcolor="#eeeeee"><TMPL_IF NAME="tosortlink"><a href="<TMPL_VAR NAME="tosortlink">">to</a><TMPL_ELSE>to</TMPL_IF></th> + <th bgcolor="#eeeeee" align="center" colspan="<TMPL_VAR NAME="numberpingers">">pinger</th></tr> +<tr> + <TMPL_LOOP NAME="pingers"><th bgcolor="#eeeeee" align="center"><TMPL_VAR NAME="name"></th></TMPL_LOOP> +</tr> +<TMPL_LOOP NAME="left"> + <tr><td bgcolor="#ddddff" colspan="<TMPL_VAR NAME="cols">"><small> </small></td></tr> + <!--<td bgcolor="#ddddff" colspan="2"><small> </small></td><TMPL_LOOP NAME="pingers"><td bgcolor="ddddff" align="center"><small><TMPL_VAR NAME="name"></small></td></TMPL_LOOP>--> + <TMPL_LOOP NAME="right"> + <tr> + <td bgcolor="#bbbbff"><TMPL_VAR NAME="leftname"></td> + <td bgcolor="#bbbbff"><TMPL_VAR NAME="rightname"></td> + <TMPL_LOOP NAME="bad"><TMPL_IF NAME="bad"><td bgcolor="#ffaaaa" align="center">bad<TMPL_ELSE><TMPL_IF NAME="implicitbad"><td bgcolor="#ffaaaa"> <TMPL_ELSE><TMPL_IF NAME="known"><td bgcolor="#aaffaa"> <TMPL_ELSE><td bgcolor="#cccccc" align="center"><small>N/A</small></TMPL_IF></TMPL_IF></TMPL_IF></td></TMPL_LOOP> + </tr> + </TMPL_LOOP> +</TMPL_LOOP> + +</table> + +<p> +N/A means that a pinger doesn't list a remailer and therefore probably isn't aware of any broken chains regarding the remailer. +<p> +Built at <TMPL_VAR NAME="now">. + +</td></tr> +<tr><td colspan=2 bgcolor="#ffffff"> </td></tr> +<tr><td colspan=2 bgcolor="#444444"><font color="#ffffff"><em><a href="mailto:web@palfrader.org"><font color="#bbbbff">web@palfrader.org</font></a></em> - + <a href="http://validator.w3.org/check/referer"><font color="#bbbbff">Valid HTML 4.01!</font></a></font></td></tr> +</table> +</body> +</html> 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 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head><title>Metastats @ noreply</title></head> +<body bgcolor="#aaaaaa" text="#000000" LINK="#0000ff" ALINK="#ff0000" VLINK="#ff0000"> +<table cellpadding=0 cellspacing=0 width="100%"> +<tr><td colspan=2 bgcolor="#444444"><font color="#ffffff"><a href="/"><font color="#bbbbff">www.noreply.org</font></a> :: <a href="./"><font color="#bbbbff">metastats</font></a> :: Type <TMPL_VAR NAME="type"></font></td></tr> +<tr><td colspan=2 bgcolor="#ffffff"> </td></tr> +<tr><td bgcolor="#ffffff"> </td> +<td bgcolor="#ffffff"> + + +<h1>Type <TMPL_VAR NAME="type"> Metastats</h1> + <small>(<a href="meta.1.html">Type 1</a>, + <a href="meta.2.html">Type 2</a>)</small> + +<table> +<tr> + <th>Remailer\Pinger</th> + <TMPL_LOOP NAME="pingers"> + <th><a href="<TMPL_VAR NAME="url">"><TMPL_VAR NAME="nick"><TMPL_IF NAME="cache"></a><BR><a href="<TMPL_VAR NAME="cache">"><SMALL>(cached)</SMALL></a></TMPL_IF></TH> + </TMPL_LOOP> + <th>Average</th> + <th>Deviation</th> +</tr> + <tr> + <td><small>Remailers > 97%</small></td> + <TMPL_LOOP NAME="pingers"> + <td align="center"><small><TMPL_VAR NAME="not_in_warn"></small></td> + </TMPL_LOOP> + <td><small> </small></td> + <td><small> </small></td> + </tr> +<TMPL_LOOP NAME="remailers"> + <tr> + <td bgcolor="<TMPL_IF NAME="highlightline">#55FF55<TMPL_ELSE>#AAFFAA</TMPL_IF>"><a href="<TMPL_VAR NAME="status">"><TMPL_VAR NAME="nick"></a></td> + <TMPL_LOOP NAME="pingers"> + <td align="right" bgcolor="<TMPL_IF NAME="has"><TMPL_IF NAME="used"><TMPL_IF NAME="highlightline">#BBBBBB<TMPL_ELSE>#FFFFFF</TMPL_IF><TMPL_ELSE><TMPL_IF NAME="highlightline">#66EEEE<TMPL_ELSE>#BBFFFF</TMPL_IF></TMPL_IF><TMPL_ELSE>#666666</TMPL_IF>"><TMPL_VAR NAME="rel"></td> + </TMPL_LOOP> + <td align="right" bgcolor="<TMPL_IF NAME="highlightline">#7777FF<TMPL_ELSE>#AAAAFF</TMPL_IF>"><TMPL_VAR NAME="rel_mu"></td> + <td align="right" bgcolor="<TMPL_IF NAME="highlightline">#7777FF<TMPL_ELSE>#AAAAFF</TMPL_IF>"><TMPL_VAR NAME="rel_sigma"></td> + </tr> +</TMPL_LOOP> +</table> + +<p> +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. + +<TMPL_IF NAME="oldpingers"> +<p> +The following pingers have been ignored: +<ul> + <TMPL_LOOP NAME="oldpingers"> + <li><TMPL_VAR NAME="pinger">: <TMPL_VAR NAME="reason"></li> + </TMPL_LOOP> +</ul> +</TMPL_IF> + +<p> +Built at <TMPL_VAR NAME="now">. + +</td></tr> +<tr><td colspan=2 bgcolor="#ffffff"> </td></tr> +<tr><td colspan=2 bgcolor="#444444"><font color="#ffffff"><em><a href="mailto:web@palfrader.org"><font color="#bbbbff">web@palfrader.org</font></a></em> - + <a href="http://validator.w3.org/check/referer"><font color="#bbbbff">Valid HTML 4.01!</font></a></font></td></tr> +</table> +</body> +</html> 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 @@ +<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <title>RemSaint - Status</title> + </head> + <body bgcolor="#aaaaaa" text="#000000" LINK="#0000ff" ALINK="#ff0000" VLINK="#ff0000"> + <table cellpadding=0 cellspacing=0 width="100%"> + <tr> + <td colspan=2 bgcolor="#444444"> + <font color="#ffffff"><a href="/"><font color="#bbbbff">www.noreply.org</font></a> :: + RemSaint</font> + </td> + </tr> + <tr> + <td colspan=2 bgcolor="#444444"> + <font color="#ffffff"> + <TMPL_IF NAME="user"> + Logged in as <a href="account-edit.php"><font color="#bbbbff"><TMPL_VAR NAME="user"></font></a> + - + <a href="logout.php"><font color="#bbbbff">Logout</font></a> + </TMPL_IF NAME="user"> + <TMPL_UNLESS NAME="user"> + Not logged in: <a href="login.php?form_id=login&goto=remsaint.php"><font color="#bbbbff">Login</font></a> + </TMPL_UNLESS NAME="user"> + </font> + </td> + </tr> + <tr> + <td colspan=2 bgcolor="#ffffff"> + </td> + </tr> + <tr> + <td bgcolor="#ffffff"> + </td> + <td bgcolor="#ffffff"> + <TMPL_IF NAME="manage"> + <form action="remsaint-subscription.php" method="post"> + <input type="hidden" name="form_id" value="subscription"> + </TMPL_IF NAME="manage"> + <p> + Remsaint is an overview of <a href="../meta/">all remailers' reliability</a> averaged over + <a href="../allpingers/">all stats sources</a>. Users and operators + can <em>subscribe</em> to remailers to get notified should a remailer + become unreliable. + <p> + 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. + <p> + 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). + + <p> + Summary for the last few weeks and the last 12 months:<br> + <img src="../images/remailer-states.png" alt="[Number of Remailers in Ok, Warning, and Critical over the last few weeks.]" width="497" height="246"> + <img src="../images/remailer-states-long.png" alt="[Number of Remailers in Ok, Warning, and Critical over the last 12 months.]" width="497" height="246"> + <br><small>Even more history: <a href="../images/remailer-states-long-2.png">Number of Remailers in Ok, Warning, and Critical over the last 24 months.</a></small> + <p> + <hr> + <TMPL_IF NAME="user"> + <p> + <TMPL_UNLESS NAME="manage"><a href="<TMPL_VAR NAME="this">?form_id=list&manage=1&sort=<TMPL_VAR NAME="sort">">Manage subscriptions</a></TMPL_UNLESS NAME="manage"> + <TMPL_IF NAME="manage"> + <a href="<TMPL_VAR NAME="this">?manage=0&sort=<TMPL_VAR NAME="sort">">Back to simple overview</a> + </TMPL_IF NAME="manage"> + </TMPL_IF NAME="user"> + <TMPL_UNLESS NAME="user"> + <p> + If you were <a href="login.php?form_id=login&goto=remsaint.php">logged in</a> you could + subscribe to status changes of those remailers. If you + do not have an account yet, <a href="account-create.php?form_id=ask&goto=remsaint.php">create one</a>. + </TMPL_UNLESS NAME="user"> + <hr> + <p> + If you want to get all notifications you can subscribe to the + <a href="http://lists.noreply.org/mailman/listinfo/remsaint-report">remsaint-report</a> + mailinglist which gets a copy of each notification as well as + information about added and removed remailers. + Past notifications can be found in the + <a href="http://lists.noreply.org/pipermail/remsaint-report/">notification archive</a>. + <hr> + <p> + Details: + <table> + <TMPL_IF NAME="manage"> + <tr> + <th rowspan=2><a href="<TMPL_VAR NAME="this">?form_id=list&sort=nick&manage=<TMPL_VAR NAME="manage">">Remailer</a></th> + <th rowspan=2><a href="<TMPL_VAR NAME="this">?form_id=list&sort=status&manage=<TMPL_VAR NAME="manage">">Status</a></th> + <th rowspan=2><a href="<TMPL_VAR NAME="this">?form_id=list&sort=type1&manage=<TMPL_VAR NAME="manage">">Type I</a></th> + <th rowspan=2><a href="<TMPL_VAR NAME="this">?form_id=list&sort=type2&manage=<TMPL_VAR NAME="manage">">Type II</a></th> + <th rowspan=2>Last Update</th> + <th rowspan=2 colspan=2>Listed in</th> + <th colspan=3>Notify on</th> + </tr> + <tr> + <th>Warning</th> + <th>Critical</th> + <th>Recovery</th> + </tr> + </TMPL_IF NAME="manage"> + <TMPL_UNLESS NAME="manage"> + <tr> + <th><a href="<TMPL_VAR NAME="this">?form_id=list&sort=nick&manage=<TMPL_VAR NAME="manage">">Remailer</a></th> + <th><a href="<TMPL_VAR NAME="this">?form_id=list&sort=status&manage=<TMPL_VAR NAME="manage">">Status</a></th> + <th><a href="<TMPL_VAR NAME="this">?form_id=list&sort=type1&manage=<TMPL_VAR NAME="manage">">Type I</a></th> + <th><a href="<TMPL_VAR NAME="this">?form_id=list&sort=type2&manage=<TMPL_VAR NAME="manage">">Type II</a></th> + <th>Last Update</th> + <th colspan=2>Listed in</th> + </tr> + </TMPL_UNLESS NAME="manage"> + <TMPL_LOOP NAME="remailers"> + <tr> + <td bgcolor="#EEEEEE"><small><code><a href="../meta/status.<TMPL_VAR NAME="nick">.txt"><TMPL_VAR NAME="nick"></a></code></small></td> + <TMPL_CMP NAME="in_critical" VALUE="t"> + <td bgcolor="#FF0000" align="center"><small><strong>CRITICAL</strong></small></td> + </TMPL_CMP NAME="in_critical"> + <TMPL_CMP NAME="in_critical" VALUE="f"> + <TMPL_CMP NAME="in_warning" VALUE="t"> + <td bgcolor="#FFFF00" align="center"><small><strong>WARNING</strong></small></td> + </TMPL_CMP NAME="in_warning"> + <TMPL_CMP NAME="in_warning" VALUE="f"> + <td bgcolor="#00FF00" align="center"><small><strong>OK</strong></small></td> + </TMPL_CMP NAME="in_warning"> + </TMPL_CMP NAME="in_critical"> + <td bgcolor="#EEEEEE" align="right"> + <small> + <TMPL_IF NAME="reliability_type1"> + <TMPL_VAR NAME="reliability_type1">% + </TMPL_IF NAME="reliability_type1"> + <TMPL_UNLESS NAME="reliability_type1"> + + </TMPL_UNLESS NAME="reliability_type1"> + </small> + </td> + <td bgcolor="#EEEEEE" align="right"> + <small> + <TMPL_IF NAME="reliability_type2"> + <TMPL_VAR NAME="reliability_type2">% + </TMPL_IF NAME="reliability_type2"> + <TMPL_UNLESS NAME="reliability_type2"> + + </TMPL_UNLESS NAME="reliability_type2"> + </small> + </td> + <td bgcolor="#EEEEEE" align="center"> + <small> + <TMPL_VAR NAME="last_update"> + </small> + </td> + <td bgcolor="#EEEEEE" align="center"> + <small> + <TMPL_IF NAME="reliability_type1"> + <TMPL_VAR NAME="listed1"> + </TMPL_IF NAME="reliability_type1"> + <TMPL_UNLESS NAME="reliability_type1"> + + </TMPL_UNLESS NAME="reliability_type1"> + </small> + </td> + <td bgcolor="#EEEEEE" align="center"> + <small> + <TMPL_IF NAME="reliability_type2"> + <TMPL_VAR NAME="listed2"> + </TMPL_IF NAME="reliability_type2"> + <TMPL_UNLESS NAME="reliability_type2"> + + </TMPL_UNLESS NAME="reliability_type2"> + </small> + </td> + <TMPL_IF NAME="manage"> + <input TYPE="hidden" NAME="ref[]" VALUE="<TMPL_VAR NAME="ref">"> + <td bgcolor="#EEEEEE" align="center"> + <input TYPE="checkbox" NAME="warning_<TMPL_VAR NAME="ref">"<TMPL_CMP NAME="notify_warning" VALUE="t"> checked</TMPL_CMP NAME="notify_warning">> + </td> + <td bgcolor="#EEEEEE" align="center"> + <input TYPE="checkbox" NAME="critical_<TMPL_VAR NAME="ref">"<TMPL_CMP NAME="notify_critical" VALUE="t">checked</TMPL_CMP NAME="notify_critical">> + </td> + <td bgcolor="#EEEEEE" align="center"> + <input TYPE="checkbox" NAME="recovery_<TMPL_VAR NAME="ref">"<TMPL_CMP NAME="notify_recovery" VALUE="t"> checked</TMPL_CMP NAME="notify_recovery">> + </td> + </TMPL_IF NAME="manage"> + </tr> + </TMPL_LOOP NAME="remailers"> + </table> + <p> + <TMPL_IF NAME="manage"> + <input type="submit"> + <input type="reset"> + </form> + </TMPL_IF NAME="manage"> + <p> + <hr> + <TMPL_IF NAME="user"> + <p> + <TMPL_UNLESS NAME="manage"><a href="<TMPL_VAR NAME="this">?form_id=list&manage=1&sort=<TMPL_VAR NAME="sort">">Manage subscriptions</a></TMPL_UNLESS NAME="manage"> + <TMPL_IF NAME="manage"> + <a href="<TMPL_VAR NAME="this">?manage=0&sort=<TMPL_VAR NAME="sort">">Back to simple overview</a> + </TMPL_IF NAME="manage"> + </TMPL_IF NAME="user"> + <TMPL_UNLESS NAME="user"> + <p> + If you were <a href="login.php?form_id=login&goto=remsaint.php">logged in</a> you could + subscribe to status changes of those remailers. If you + do not have an account yet, <a href="account-create.php?form_id=ask&goto=remsaint.php">create one</a>. + </TMPL_UNLESS NAME="user"> + <hr> + <p> + <strong>States</strong> + <ul> + <li>Critical: Averaged reliability for Type 1 or Type 2 is below 92%.</li> + <li>Warning: Averaged reliability for Type 1 or Type 2 is below 97%.</li> + <li>OK: Averaged reliability for both Type 1 and Type 2 is greater or equal to 97%.</li> + </ul> + <TMPL_IF NAME="manage"> + <p> + <strong>Notifications</strong> + <ul> + <li>On Warning: You will get an email if the remailer goes from OK to Warning state.</li> + <li>On Critical: You will get an email if the remailer goes from OK or Warning to Critical state.</li> + <li>On Recovery: You will get an email if the remailer goes from Warning or Critical to OK state.</li> + </ul> + You will also be notified if a remailer you are subscribed to + gets removed from remsaint. This happens if no pinger lists it + anymore. + </TMPL_IF NAME="manage"> + <p> + Feedback appreciated. + + <hr> + <p> + <strong>Links</strong> + <ul> + <li><a href="../meta/">Metastats</a></li> + <li><a href="../allpingers/">All Pingers</a></li> + <li><a href="http://lists.noreply.org/mailman/listinfo/remsaint-report">remsaint-report List</a></li> + <li><a href="http://lists.noreply.org/pipermail/remsaint-report/">remsaint-report Archives</a></li> + </ul> + <hr> + <p> + Images created using Tobi Oetiker's + <a href="http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/">rrdtool</a>. + </td> + </tr> + <tr> + <td colspan=2 bgcolor="#ffffff"> </td> + </tr> + <tr> + <td colspan=2 bgcolor="#444444"> + <font color="#ffffff"> + <em><a href="mailto:web@palfrader.org"><font color="#bbbbff">web@palfrader.org</font></a></em> + - + <a href="http://validator.w3.org/check/referer"><font color="#bbbbff">Valid HTML 4.01!</font></a> + </font> + </td> + </tr> + </table> + </body> + <!-- vim:set ts=2: --> + <!-- vim:set shiftwidth=2: --> +</html> 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 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head><title>RemSaint - Status</title></head> +<body bgcolor="#aaaaaa" text="#000000" LINK="#0000ff" ALINK="#ff0000" VLINK="#ff0000"> +<table cellpadding=0 cellspacing=0 width="100%"> +<tr><td colspan=2 bgcolor="#444444"><font color="#ffffff"><a href="/"><font color="#bbbbff">www.noreply.org</font></a> :: <a href="./remsaint.php"><font color="#bbbbff">RemSaint</font></a> :: Subscriptions</font></td></tr> +<tr><td colspan=2 bgcolor="#444444"><font color="#ffffff"><TMPL_IF NAME="user">Logged in as <TMPL_VAR NAME="user"> - <a href="logout.php"><font color="#bbbbff">Logout</font></a></TMPL_IF NAME="user"><TMPL_UNLESS NAME="user">Not logged in: <a href="auth.php?goto=remsaint.php"><font color="#bbbbff">login</font></a></TMPL_UNLESS NAME="user"></font></td></tr> +<tr><td colspan=2 bgcolor="#ffffff"> </td></tr> +<tr><td bgcolor="#ffffff"> </td> +<td bgcolor="#ffffff"> + +<h1>Subscription update:</h1> + +<TMPL_VAR_NOESC NAME="message"> + +<p> +<a href="remsaint.php?form_id=list&manage=1">Manage subscriptions</a><br> +<a href="remsaint.php?form_id=list&manage=0">Back to simple overview</a><br> +<a href="./">Back to root</a><br> + +</td></tr> +<tr><td colspan=2 bgcolor="#ffffff"> </td></tr> +<tr><td colspan=2 bgcolor="#444444"><font color="#ffffff"><em><a href="mailto:web@palfrader.org"><font color="#bbbbff">web@palfrader.org</font></a></em> - + <a href="http://validator.w3.org/check/referer"><font color="#bbbbff">Valid HTML 4.01!</font></a></font></td></tr> +</table> +</body> +</html> 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 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<head><title>TLS @ noreply</title></head> +<body bgcolor="#aaaaaa" text="#000000" LINK="#0000ff" ALINK="#ff0000" VLINK="#ff0000"> +<table cellpadding=0 cellspacing=0 width="100%"> +<tr><td colspan=2 bgcolor="#444444"><font color="#ffffff"><a href="/"><font color="#bbbbff">www.noreply.org</font></a> :: TLS </font></td></tr> +<tr><td colspan=2 bgcolor="#ffffff"> </td></tr> +<tr><td bgcolor="#ffffff"> </td> +<td bgcolor="#ffffff"> + +<h1>SMTP - TLS</h1> + +<strong>T</strong>ransport +<strong>L</strong>ayer +<strong>S</strong>ecurity (similar to SSL) +brings forward secrecy to Internet Email by encrypting SMTP traffic. +<p> +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.) +<p> +Ephemeral keys make it impossible to decrypt data which was eavesdropped at one +time by compromising a remailer's key later. +<p> +Since remailer keys are valid for weeks, sometimes years, this makes +remailing more secure. + +<p> +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. <!--The same +holds true for port 25000.--> +<em>Please note that some hosts may enforce the use of TLS on the submission port.</em> + +<p> +<!--More recent stunnel versions can also do STARTTLS using <code>-starttls smtp</code>.--> +Stunnel can do STARTTLS using <code>-n smtp</code> or with </code>protocol = smtp</code> in your config file, depending on your version. + +<p> +See the <a href="http://www.bananasplit.info/mailtls.html">Encrypted Email +- TLS/SSL</a> on <a href="http://www.bananasplit.info/">banasplit</a> for a + howto on using stunnel on Windows with Quicksilver and JBN2. + +<p> +<table border=0 cellpadding=2 cellspacing=0> +<tr> <th>remailer</th><th>mail exchanger</th><th>priority</th><th>TLS</th><th>submission</th><th>smtps</th><th>2525</th><!--<th>25000</th>--><th>error/warning</th> </tr> +<TMPL_LOOP NAME="remailer"> + <tr><td colspan="9" bgcolor="#77e7ef"><strong><TMPL_VAR NAME="nick"></strong> <<TMPL_VAR NAME="address">></td></tr> + <TMPL_LOOP NAME="mx"> + <tr><td> </td> + <td class="monowidth"><TMPL_VAR NAME="mx"></td> + <td align="right"><TMPL_VAR NAME="pri"></td> + <TMPL_IF NAME="result-defined"> + <TMPL_IF NAME="result"> + <TMPL_IF NAME="tls"> + <td align="center" bgcolor="#baffcc"><!--YES - + --><a href="<TMPL_VAR NAME="cert_url">">YES</a><TMPL_IF NAME="tls-cipher"><br><small><TMPL_VAR NAME="tls-cipher"></small></TMPL_IF></td> + <TMPL_ELSE> + <td align="center" bgcolor="#ff7f7f">announced - + does not work</td> + </TMPL_IF> + <TMPL_ELSE> + <td align="center" bgcolor="#ffb7b7">no</td> + </TMPL_IF> + <TMPL_ELSE> + <td align="center">N/A</td> + </TMPL_IF> + <TMPL_IF NAME="submission"> + <td align="center" bgcolor="#daffec">yes</td> + <TMPL_ELSE> + <td align="center">no</td> + </TMPL_IF> + <TMPL_IF NAME="smtps"> + <td align="center" bgcolor="#daffec"><!--yes - + --><a href="<TMPL_VAR NAME="ssl_url">">yes</a><TMPL_IF NAME="ssl-cipher"><br><small><TMPL_VAR NAME="ssl-cipher"></small></TMPL_IF></td> + <TMPL_ELSE> + <td align="center">no</td> + </TMPL_IF> + <TMPL_IF NAME="2525"> + <td align="center" bgcolor="#daffec">yes</td> + <TMPL_ELSE> + <td align="center">no</td> + </TMPL_IF> + <!-- + <TMPL_IF NAME="25000"> + <td align="center" bgcolor="#daffec">yes</td> + <TMPL_ELSE> + <td align="center">no</td> + </TMPL_IF> + --> + <TMPL_IF NAME="warning"> + <td bgcolor="#faff7f"><TMPL_VAR NAME="warning"></td> + </TMPL_IF> + <TMPL_IF NAME="error"> + <TMPL_IF NAME="warning"> + </tr><tr><td colspan="8"> </td> + </TMPL_IF> + <td bgcolor="#ff7f7f"><TMPL_VAR NAME="error"></td> + </TMPL_IF> + </tr> + </TMPL_LOOP> + <tr><td colspan="6"></td></tr> +</TMPL_LOOP> +</table> + +<p> +Built at <TMPL_VAR NAME="now">. + +</td></tr> +<tr><td colspan=2 bgcolor="#ffffff"> </td></tr> +<tr><td colspan=2 bgcolor="#444444"><font color="#ffffff"><em><a href="mailto:web@palfrader.org"><font color="#bbbbff">web@palfrader.org</font></a></em> - + <a href="http://validator.w3.org/check/referer"><font color="#bbbbff">Valid HTML 4.01!</font></a></font></td></tr> +</table> +</body> +</html> |