summaryrefslogtreecommitdiff
path: root/web/account-create.php
diff options
context:
space:
mode:
Diffstat (limited to 'web/account-create.php')
-rw-r--r--web/account-create.php106
1 files changed, 106 insertions, 0 deletions
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:
+?>