Implemented the validation process.
This commit is contained in:
parent
6ad4bcf303
commit
7945584655
10 changed files with 178 additions and 39 deletions
115
index.php
115
index.php
|
@ -1,48 +1,59 @@
|
||||||
<?php
|
<?php
|
||||||
require 'vendor/autoload.php';
|
require 'vendor/autoload.php';
|
||||||
require_once 'is_email.php';
|
require_once 'is_email.php';
|
||||||
|
require_once 'config.php';
|
||||||
|
|
||||||
|
use Silex\Application\TranslationTrait;
|
||||||
use Symfony\Component\HttpFoundation\Request;
|
use Symfony\Component\HttpFoundation\Request;
|
||||||
|
use Guzzle\Http\Client;
|
||||||
|
|
||||||
$app = new Silex\Application();
|
use Silex\Application;
|
||||||
|
|
||||||
|
class RegistrationApplication extends Application {
|
||||||
|
use Application\TranslationTrait;
|
||||||
|
use Application\TwigTrait;
|
||||||
|
}
|
||||||
|
|
||||||
|
$app = new RegistrationApplication();
|
||||||
|
|
||||||
$app['debug'] = true;
|
$app['debug'] = true;
|
||||||
|
|
||||||
$app->register(new Silex\Provider\TwigServiceProvider(), array(
|
$app->register(new Silex\Provider\TwigServiceProvider(), array(
|
||||||
'twig.path' => __DIR__.'/templates',
|
'twig.path' => __DIR__ . '/templates',
|
||||||
));
|
));
|
||||||
|
|
||||||
$app->register(new Silex\Provider\TranslationServiceProvider(), array(
|
$app->register(new Silex\Provider\TranslationServiceProvider(), array(
|
||||||
'locale_fallback' => 'de',
|
'locale_fallback' => 'de',
|
||||||
));
|
));
|
||||||
|
|
||||||
$app['translator'] = $app->share($app->extend('translator', function($translator, $app) {
|
$app['translator'] = $app->share($app->extend('translator', function ($translator, $app) {
|
||||||
$translator->addResource('xliff', __DIR__.'/locales/de.xml', 'de');
|
$translator->addResource('xliff', __DIR__ . '/locales/de.xml', 'de');
|
||||||
$translator->addResource('xliff', __DIR__.'/locales/en.xml', 'en');
|
$translator->addResource('xliff', __DIR__ . '/locales/en.xml', 'en');
|
||||||
|
|
||||||
return $translator;
|
return $translator;
|
||||||
}));
|
}));
|
||||||
|
|
||||||
$app->before(function(Request $request) use ($app){
|
$app->before(function (Request $request) use ($app) {
|
||||||
$lang = $request->getPreferredLanguage(array('en', 'de'));
|
$lang = $request->getPreferredLanguage(array('en', 'de'));
|
||||||
$app['translator']->setLocale($lang);
|
$app['translator']->setLocale($lang);
|
||||||
});
|
});
|
||||||
|
|
||||||
$app->get('/', function (Request $request) use ($app) {
|
$app->get('/', function (Request $request) use ($app, $config) {
|
||||||
return $app['twig']->render('registration_form.twig', array(
|
return $app['twig']->render('registration_form.twig', array(
|
||||||
|
'hosts' => $config['hosts'],
|
||||||
'errors' => array(),
|
'errors' => array(),
|
||||||
));
|
));
|
||||||
});
|
});
|
||||||
|
|
||||||
$app->post('/', function (Request $request) use ($app) {
|
$app->post('/', function (Request $request) use ($app, $config) {
|
||||||
$errors = array();
|
$errors = array();
|
||||||
|
|
||||||
// collect the params
|
// collect the params
|
||||||
$user = $request->get('username',null);
|
$user = $request->get('username', null);
|
||||||
$host = $request->get('host',null);
|
$host = $request->get('host', null);
|
||||||
$email = $request->get('mail',null);
|
$email = $request->get('mail', null);
|
||||||
$password = $request->get('password',null);
|
$password = $request->get('password', null);
|
||||||
$password_repeat = $request->get('password_repeat',null);
|
$password_repeat = $request->get('password_repeat', null);
|
||||||
|
|
||||||
// check for errors
|
// check for errors
|
||||||
if (!$user) {
|
if (!$user) {
|
||||||
|
@ -69,13 +80,87 @@ $app->post('/', function (Request $request) use ($app) {
|
||||||
$errors[] = $app->trans('Bitte gebe in den Feldern Passwort und Passwortwiederholung identische Werte ein.');
|
$errors[] = $app->trans('Bitte gebe in den Feldern Passwort und Passwortwiederholung identische Werte ein.');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (count($errors) == 0) {
|
||||||
|
$client = new Client($config['prosody']['http_base']);
|
||||||
|
|
||||||
|
$request = $client
|
||||||
|
->get($config['prosody']['url_prefix'] . 'user/' . $user)
|
||||||
|
->setAuth($config['prosody']['user'], $config['prosody']['password']);
|
||||||
|
|
||||||
|
$response = $request->send();
|
||||||
|
|
||||||
|
if ($response->getStatusCode() != 404) {
|
||||||
|
$errors[] = $app->trans('Der Benutzername ist bereits vergeben.');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (count($errors) == 0) {
|
||||||
|
|
||||||
|
$client = new Client($config['prosody']['http_base']);
|
||||||
|
|
||||||
|
$data = json_encode(array(
|
||||||
|
'username' => $user,
|
||||||
|
'password' => $password,
|
||||||
|
'server' => $host,
|
||||||
|
'mail' => $email,
|
||||||
|
));
|
||||||
|
|
||||||
|
$token = sha1($data);
|
||||||
|
|
||||||
|
if (strlen($token) > 0) {
|
||||||
|
file_put_contents('validations/' . $token, $data);
|
||||||
|
$message = Swift_Message::newInstance()
|
||||||
|
->setSubject($app->trans('Registrierung auf %server%', array('%server%' => $host)))
|
||||||
|
->setFrom($config['from'])
|
||||||
|
->setTo($email)
|
||||||
|
->setBody($app['twig']->render(sprintf('email.%s.twig', $app['translator']->getLocale()), array('auth_token' => $token, 'url' => $config['url'])));
|
||||||
|
|
||||||
|
$transport = Swift_SendmailTransport::newInstance('/usr/sbin/sendmail -bs');
|
||||||
|
|
||||||
|
$mailer = Swift_Mailer::newInstance($transport);
|
||||||
|
|
||||||
|
$result = $mailer->send($message);
|
||||||
|
|
||||||
|
if (!$result) {
|
||||||
|
$errors[] = $app->trans('Beim Mailversand ist ein Fehler aufgetreten.');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (count($errors) > 0) {
|
if (count($errors) > 0) {
|
||||||
return $app['twig']->render('registration_form.twig', array(
|
return $app['twig']->render('registration_form.twig', array(
|
||||||
|
'hosts' => $config['hosts'],
|
||||||
'errors' => $errors,
|
'errors' => $errors,
|
||||||
));
|
));
|
||||||
} else {
|
} else {
|
||||||
return $app['twig']->render('success.twig', array(
|
return $app['twig']->render('success.twig', array());
|
||||||
));
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$app->get('/{verifycode}', function ($verifycode) use ($app, $config) {
|
||||||
|
if (file_exists('templates/' . $verifycode)) {
|
||||||
|
$data = json_decode(file_get_contents('templates/' . $verifycode));
|
||||||
|
|
||||||
|
$jid = $data['user'] . '@' . $data['server'];
|
||||||
|
|
||||||
|
$client = new Client($config['prosody']['http_base']);
|
||||||
|
|
||||||
|
$request = $client
|
||||||
|
->post($config['prosody']['url_prefix'] . 'user/' . $data->user, array(
|
||||||
|
'Host' => $data->server,
|
||||||
|
), json_encode(array('password' => $data->password)))
|
||||||
|
->setAuth($config['prosody']['user'], $config['prosody']['password']);
|
||||||
|
|
||||||
|
$response = $request->send();
|
||||||
|
|
||||||
|
if ($response->getStatusCode() == 201) {
|
||||||
|
return $app->render('welcome.twig', array('jid' => $jid));
|
||||||
|
} else {
|
||||||
|
return $app->render('error.twig', array('url' => $config['url']));
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
return $app->render('tokennotfound.twig');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
9
templates/email.de.twig
Normal file
9
templates/email.de.twig
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
Hallo Benutzer,
|
||||||
|
|
||||||
|
bitte besuche folgende URL um dein Konto zu aktivieren:
|
||||||
|
|
||||||
|
https://bandenkrieg.hacked.jp/~tim/xmpp/{{ auth_token }}
|
||||||
|
|
||||||
|
mit freundlichen Grüßen
|
||||||
|
|
||||||
|
das Registrierungsformular
|
9
templates/email.en.twig
Normal file
9
templates/email.en.twig
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
Hello user,
|
||||||
|
|
||||||
|
please visit the following url to activate your account:
|
||||||
|
|
||||||
|
https://bandenkrieg.hacked.jp/~tim/xmpp/{{ auth_token }}
|
||||||
|
|
||||||
|
with kind regards
|
||||||
|
|
||||||
|
the registration form
|
5
templates/error.twig
Normal file
5
templates/error.twig
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
{% extends "layout.twig" %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<p>Bei der Registrierung ist etwas schief gelaufen. Bitte probiere es <a href="{{ url }}">noch einmal</a>.</p>
|
||||||
|
{% endblock %}
|
21
templates/layout.twig
Normal file
21
templates/layout.twig
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<meta name="description" content="">
|
||||||
|
<meta name="author" content="">
|
||||||
|
|
||||||
|
<title>{% trans %}Ein XMPP-Konto registrieren{% endtrans %}</title>
|
||||||
|
|
||||||
|
<!-- Bootstrap core CSS -->
|
||||||
|
<link href="css/bootstrap.min.css" rel="stylesheet">
|
||||||
|
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="container">
|
||||||
|
{% block content %}{% endblock %}
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -1,20 +1,6 @@
|
||||||
<!DOCTYPE html>
|
{% extends "layout.twig" %}
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
||||||
<meta name="description" content="">
|
|
||||||
<meta name="author" content="">
|
|
||||||
|
|
||||||
<title>{% trans %}Ein XMPP-Konto registrieren{% endtrans %}</title>
|
{% block content %}
|
||||||
|
|
||||||
<!-- Bootstrap core CSS -->
|
|
||||||
<link href="css/bootstrap.min.css" rel="stylesheet">
|
|
||||||
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
<div class="container">
|
|
||||||
<form class="form-horizontal" method="post">
|
<form class="form-horizontal" method="post">
|
||||||
<fieldset>
|
<fieldset>
|
||||||
|
|
||||||
|
@ -47,7 +33,9 @@
|
||||||
<div class="controls">
|
<div class="controls">
|
||||||
<select id="host" name="host" class="input-xlarge" required="">
|
<select id="host" name="host" class="input-xlarge" required="">
|
||||||
<option></option>
|
<option></option>
|
||||||
<option>krautspace.de</option>
|
{% for host in hosts %}
|
||||||
|
<option>{{ host }}</option>
|
||||||
|
{% endfor %}
|
||||||
</select>
|
</select>
|
||||||
<p class="help-block">{% trans %}Wähle hier einen Servernamen aus. Deine XMPP-ID ist dann <span class="xmpp-id-preview">Benutzername@Servername</span>{% endtrans %}</p>
|
<p class="help-block">{% trans %}Wähle hier einen Servernamen aus. Deine XMPP-ID ist dann <span class="xmpp-id-preview">Benutzername@Servername</span>{% endtrans %}</p>
|
||||||
</div>
|
</div>
|
||||||
|
@ -91,6 +79,4 @@
|
||||||
|
|
||||||
</fieldset>
|
</fieldset>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
{% endblock %}
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
|
|
14
templates/success.twig
Normal file
14
templates/success.twig
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
{% extends "layout.twig" %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<form class="form-horizontal" method="post">
|
||||||
|
<fieldset>
|
||||||
|
|
||||||
|
<!-- Form Name -->
|
||||||
|
<legend>{% trans %}Ein XMPP-Konto registrieren{% endtrans %}</legend>
|
||||||
|
|
||||||
|
<p>{% trans %}Vielen Dank für deine Registrierung. Dir wurde eine E-Mail mit einem aktivierungs Link zugeschickt.{% endtrans %}</p>
|
||||||
|
|
||||||
|
</fieldset>
|
||||||
|
</form>
|
||||||
|
{% endblock %}
|
5
templates/tokennotfound.twig
Normal file
5
templates/tokennotfound.twig
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
{% extends "layout.twig" %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<p>{% trans %}Der angegebene Token wurde nicht gefunden{% endtrans %}</p>
|
||||||
|
{% endblock %}
|
5
templates/welcome.twig
Normal file
5
templates/welcome.twig
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
{% extends "layout.twig" %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<p>{% trans %}Herzlich Willkommen {{ jid }}! {% endtrans %}</p>
|
||||||
|
{% endblock %}
|
0
validations/.keep
Normal file
0
validations/.keep
Normal file
Reference in a new issue