registration: more error handling

This commit is contained in:
Daniel Friesel 2019-03-05 18:19:14 +01:00
parent 32f3334b5c
commit 8d353fcf9d
2 changed files with 77 additions and 13 deletions

View file

@ -6,7 +6,7 @@ use Cache::File;
use DateTime;
use DBI;
use Encode qw(decode encode);
use Email::Sender::Simple qw(sendmail);
use Email::Sender::Simple qw(try_to_sendmail);
use Email::Simple;
use Geo::Distance;
use List::Util qw(first);
@ -504,11 +504,26 @@ helper 'get_user_id' => sub {
$user_name //= $self->get_user_name;
if ( not -e $dbname ) {
$self->app->dbh->begin_work;
$self->app->dbh->do(
qq{
create table schema_version (
version integer primary key
);
}
);
$self->app->dbh->do(
qq{
create table users (
id integer primary key,
name char(64) not null unique
name char(64) not null unique,
status int not null,
is_public bool not null,
email char(256),
password text,
registered_at datetime not null,
last_login datetime not null,
deletion_requested datetime
)
}
);
@ -540,6 +555,12 @@ helper 'get_user_id' => sub {
)
}
);
$self->app->dbh->do(
qq{
insert into schema_version (version) values (1);
}
);
$self->app->dbh->commit;
}
$self->app->get_userid_query->execute($user_name);
@ -987,6 +1008,11 @@ post '/x/register' => sub {
return;
}
if ( not length($email) ) {
$self->render( 'register', invalid => 'mail_empty' );
return;
}
if ( $user !~ m{ ^ [0-9a-zA-Z_-]+ $ }x ) {
$self->render( 'register', invalid => 'user_format' );
return;
@ -1038,8 +1064,13 @@ post '/x/register' => sub {
);
# TODO re-enable once remaining registration code is complete
#sendmail($reg_mail);
#$self->render( 'login', from => 'register' );
#my $success = try_to_sendmail($reg_mail);
#if ($success) {
# $self->render( 'login', from => 'register' );
#}
#else {
# $self->render( 'register', invalid => 'sendmail' );
#}
$self->render( 'register', invalid => 'not implemented yet' );
};

View file

@ -10,9 +10,40 @@
href="https://de.wikipedia.org/wiki/Cross-Site-Request-Forgery">CSRF</a>
handeln.</p>
% }
% elsif ($invalid eq 'credentials') {
<span class="card-title">Ungültige Logindaten</span>
<p>Falscher Account oder falsches Passwort.</p>
% elsif ($invalid eq 'user_empty') {
<span class="card-title">Leerer Nutzername</span>
<p>Bitte gib einen Nutzernamen an.</p>
% }
% elsif ($invalid eq 'mail_empty') {
<span class="card-title">Leere Mail-Adresse</span>
<p>Bitte gib eine E-Mail-Adresse an.</p>
% }
% elsif ($invalid eq 'user_format') {
<span class="card-title">Ungültiger Nutzername</span>
<p>Für den Nutzernamen erlaubte Zeichen sind
0-9, a-z, A-Z sowie Unterstrich (_) und Bindestrich (-).</p>
% }
% elsif ($invalid eq 'user_collision') {
<span class="card-title">Name bereits vergeben</span>
<p>Es gibt bereits einen Account unter diesem Namen.</p>
% }
% elsif ($invalid eq 'password_notequal') {
<span class="card-title">Passwort ungültig</span>
<p>Die angegebenen Passwörter sind nicht identisch.</p>
% }
% elsif ($invalid eq 'password_short') {
<span class="card-title">Passwort zu kurz</span>
<p>Das Passwort muss mindestens acht Zeichen lang sein.</p>
% }
% elsif ($invalid eq 'mail_blacklisted') {
<span class="card-title">Mailadresse nicht nutzbar</span>
<p>Mit der angegebenen E-Mail-Adresse können keine
travelynx-Accounts registriert werden.</p>
% }
% elsif ($invalid eq 'sendmail') {
<span class="card-title">Mailversand fehlgeschlagen</span>
<p>Die Bestätigungsmail konnte nicht verschickt werden.
Überprüfe bitte, ob die Adresse gültig ist.</p>
% }
% else {
<span class="card-title">Unbekannter Fehler</span>
@ -67,14 +98,16 @@
<p>
Die Mail-Adresse wird ausschließlich zur Bestätigung der Anmeldung
und für die "Passwort vergessen"-Funktionalität verwendet und nicht
an Dritte weitergegeben. Weitere erhobene Daten sowie deren Zweck
und Speicherfristen werden in der <a
href="/x/impressum">Datenschutzerklärung</a> beschrieben.
an Dritte weitergegeben. Die <a
href="/x/impressum">Datenschutzerklärung</a> beschreibt weitere
erhobene Daten sowie deren Zweck und Speicherfristen.
Accounts werden nach einem Jahr ohne Nutzung automatisch gelöscht.
</p>
<p>
Für jeden Account wird das Datum der letzten Anmeldung gespeichert.
Accounts, die mehr als ein Jahr (12 Monate) nicht genutzt wurden,
werden automatisch und unwiderruflich gelöscht.
Bitte beachten: Travelynx ist ein privat betriebenes Projekt ohne
Verfügbarkeitsgarantie. Unangekündigte Downtimes oder eine
kurzfristige Einstellung dieser Seite sind nicht vorgesehen, aber
möglich.
</p>
</div>
</div>