/
User.pm
78 lines (70 loc) · 2.6 KB
/
User.pm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
package Wing::Web::Admin::User;
use Dancer ':syntax';
use Wing::Perl;
use Ouch;
use Wing;
use Wing::Web;
get '/admin/users' => sub {
my $current_user = get_admin_by_session_id();
template 'admin/users', { current_user => describe($current_user, current_user => $current_user) };
};
post '/admin/user' => sub {
my $current_user = get_admin_by_session_id();
my $object = site_db()->resultset('User')->new({});
my %params = params;
eval {
$object->verify_creation_params(\%params, $current_user);
$object->verify_posted_params(\%params, $current_user);
};
if ($@) {
return redirect '/admin/users?error_message='.bleep;
}
else {
$object->insert;
return redirect '/admin/users?success_message=Created successfully.';
}
};
get '/admin/user/:id' => sub {
my $current_user = get_admin_by_session_id();
template 'admin/user', { current_user => describe($current_user, current_user => $current_user), page_title => 'Edit User', user => describe(fetch_object('User'), current_user => $current_user, include_related_objects => 1, include_options => 1, include_private => 1, i nclude_relationships => 1)};
};
post '/admin/user/:id' => sub {
my $current_user = get_admin_by_session_id();
my $object = fetch_object('User');
my %params = params;
eval {
$object->verify_creation_params(\%params, $current_user);
$object->verify_posted_params(\%params, $current_user);
if (params->{password1}) {
if (params->{password1} eq params->{password2}) {
$object->encrypt_and_set_password(params->{password1});
}
else {
ouch 442, 'The passwords you typed do not match.', 'password';
}
}
};
if ($@) {
template 'admin/user', {
error_message => bleep,
current_user => $current_user,
user => describe(fetch_object('User'), current_user => $current_user),
};
}
else {
$object->update;
return redirect '/admin/users?success_message=Updated successfully.';
}
};
post '/admin/user/:id/become' => sub {
my $current_user = get_admin_by_session_id();
my $object = fetch_object('User');
$current_user->current_session->end;
my $session = $object->start_session({ api_key_id => Wing->config->get('default_api_key'), ip_address => request->remote_address });
set_cookie session_id => $session->id,
expires => '+5y',
http_only => 0,
path => '/';
return redirect '/account';
};
true;