diff options
-rw-r--r-- | README.md | 3 | ||||
-rwxr-xr-x | arfnet_logo.png | bin | 0 -> 78409 bytes | |||
-rw-r--r-- | example.html | 33 | ||||
-rw-r--r-- | index.php | 36 | ||||
-rw-r--r-- | mlmmj.php | 122 | ||||
-rw-r--r-- | style.css | 82 | ||||
-rw-r--r-- | subscribe.php | 55 | ||||
-rwxr-xr-x | tile1.jpg | bin | 0 -> 1500 bytes |
8 files changed, 331 insertions, 0 deletions
diff --git a/README.md b/README.md new file mode 100644 index 0000000..eac5110 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# arfnet2-lists +ARFNET mailing lists index + diff --git a/arfnet_logo.png b/arfnet_logo.png Binary files differnew file mode 100755 index 0000000..82adbef --- /dev/null +++ b/arfnet_logo.png diff --git a/example.html b/example.html new file mode 100644 index 0000000..f969d57 --- /dev/null +++ b/example.html @@ -0,0 +1,33 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<html> +<head> +<title>mlmmj-webinterface</title> +</head> +<body> + +<p> +<h1>subscribe</h1> +<form action="mlmmj.php" method="post"> +<input name="mailinglist" type="hidden" value="mlmmj-test@domain.tld"> +<input name="job" type="hidden" value="subscribe"> +<input name="redirect_failure" type="hidden" value="http://www.failure.com/"> +<input name="redirect_success" type="hidden" value="http://www.success.com/"> +<input name="email" type="text" size="30" maxlength="254"><br> +<input type="submit" value="Subscribe"> +</form> +</p> + +<p> +<h1>unsubscribe</h1> +<form action="mlmmj.php" method="post"> +<input name="mailinglist" type="hidden" value="mlmmj-test@domain.tld"> +<input name="job" type="hidden" value="unsubscribe"> +<input name="redirect_failure" type="hidden" value="http://www.failure.com/"> +<input name="redirect_success" type="hidden" value="http://www.success.com/"> +<input name="email" type="text" size="30" maxlength="254"><br> +<input type="submit" value="Unsubscribe"> +</form> +</p> + +</body> +</html> diff --git a/index.php b/index.php new file mode 100644 index 0000000..cc0b1bd --- /dev/null +++ b/index.php @@ -0,0 +1,36 @@ +<?php + +// Get lists +$lists = scandir("/var/spool/mlmmj/"); +$lists = array_diff($lists, array(".", "..")); + +?> + +<!doctype html> +<html> + <head> + <meta charset="UTF-8"> + <link rel="stylesheet" type="text/css" href="/style.css"> + <title>ARFNET Lists</title> + </head> + <body> + <header><a href="https://arf20.com/"> + <img src="arfnet_logo.png" width="64"><span class="title"><strong>ARFNET</strong></span> + </a></header> + <hr> + <main> + <div class="row"> + <div class="col8"> + <h2 class="center">ARFNET Mailing Lists</h2> + <ul> + <?php + foreach ($lists as $list) { + echo "<li>".$list." <a href=\"subscribe.php?list=".$list."\">subscribe</a> <a href=\"/archive/".$list."\">archive</a></li>\n"; + } + ?> + </ul> + </div> + </div> + </main> + </body> +</html> diff --git a/mlmmj.php b/mlmmj.php new file mode 100644 index 0000000..c976372 --- /dev/null +++ b/mlmmj.php @@ -0,0 +1,122 @@ +<?php + +/* Copyright (C) 2004 Christoph Thiel <ct at kki dot org> + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ + + +// error_reporting(E_ALL); + +class mlmmj +{ + var $email; + var $mailinglist; + var $job; + var $redirect_success; + var $redirect_failure; + + var $delimiter; + var $errors; + + function is_email($string="") { + return eregi("^[a-z0-9\._-]+".chr(64)."+[a-z0-9\._-]+\.+[a-z]{2,4}$", $string); + } + + function error($string="") { + $this->errors = TRUE; + die($string); + } + + function mlmmj() { + // set mandatory vars... + $this->errors = FALSE; + $this->delimiter = "+"; + + if (!isset($_POST["email"]) && + !isset($_POST["mailinglist"]) && + !isset($_POST["job"]) && + !isset($_POST["redirect_success"]) && + !isset($_POST["redirect_failure"])) + { + $this->errors = TRUE; + if(isset($_POST["redirect_failure"])) { + header("Location: ".$_POST["redirect_failure"]); + exit; + } + else + die("An error occurred. Please check contrib/web/php-user/README for details."); + } + else { + if ($this->is_email($_POST["email"])) + $this->email = $_POST["email"]; + else + $this->error("ERROR: email is not a valid email address."); + + if ($this->is_email($_POST["mailinglist"])) + $this->mailinglist = $_POST["mailinglist"]; + else + $this->error("ERROR: mailinglist is not a valid email address."); + + $this->job = $_POST["job"]; + + if (!(($this->job == "subscribe") OR ($this->job == "unsubscribe"))) { + $this->error("ERROR: job unknown."); + } + + $this->redirect_failure = $_POST["redirect_failure"]; + $this->redirect_success = $_POST["redirect_success"]; + + } + + // now we should try to go ahead and {sub,unsub}scribe... ;) + + if(!$this->errors) { + // @ ^= char(64) + + $to = str_replace(chr(64),$this->delimiter.$this->job.chr(64),$this->mailinglist); + $subject = $this->job." to ".$this->mailinglist; + $body = $this->job; + $addheader = ""; + $addheader .= "Received: from ". $_SERVER["REMOTE_ADDR"] + ." by ". $_SERVER["SERVER_NAME"]. " with HTTP;\r\n\t".date("r")."\n"; + $addheader .= "X-Originating-IP: ".$_SERVER["REMOTE_ADDR"]."\n"; + $addheader .= "X-Mailer: mlmmj-webinterface powered by PHP/". phpversion() ."\n"; + $addheader .= "From: ".$this->email."\n"; + $addheader .= "Cc: ".$this->email."\n"; + + if(!mail($to, $subject, $body, $addheader)) + $this->error($this->job." failed."); + } + + if($this->errors) { + //header("Location: ".$this->redirect_failure); + //exit; + die($this->errors); + } else { + header("Location: ".$this->redirect_success); + exit; + } + } +} + + +$mailinglist = new mlmmj; + +?> diff --git a/style.css b/style.css new file mode 100644 index 0000000..6bd7bd7 --- /dev/null +++ b/style.css @@ -0,0 +1,82 @@ +header *{ + display: inline-block; + vertical-align: middle; +} + +.title { + font-size: 36px; + vertical-align: middle; +} + +body { + background-image: url("tile1.jpg"); + background-repeat: repeat; +} + +.fst { + font-size: 150%; +} + +.sec { + margin-left: 20px; + font-size: 150%; +} + +.col { + float: left; +} + +.col5 { + float: left; + width: 50%; +} + +.col8 { + float: left; + width: 80%; +} + +.col2 { + float: left; + width: 20%; +} + +.col3 { + float: left; + width: 30%; +} + +.row:after { + content: ""; + display: table; + clear: both; +} + +.img { + width: 60%; +} + +.wrapper{ + width: 350px; + padding: 20px; + border-style: double; + margin: auto; + margin-top: 200px; +} + +.form { + width: fit-content; + padding: 20px; + border-style: double; +} + +.border { + width: fit-content; + padding: 20px; + border: 1px solid black; +} + +table, th, td { + border: 1px solid black; +} + diff --git a/subscribe.php b/subscribe.php new file mode 100644 index 0000000..d944530 --- /dev/null +++ b/subscribe.php @@ -0,0 +1,55 @@ +<?php + +if (!isset($_GET["list"]) || empty($_GET["list"])) { + die("List required"); +} + +$list = $_GET["list"]; + +$domain = "arf20.com" +?> + +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="UTF-8"> + <title>ARFNET Lists</title> + <link rel="stylesheet" type="text/css" href="/style.css"> + </head> + <body> + <header><a href="https://arf20.com/"> + <img src="arfnet_logo.png" width="64"><span class="title"><strong>ARFNET</strong></span> + </a></header> + <hr> + <main> + <h2><a href="/">Back</a></h2> + <div class="wrapper"> + <h1><?php echo $list; ?></h1> + + <h2>Subscription</h2> + <form action="mlmmj.php" method="post"> + <label>Email</label><br> + <input type="email" name="email"> + <span class="help-block"><?php echo $email_err; ?></span><br> + <input name="mailinglist" type="hidden" value="<?php echo $list."@".$domain; ?>"> + <input name="job" type="hidden" value="subscribe"> + <input name="redirect_failure" type="hidden" value="/error.html"> + <input name="redirect_success" type="hidden" value="/"> + <br><input type="submit" value="Subscribe"> + </form> + + <h2>Unsubscription</h2> + <form action="mlmmj.php" method="post"> + <label>Email</label><br> + <input type="email" name="email"> + <span class="help-block"><?php echo $email_err; ?></span><br> + <input name="mailinglist" type="hidden" value="<?php echo $list."@".$domain; ?>"> + <input name="job" type="hidden" value="unsubscribe"> + <input name="redirect_failure" type="hidden" value="/error.html"> + <input name="redirect_success" type="hidden" value="/"> + <br><input type="submit" value="Subscribe"> + </form> + </div> + </main> + </body> +</html> diff --git a/tile1.jpg b/tile1.jpg Binary files differnew file mode 100755 index 0000000..2e993e3 --- /dev/null +++ b/tile1.jpg |