aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md3
-rwxr-xr-xarfnet_logo.pngbin0 -> 78409 bytes
-rw-r--r--example.html33
-rw-r--r--index.php36
-rw-r--r--mlmmj.php122
-rw-r--r--style.css82
-rw-r--r--subscribe.php55
-rwxr-xr-xtile1.jpgbin0 -> 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
new file mode 100755
index 0000000..82adbef
--- /dev/null
+++ b/arfnet_logo.png
Binary files differ
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
new file mode 100755
index 0000000..2e993e3
--- /dev/null
+++ b/tile1.jpg
Binary files differ