-
Notifications
You must be signed in to change notification settings - Fork 0
/
Lystyng.pm
122 lines (101 loc) · 2.31 KB
/
Lystyng.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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
=head1 NAME
Lystyng - Code for listing things
=cut
package Lystyng;
use Dancer ':syntax';
our $VERSION = '0.0.1';
use Dancer::Plugin::DBIC qw[schema resultset];
hook before => sub {
defined $ENV{LYSTYNG_DB_USER} && defined $ENV{LYSTYNG_DB_PASS}
or die 'Must set LYSTYNG_DB_USER and LYSTYNG_DB_PASS';
my $cfg = setting('plugins');
$cfg->{DBIC}{default}{user} = $ENV{LYSTYNG_DB_USER};
$cfg->{DBIC}{default}{pass} = $ENV{LYSTYNG_DB_PASS};
};
get '/' => sub {
template 'index';
};
get '/user' => sub {
my @users = resultset('User')->all;
template 'users', {
users => \@users,
};
};
get '/user/:username' => sub {
if (my $user = resultset('User')->find({
username => params->{username},
}, {
prefetch => 'lists'
})) {
template 'user', {
user => $user,
};
} else {
send_error 'User not found', 404;
}
};
get '/user/:username/list/:list' => sub {
my $user;
unless ($user = resultset('User')->find({
username => params->{username},
})) {
send_error 'User not found', 404;
};
if (my $list = $user->lists->find({
slug => params->{list},
})) {
template 'list', {
list => $list,
};
} else {
send_error 'List not found', 404;
};
};
get '/register' => sub {
template 'register';
};
post '/register' => sub {
my $user_rs = resultset('User');
my @errors;
if (param('password') ne param('password2')) {
push @errors, 'Your passwords do not match.';
}
my ($user) = $user_rs->find({ username => param('username') });
if ($user) {
push @errors, 'Username ' . $user->username . ' is already in use.';
};
if (@errors) {
template 'register', {
errors => \@errors,
};
} else {
$user = $user_rs->create({
username => param('username'),
name => param('name'),
email => param('email'),
password => param('password'),
});
session user => $user;
redirect '/';
}
};
get '/login' => sub {
template 'login';
};
post '/login' => sub {
my $user_rs = resultset('User');
my ($user) = $user_rs->find({ username => param('username') });
if ($user && $user->check_password(param('password'))) {
session user => $user;
redirect '/';
} else {
template 'login', {
error => 1,
};
}
};
get '/logout' => sub {
session user => undef;
redirect '/';
};
true;