Improved user management routes
Change-Id: I3310e03a96565f6c02fe48710c1ef4e48e6fe115
diff --git a/lib/Kalamar.pm b/lib/Kalamar.pm
index 9623a81..12b5ded 100644
--- a/lib/Kalamar.pm
+++ b/lib/Kalamar.pm
@@ -87,7 +87,8 @@
'Search', # Abstract Search framework
'CHI', # Global caching mechanism
'TagHelpers::MailToChiffre', # Obfuscate email addresses
- 'KalamarHelpers' # Specific Helpers for Kalamar
+ 'KalamarHelpers', # Specific Helpers for Kalamar
+ 'KalamarUser' # Specific Helpers for Kalamar
) {
$self->plugin($_);
};
@@ -109,6 +110,7 @@
$r->get('/')->to('search#query')->name('index');
# Collection route
+ # TODO: Probably rename to /corpus
$r->get('/collection')->to('Search#collections')->name('collections');
$r->get('/collection/:id')->to('Search#collection')->name('collection');
@@ -128,8 +130,12 @@
my $match = $text->get('/:match_id');
$match->to('search#match_info')->name('match');
- $r->post('/login')->to('User#login');
- $r->post('/logout')->to('User#logout');
+ # User Management
+ $r->any('/user')->to(controller => 'User');
+ $r->post('/login')->to(action => 'login')->name('login');
+ $r->get('/logout')->to(action => 'logout')->name('logout');
+ $r->any('/register')->to(action => 'register')->name('register');
+ $r->any('/forgotten')->to(action => 'pwdforgotten')->name('pwdforgotten');
# Default user is called 'korap'
# $r->route('/user/:user/:collection')
diff --git a/lib/Kalamar/Controller/User.pm b/lib/Kalamar/Controller/User.pm
index 691d648..f59f932 100644
--- a/lib/Kalamar/Controller/User.pm
+++ b/lib/Kalamar/Controller/User.pm
@@ -3,11 +3,34 @@
sub login {
my $c = shift;
+ my $v = $c->validator;
+ $v->required('handle_or_email');
+ $v->required('pwd');
+
+ my $handle = $v->param('handle_or_email');
+ my $pwd = $v->param('pwd');
+
+ $c->user->login($handle, $pwd);
+
+ return $c->redirect_to;
+};
+
+sub logout {
+ shift->user->logout;
+};
+
+sub register {
+ my $c = shift;
$c->render(json => {
- response => 'logged in'
+ response => 'register'
});
};
-sub logout {};
+sub pwdforgotten {
+ my $c = shift;
+ $c->render(json => {
+ response => 'pwdforgotten'
+ });
+};
1;
diff --git a/lib/Kalamar/Plugin/KalamarHelpers.pm b/lib/Kalamar/Plugin/KalamarHelpers.pm
index 97e3d55..8ae6c1e 100644
--- a/lib/Kalamar/Plugin/KalamarHelpers.pm
+++ b/lib/Kalamar/Plugin/KalamarHelpers.pm
@@ -106,7 +106,7 @@
my $scope = shift;
# Create unordered list
- my $html = "<ul>\n";
+ my $html = '<ul class="nav">'."\n";
# Embed all link tags
foreach (@$items) {
diff --git a/lib/Kalamar/Plugin/KalamarUser.pm b/lib/Kalamar/Plugin/KalamarUser.pm
index 209b8cb..8d12d30 100644
--- a/lib/Kalamar/Plugin/KalamarUser.pm
+++ b/lib/Kalamar/Plugin/KalamarUser.pm
@@ -54,6 +54,7 @@
# Login successful
if (my $res = $tx->success) {
+
my $jwt = $res->json;
my $auth = $jwt->{token_type} . ' ' . $jwt->{token};
@@ -92,6 +93,7 @@
my $c = shift;
my $param = shift;
+ # 'info' is useless!
return unless $param =~ m/^details|settings$/;
# The user may be logged in
@@ -110,14 +112,16 @@
my $tx = $plugin->build_authorized_tx($auth, 'GET', 'user/' . $param);
$tx = $plugin->ua->start($tx);
+
unless ($value = $tx->success) {
-# warn $tx->code;
return;
}
# else {
# warn $c->dumper($value->json);
# };
- $value = $value->json;
+ if ($value) {
+ $value = $value->json;
+ };
$chi->set($user . '_' . $param => $value);
};
@@ -127,6 +131,42 @@
}
);
+ $mojo->helper(
+ 'user.set' => sub {
+ my $c = shift;
+ my $param = shift;
+
+ # 'info' is useless!
+ return unless $param =~ m/^details|settings$/;
+
+ my $json_obj = shift;
+
+ # The user may be logged in
+ my $auth = ($c->stash('auth') || $c->session('auth')) or return;
+
+ # Get namespaced cache
+ my $chi = $c->chi('user');
+
+ # Get user and check, if the user is real
+ my $user = $chi->get($auth);
+
+ # Build a JSON transaction object
+ my $tx = $plugin->build_authorized_tx(
+ $auth, 'POST', 'user/' . $param, json => $json_obj
+ );
+
+ # Start
+ $tx = $plugin->ua->start($tx);
+
+ my $res = $tx->success or return;
+
+ # Kill all caches!!
+ $chi->remove($user . '_' . $param);
+
+ # Return value
+ return $res->json;
+ }
+ );
# Logout
$mojo->helper(
@@ -162,6 +202,7 @@
my $url = Mojo::URL->new($plugin->api)->path($path);
+
$header->{Authorization} = $auth;
return $ua->build_tx($method, $url => $header => @values);