1 package Newslash::Web::Controller::Login;
2 use Mojo::Base 'Mojolicious::Controller';
3 use Mojo::Util qw(b64_encode dumper);
4 use Mojo::JSON qw(to_json);
6 use DateTime::Format::MySQL;
11 my $nickname = $c->param('nickname') || '';
12 my $passwd = $c->param('passwd') || '';
13 my $users = $c->model('users');
14 my $rpath = $c->param('rpath') || '/';
16 # rpath must be absolute path.
17 if ($rpath !~ m/^\//) {
21 if (length($nickname) == 0) {
22 $c->render(msg => 'SRAD login', rpath => $rpath);
26 # TODO: if user already logged-in, force logout?
27 my $user = $users->authentification($nickname, $passwd);
29 if (!$c->user_auth->do_login($user, $c)) {
33 $c->redirect_to($rpath);
34 $c->event_que->emit("user", "login", $user->{uid});
38 $c->render(msg => 'Wrong username or password.', rpath => $rpath, nickname => $nickname);
43 my $session = $c->session('session');
44 my $user = $c->stash('user');
45 $c->user_auth->clear_session($user, $session->{token});
47 my $rpath = $c->param('rpath') || '/';
49 #TODO: $c->model('users')->expire_token($session->{token});
50 $c->session(expires => 1);
51 $c->event_que->emit("user", "logout", $c->stash('user')->{uid});
52 $c->redirect_to($rpath);
57 my $users = $c->model('users');
58 my $nickname = $c->param("nickname");
59 my $token = $c->param("token");
60 my $cancel = $c->param("cancel");
62 my $the_user = $users->select(nickname => $nickname);
63 my $prefs = { nickname => $nickname, token => $token };
65 # check if token is correct
66 if (!$the_user || !$token) {
67 $c->render(activation_succeed => 0, error => "INVALID_TOKEN");
74 $c->users->cancel_activation($the_user);
75 $c->render(activation_succeed => 0, error => "CANCEL_ACTIVATION");
79 # check if token is valid
80 my $rs = $c->users->activation($nickname, $token);
82 $c->render(activation_succeed => 0, error => $c->users->last_error);
88 $c->render(prefs => $prefs, activation_succeed => 1, error => "");
95 if ($c->req->method eq "GET") {
100 if ($c->req->method eq "POST") {
101 my $users = $c->model('users');
102 my $email = $c->param("email");
104 if (!$email || !Email::Valid->address($email)) {
105 $c->render(result => "INVALID_EMAIL", email => $email);
110 my $the_user = $users->select(realemail => $email);
112 $c->render(result => "NOT_FOUND", email => $email);
118 my $rs = $c->users->reset_password($the_user);
120 $c->render(result => "ERROR");
124 $c->render(result => "DONE", email => $email);
131 my $user = $c->stash('user');
133 if ($user->{is_login}) {
135 $c->redirect_to("/my/");
139 if ($c->req->method eq "GET") {
144 if ($c->req->method ne "POST") {
150 for my $k (qw(unickname email email2 allow_newsletter allow_headline)) {
151 $prefs->{$k} = $c->param($k);
155 if (!$prefs->{nickname}) {
157 $prefs->{id_error} = "BLANK_ID";
160 if (!$prefs->{email}) {
162 $prefs->{mail_error} = "BLANK_MAIL";
167 if ($prefs->{email} ne $prefs->{email2}) {
169 $prefs->{mail_error} = "MAIL_NOT_MATCH";
173 $c->render(prefs => $prefs);
179 #my $result = $c->model('users')->create_user($c->param('nickname'), $c->param('email'), {});
180 # TODO: set newsletter and headline settings
182 # die "database error!";
184 # if ($result->{error}) {
185 # $c->render(error => 1);
187 # $c->render("login/register_done", uid => $result->{uid}, password => $result->{password});