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
|
package VNWeb::User::Register;
use VNWeb::Prelude;
TUWF::get '/u/register', sub {
return tuwf->resRedirect('/', 'temp') if auth;
framework_ title => 'Register', sub {
elm_ 'User.Register';
};
};
json_api qr{/u/register\.json}, {
username => { username => 1 },
email => { email => 1 },
vns => { int => 1 },
}, sub {
my $data = shift;
my $num = tuwf->dbVali("SELECT count FROM stats_cache WHERE section = 'vn'");
return elm_Bot if $data->{vns} < $num*0.995 || $data->{vns} > $num*1.005;
return elm_Taken if tuwf->dbVali('SELECT 1 FROM users WHERE username =', \$data->{username});
return elm_DoubleEmail if tuwf->dbVali(select => sql_func user_emailexists => \$data->{email}, \undef);
my $ip = tuwf->reqIP;
return elm_DoubleIP if tuwf->dbVali(
q{SELECT 1 FROM users WHERE registered >= NOW()-'1 day'::interval AND ip <<},
$ip =~ /:/ ? \"$ip/48" : \"$ip/30"
);
my $id = tuwf->dbVali('INSERT INTO users', {
username => $data->{username},
mail => $data->{email},
ip => $ip,
}, 'RETURNING id');
my(undef, $token) = auth->resetpass($data->{email});
my $body = sprintf
"Hello %s,"
."\n\n"
."Someone has registered an account on VNDB.org with your email address. To confirm your registration, follow the link below."
."\n\n"
."%s"
."\n\n"
."If you don't remember creating an account on VNDB.org recently, please ignore this e-mail."
."\n\n"
."vndb.org",
$data->{username}, tuwf->reqBaseURI()."/u$id/setpass/$token";
tuwf->mail($body,
To => $data->{email},
From => 'VNDB <noreply@vndb.org>',
Subject => "Confirm registration for $data->{username}",
);
elm_Success
};
1;
|