From: Marius Gavrilescu Date: Wed, 5 Feb 2014 15:01:42 +0000 (+0200) Subject: Add register and passwd actions X-Git-Url: http://git.ieval.ro/?p=plack-app-gruntmaster.git;a=commitdiff_plain;h=31d700150e564fd3bf0eb167ef416c87aed771eb Add register and passwd actions --- diff --git a/app.psgi b/app.psgi index 25cf90f..f13ef8e 100644 --- a/app.psgi +++ b/app.psgi @@ -8,6 +8,7 @@ use Plack::Request; sub some_auth_required { my $r = Plack::Request->new($_[0]); + return 1 if $r->path eq '/action/passwd'; 0 } diff --git a/lib/Gruntmaster/Page/Base.pm b/lib/Gruntmaster/Page/Base.pm index 3a58c18..bc8e9ce 100644 --- a/lib/Gruntmaster/Page/Base.pm +++ b/lib/Gruntmaster/Page/Base.pm @@ -29,6 +29,8 @@ sub import { local $Log::Log4perl::caller_depth = $Log::Log4perl::caller_depth + 1; $_[0]->{'psgix.logger'}->({qw/level debug message/ => $_[1]}) }; + *{"${caller}::reply"} = sub { [200, ['Content-Type' => 'text/plain'], [ @_ ] ] } + } ################################################## diff --git a/lib/Gruntmaster/Page/Passwd.pm b/lib/Gruntmaster/Page/Passwd.pm new file mode 100644 index 0000000..4604fbc --- /dev/null +++ b/lib/Gruntmaster/Page/Passwd.pm @@ -0,0 +1,27 @@ +package Gruntmaster::Page::Passwd; + +use 5.014000; +use strict; +use warnings; +use Gruntmaster::Page::Base; +our @ISA = qw/Gruntmaster::Page::Base/; +our $VERSION = '0.001'; + +use Apache2::Authen::Passphrase qw/pwcheck pwset/; +use Plack::Request; + +sub generate{ + my ($self, $format, $env, $ct, $job, $ext) = @_; + my $r = Plack::Request->new($env); + my ($oldpass, $newpass, $confirm) = map {scalar $r->param($_)} 'password', 'new_password', 'confirm_new_password'; + + return reply 'Incorrect password' unless eval { pwcheck $r->user, $oldpass; 1 }; + return reply 'The two passwords do not match' unless $newpass eq $confirm; + + pwset $r->user, $newpass; + reply 'Password changed successfully'; +} + +sub variants{ [[reply => 1, undef, undef, undef, undef, undef]] } + +1 diff --git a/lib/Gruntmaster/Page/Register.pm b/lib/Gruntmaster/Page/Register.pm new file mode 100644 index 0000000..599f1c4 --- /dev/null +++ b/lib/Gruntmaster/Page/Register.pm @@ -0,0 +1,33 @@ +package Gruntmaster::Page::Register; + +use 5.014000; +use strict; +use warnings; +use Gruntmaster::Page::Base; +our @ISA = qw/Gruntmaster::Page::Base/; +our $VERSION = '0.001'; + +use Apache2::Authen::Passphrase qw/pwcheck pwset USER_REGEX/; +use Plack::Request; + +sub generate{ + my ($self, $format, $env, $ct, $job, $ext) = @_; + my $r = Plack::Request->new($env); + my ($username, $password, $confirm_password, $name, $email, $phone, $town, $university, $level) = map { die if length > 200; $_ } map {scalar $r->param($_)} qw/username password confirm_password name email phone town university level/; + + return reply 'Bad username. Allowed characters are letters, digits and underscores, and the username must be between 2 and 20 characters long.' unless $username =~ USER_REGEX; + return reply 'Username already in use' if -e "$Apache2::Authen::Passphrase::rootdir/$username.yml"; + return reply 'The two passwords do not match' unless $password eq $confirm_password; + return reply 'All fields are required' if grep { !length } $username, $password, $confirm_password, $name, $email, $phone, $town, $university, $level; + pwset $username, $password; + + insert_user $username, name => $name, email => $email, phone => $phone, town => $town, university => $university, level => $level; + + #PUBLISH genpage => "us/index.html"; + #PUBLISH genpage => "us/$username.html"; + reply 'Registered successfully'; +} + +sub variants{ [[reply => 1, undef, undef, undef, undef, undef]] } + +1 diff --git a/lib/Plack/App/Gruntmaster.pm b/lib/Plack/App/Gruntmaster.pm index 2334235..66f86fe 100644 --- a/lib/Plack/App/Gruntmaster.pm +++ b/lib/Plack/App/Gruntmaster.pm @@ -73,6 +73,9 @@ BEGIN{ get qr,$ct/submit, => 'Submit'; get qr,$ct/pb/, => 'Pb'; get qr,$ct/pb/$word, => 'Pb::Entry'; + + post qr,/action/register, => 'Register'; + post qr,/action/passwd, => 'Passwd'; } 1;