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 DateTime;
use DBI; use DBI;
use Encode qw(decode encode); use Encode qw(decode encode);
use Email::Sender::Simple qw(sendmail); use Email::Sender::Simple qw(try_to_sendmail);
use Email::Simple; use Email::Simple;
use Geo::Distance; use Geo::Distance;
use List::Util qw(first); use List::Util qw(first);
@ -504,11 +504,26 @@ helper 'get_user_id' => sub {
$user_name //= $self->get_user_name; $user_name //= $self->get_user_name;
if ( not -e $dbname ) { 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( $self->app->dbh->do(
qq{ qq{
create table users ( create table users (
id integer primary key, 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); $self->app->get_userid_query->execute($user_name);
@ -987,6 +1008,11 @@ post '/x/register' => sub {
return; return;
} }
if ( not length($email) ) {
$self->render( 'register', invalid => 'mail_empty' );
return;
}
if ( $user !~ m{ ^ [0-9a-zA-Z_-]+ $ }x ) { if ( $user !~ m{ ^ [0-9a-zA-Z_-]+ $ }x ) {
$self->render( 'register', invalid => 'user_format' ); $self->render( 'register', invalid => 'user_format' );
return; return;
@ -1038,8 +1064,13 @@ post '/x/register' => sub {
); );
# TODO re-enable once remaining registration code is complete # TODO re-enable once remaining registration code is complete
#sendmail($reg_mail); #my $success = try_to_sendmail($reg_mail);
#$self->render( 'login', from => 'register' ); #if ($success) {
# $self->render( 'login', from => 'register' );
#}
#else {
# $self->render( 'register', invalid => 'sendmail' );
#}
$self->render( 'register', invalid => 'not implemented yet' ); $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> href="https://de.wikipedia.org/wiki/Cross-Site-Request-Forgery">CSRF</a>
handeln.</p> handeln.</p>
% } % }
% elsif ($invalid eq 'credentials') { % elsif ($invalid eq 'user_empty') {
<span class="card-title">Ungültige Logindaten</span> <span class="card-title">Leerer Nutzername</span>
<p>Falscher Account oder falsches Passwort.</p> <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 { % else {
<span class="card-title">Unbekannter Fehler</span> <span class="card-title">Unbekannter Fehler</span>
@ -67,14 +98,16 @@
<p> <p>
Die Mail-Adresse wird ausschließlich zur Bestätigung der Anmeldung Die Mail-Adresse wird ausschließlich zur Bestätigung der Anmeldung
und für die "Passwort vergessen"-Funktionalität verwendet und nicht und für die "Passwort vergessen"-Funktionalität verwendet und nicht
an Dritte weitergegeben. Weitere erhobene Daten sowie deren Zweck an Dritte weitergegeben. Die <a
und Speicherfristen werden in der <a href="/x/impressum">Datenschutzerklärung</a> beschreibt weitere
href="/x/impressum">Datenschutzerklärung</a> beschrieben. erhobene Daten sowie deren Zweck und Speicherfristen.
Accounts werden nach einem Jahr ohne Nutzung automatisch gelöscht.
</p> </p>
<p> <p>
Für jeden Account wird das Datum der letzten Anmeldung gespeichert. Bitte beachten: Travelynx ist ein privat betriebenes Projekt ohne
Accounts, die mehr als ein Jahr (12 Monate) nicht genutzt wurden, Verfügbarkeitsgarantie. Unangekündigte Downtimes oder eine
werden automatisch und unwiderruflich gelöscht. kurzfristige Einstellung dieser Seite sind nicht vorgesehen, aber
möglich.
</p> </p>
</div> </div>
</div> </div>