Add user registration
This commit is contained in:
@ -87,6 +87,7 @@ sub create_user : Chained('admin') PathPart('create-user') Args(0) {
|
||||
$c->stash->{create} = 1;
|
||||
}
|
||||
|
||||
|
||||
sub create_user_submit : Chained('admin') PathPart('create-user/submit') Args(0) {
|
||||
my ($self, $c) = @_;
|
||||
|
||||
|
@ -20,7 +20,9 @@ sub begin :Private {
|
||||
$c->stash->{nixVersion} = $ENV{"NIX_RELEASE"} || "<devel>";
|
||||
$c->stash->{curTime} = time;
|
||||
$c->stash->{logo} = $ENV{"HYDRA_LOGO"} ? "/logo" : "";
|
||||
$c->stash->{tracker} = $ENV{"HYDRA_TRACKER"} ;
|
||||
$c->stash->{tracker} = $ENV{"HYDRA_TRACKER"};
|
||||
$c->stash->{flashMsg} = $c->flash->{flashMsg};
|
||||
$c->stash->{successMsg} = $c->flash->{successMsg};
|
||||
|
||||
if (scalar(@args) == 0 || $args[0] ne "static") {
|
||||
$c->stash->{nrRunningBuilds} = $c->model('DB::Builds')->search({ finished => 0, busy => 1 }, {})->count();
|
||||
@ -37,46 +39,12 @@ sub index :Path :Args(0) {
|
||||
}
|
||||
|
||||
|
||||
sub login :Local {
|
||||
my ($self, $c) = @_;
|
||||
|
||||
my $username = $c->request->params->{username} || "";
|
||||
my $password = $c->request->params->{password} || "";
|
||||
|
||||
if ($username eq "" && $password eq "" && !defined $c->flash->{referer}) {
|
||||
my $baseurl = $c->uri_for('/');
|
||||
my $refurl = $c->request->referer;
|
||||
$c->flash->{referer} = $refurl if $refurl =~ m/^($baseurl)/;
|
||||
}
|
||||
|
||||
if ($username && $password) {
|
||||
if ($c->authenticate({username => $username, password => $password})) {
|
||||
$c->response->redirect($c->flash->{referer} || $c->uri_for('/'));
|
||||
$c->flash->{referer} = undef;
|
||||
return;
|
||||
}
|
||||
$c->stash->{errorMsg} = "Bad username or password.";
|
||||
}
|
||||
|
||||
$c->keep_flash("referer");
|
||||
|
||||
$c->stash->{template} = 'login.tt';
|
||||
}
|
||||
|
||||
|
||||
sub logout :Local {
|
||||
my ($self, $c) = @_;
|
||||
$c->logout;
|
||||
$c->response->redirect($c->request->referer || $c->uri_for('/'));
|
||||
}
|
||||
|
||||
|
||||
sub queue :Local {
|
||||
my ($self, $c) = @_;
|
||||
$c->stash->{template} = 'queue.tt';
|
||||
$c->stash->{queue} = [$c->model('DB::Builds')->search(
|
||||
{finished => 0}, { join => ['project'], order_by => ["priority DESC", "timestamp"], columns => [@buildListColumns], '+select' => ['project.enabled'], '+as' => ['enabled'] })];
|
||||
$c->stash->{flashMsg} = $c->flash->{buildMsg};
|
||||
$c->stash->{flashMsg} //= $c->flash->{buildMsg};
|
||||
}
|
||||
|
||||
|
||||
|
112
src/lib/Hydra/Controller/User.pm
Normal file
112
src/lib/Hydra/Controller/User.pm
Normal file
@ -0,0 +1,112 @@
|
||||
package Hydra::Controller::User;
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use base 'Catalyst::Controller';
|
||||
use Digest::SHA1 qw(sha1_hex);
|
||||
use Hydra::Helper::Nix;
|
||||
use Hydra::Helper::CatalystUtils;
|
||||
|
||||
|
||||
__PACKAGE__->config->{namespace} = '';
|
||||
|
||||
|
||||
sub login :Local {
|
||||
my ($self, $c) = @_;
|
||||
|
||||
my $username = $c->request->params->{username} || "";
|
||||
my $password = $c->request->params->{password} || "";
|
||||
|
||||
if ($username eq "" && $password eq "" && !defined $c->flash->{referer}) {
|
||||
my $baseurl = $c->uri_for('/');
|
||||
my $refurl = $c->request->referer;
|
||||
$c->flash->{referer} = $refurl if $refurl =~ m/^($baseurl)/;
|
||||
}
|
||||
|
||||
if ($username && $password) {
|
||||
if ($c->authenticate({username => $username, password => $password})) {
|
||||
$c->response->redirect($c->flash->{referer} || $c->uri_for('/'));
|
||||
$c->flash->{referer} = undef;
|
||||
return;
|
||||
}
|
||||
$c->stash->{errorMsg} = "Bad username or password.";
|
||||
}
|
||||
|
||||
$c->keep_flash("referer");
|
||||
|
||||
$c->stash->{template} = 'login.tt';
|
||||
}
|
||||
|
||||
|
||||
sub logout :Local {
|
||||
my ($self, $c) = @_;
|
||||
$c->logout;
|
||||
$c->response->redirect($c->request->referer || $c->uri_for('/'));
|
||||
}
|
||||
|
||||
|
||||
sub captcha :Local Args(0) {
|
||||
my ($self, $c) = @_;
|
||||
$c->create_captcha();
|
||||
}
|
||||
|
||||
|
||||
sub register :Local Args(0) {
|
||||
my ($self, $c) = @_;
|
||||
|
||||
$c->stash->{template} = 'user.tt';
|
||||
$c->stash->{create} = 1;
|
||||
return if $c->request->method ne "POST";
|
||||
|
||||
my $userName = trim $c->req->params->{username};
|
||||
my $fullName = trim $c->req->params->{fullname};
|
||||
my $password = trim $c->req->params->{password};
|
||||
$c->stash->{username} = $userName;
|
||||
$c->stash->{fullname} = $fullName;
|
||||
|
||||
sub fail {
|
||||
my ($c, $msg) = @_;
|
||||
$c->stash->{errorMsg} = $msg;
|
||||
}
|
||||
|
||||
return fail($c, "You did not enter the correct digits from the security image.")
|
||||
unless $c->validate_captcha($c->req->param('captcha'));
|
||||
|
||||
return fail($c, "Your user name is invalid. It must start with a lower-case letter followed by lower-case letters, digits, dots or underscores.")
|
||||
if $userName !~ /^$userNameRE$/;
|
||||
|
||||
return fail($c, "Your user name is already taken.")
|
||||
if $c->find_user({ username => $userName });
|
||||
|
||||
return fail($c, "Your must specify your full name.") if $fullName eq "";
|
||||
|
||||
return fail($c, "You must specify a password of at least 6 characters.")
|
||||
if length($password) < 6;
|
||||
|
||||
return fail($c, "The passwords you specified did not match.")
|
||||
if $password ne trim $c->req->params->{password2};
|
||||
|
||||
txn_do($c->model('DB')->schema, sub {
|
||||
my $user = $c->model('DB::Users')->create(
|
||||
{ username => $userName
|
||||
, fullname => $fullName
|
||||
, password => sha1_hex($password)
|
||||
, emailaddress => "",
|
||||
});
|
||||
});
|
||||
|
||||
$c->authenticate({username => $userName, password => $password})
|
||||
or error($c, "Unable to authenticate the new user!");
|
||||
|
||||
$c->flash->{successMsg} = "User <tt>$userName</tt> has been created.";
|
||||
$c->response->redirect($c->flash->{referer} || $c->uri_for('/'));
|
||||
}
|
||||
|
||||
|
||||
sub preferences :Local Args(0) {
|
||||
my ($self, $c) = @_;
|
||||
error($c, "Not implemented.");
|
||||
}
|
||||
|
||||
|
||||
1;
|
Reference in New Issue
Block a user