XJRJ4J7M6BC433TBLWHHKX7UYYCFX6M7ZQLUEYYTREPCSM6M3RDQC 3U3QRKAWAJNNDQAHTM4S5FAORY26XHR2FNRXFL3BT4FQ5ILMWGIQC U2ZK6LZ7MTUISO6AXHAWGSQLWRJYAWMYZPN4MORRGUT6POM6X7HQC LC64D4PUSQEVB7F6JKIP4HKJUZQN3POCJ5NCTTL3VRX3VT6J4AQQC UICHT2PSN2QOCHP6MGY5QQJUDU4IF6FBIOJLBA55QBJDK6ST566AC PCKLFRT5IZVLG47GQQ23GBSROKUR4CUEZW4PRVGREHNDFTCZ7VBAC AMFMXR52JXHUOWWG4VZ5DHQGLF4F7H7XSJRLX5XNEXOCCWYLDQOAC SAFVRDTKKD25U6VW5IVNUILLLXNQXFU72XARYC6NRVXU6MJEW2WAC JARRBLZDQ2JZWY7IUVPTOT7WJMBPMLFLF2MGLVGOYROAAISYGLSAC IK2KI6KZEJCPWJDOCWWMXYCARUSMRDK73QMUTCOROUHWJ22VXDAQC ZWCTAZGLJZQNTYWTC2XQUKMILJF6JGDL5IND6QNYWK4FIGMLRFXAC G4X5IUYJHZSEXAGFG5DRIJEHFBSQDQ2UTIJ4FCILIPZAUHGQ3GTQC MGOGOKQPECPTSG66DV7QXJHY3SXUJVHPGRWPCY4JMMNRQSDE564AC J5UVLXOK6EDIL5I7VKWH4V2QDS4DPD7FHRK6XBWSXFRQS4JKXFZQC IZEXRZWTJUQHJH62FRV3ZSWVAUIALYL35BEY64ZEAFI3PGCCPVZQC HRAFVVOEGQJQS4XQNZSMNYN2SUZGKEGPSJUDZUBMI2IN32WFNQ4QC KNU2FBIGLJ4NJKV6M67LEOKXDUEK2NMMM4P6WI2LNTUQGWDKFGKAC JLDUSNUOOQNL63BOPXIWZOWFRQ5X35RWG33PJB3J3KMR6QR7TN7QC W3HI52QVYQUEMJDK6TI54WPNDQJOHYD47G45LNMI2YTH6YGKNXNQC L2E6EVE2RVFVDCUNRJ4CZYSQNS2DZUA5DTBETHBDUQUV2KQQRAOQC S66BOMVUACAUDSGSDWP7ZIXVMZSQHWXOZYVTB7ILUCWZ7DDFAKVAC 6KJXJB7NZ5XJ3WGUWKFNT6LMBNYJN3IPHZ7B7H654D5B6LPOL5QAC CHCVBZ3WBZCEKONAGDOESRYO6AKRNZ2VFIJH2GUZD6LXOXDNOVZAC YJYBKPZ5P24N2LWYDVXD6AIWDTACL7SHRAELYRQDXFUXZHAGZWTQC RU7AQO7U4HCWJNQTR2KRGDLLG24WYD47MWIHREV6SIAPCPDQHAWQC QMPX3JDFTIDQJHSM3BYKTQNZIUKD3ZSARXDDFZMHXQYEJWOWKDEQC WRIU3S5EO3RB3IM5PUDNHLOOMUPD5UKWNUL4YMAKD3C6O4KELJCAC N45RZUQ6E7XXUPVWMR2SSZZB57ZD236PEMBCCOCAQOUOYFVJDBXQC MOX7XJ2E3XISXA7V7T4W6GEAGECGWBZ4PYSLTYBVVR4VAKOI33CQC JFZNAYJXKCMXYHGCLTRH7Q6TOFGJ4BT6332GONCWVYRLNMDDG3KAC D5QIOJGPKQJIYBUCSC3MFJ3TXLPNZ2XMI37GXMFRVRFWWR2VMTFAC HQGXL4MXGHICQ3IRRQUR6KQHS2RKVOTDKQ5ZETXHQ56DANR2YADQC LBNVQXUBEZ45SOTGVXK5UEZXIAIZTJLWZNUYFI4JZ6J65N3KPDVQC LMETCA7G76HUDV2ZVOOIH6TI6UG7RJ5VCZNWRAAZVIQOWG6XLX5QC AFTXA575C6JTVLVXTYJUKQGPLBO3NFORLO5XDSPHNL44HXLRH4TAC PZL3SZM3U3BYJX2RGYXC6NMBG7WQHFWHSYDYXZ7Q5VZA3EDYVPIQC 7ZQAHJQMEEREYP3PZAPO5JUMEDX4CNNJCCHTFQNEPOZZUJCIOVHQC QL55ECJ6KMMBUOWQ6LKSOVN7L43CH4S6SPE2AQ3VX3KSGC32RP4AC SZYDW2DG5Z7BR3ICKWDXVUNSMCDSXMYZUB6FQ4W2B2FVZJD6PULQC 3PNG7NIBQQURUUPRVQXYL342OT7JUUYOMY2JJNP6YDX7SYJDZMYAC }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('/'));
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;
'Plugin::Captcha' => {session_name => 'hydra-captcha',new => {width => 270,height => 80,ptsize => 20,lines => 30,thickness => 1,rndmax => 5,scramble => 1,#send_ctobg => 1,bgcolor => '#ffffff',font => '/home/eelco/Dev/hydra/ttf/StayPuft.ttf',},create => [ qw/ttf circle/ ],particle => [ 3500 ],out => { force => 'jpeg' }},
<option value="[% role %]"[% checked = false %][% FOREACH r IN user.userroles %][% checked = r.role == role %][% BREAK IF checked %][% END %][% IF checked %]SELECTED[% END %]>[% role %]</option>
<option value="[% role %]"[% checked = false %][% FOREACH r IN user.userroles %][% checked = r.role == role %][% BREAK IF checked %][% END %][% IF checked %]SELECTED[% END %]>[% role %]</option>
<fieldset>[% IF create %]<div class="control-group"><label class="control-label">User name</label><div class="controls"><input type="text" class="span3" name="username" value=""></input>
[% IF create %]<div class="control-group"><label class="control-label">User name</label><div class="controls"><input type="text" class="span3" name="username" [% HTML.attributes(value => username) %]></input></div>
</div>[% END %]<div class="control-group"><label class="control-label">Full name</label><div class="controls"><input type="text" class="span3" name="fullname" [% HTML.attributes(value => user.fullname) %]></input>
[% END %]<div class="control-group"><label class="control-label">Full name</label><div class="controls"><input type="text" class="span3" name="fullname" [% HTML.attributes(value => fullname) %]></input></div></div><div class="control-group"><label class="control-label">Password</label><div class="controls"><input type="password" class="span3" name="password" value=""></input></div>
</div><div class="control-group"><label class="control-label">Email</label><div class="controls"><input type="text" class="span3" name="emailaddress" [% HTML.attributes(value => user.emailaddress) %]></input>
<div class="control-group"><label class="control-label">Confirm password</label><div class="controls"><input type="password" class="span3" name="password2" value=""></input></div>
</div><div class="control-group"><label class="control-label">Evaluation error notifications</label>[% INCLUDE renderSelection param="emailonerror" curValue=user.emailonerror radiobuttons=1 options={"1" = "Yes", "0" = "No"} %]</div><div class="control-group"><label class="control-label">Roles</label><div class="controls"><select multiple name="roles" class="span3">[% INCLUDE roleoption role="admin" %][% INCLUDE roleoption role="create-project" %]</select>
<!--<div class="control-group"><label class="control-label">Email</label><div class="controls"><input type="text" class="span3" name="emailaddress" [% HTML.attributes(value => user.emailaddress) %]></input></div>
<button id="delete-user" type="submit" class="btn btn-danger" name="submit" value="delete"><i class="icon-trash icon-white"></i>Delete this user</button><script type="text/javascript">$("#delete-user").click(function() {return confirm("Are you sure you want to delete this user?");});</script>
<div class="control-group"><div class="controls"><label class="checkbox"><input type="checkbox" name="enabled" [% IF 1; 'checked="checked"'; END %]></input>Receive evaluation error notifications</label></div></div>[% END %][% IF !create && c.check_user_roles('admin') %]<div class="control-group"><label class="control-label">Roles</label><div class="controls"><select multiple name="roles" class="span3">[% INCLUDE roleoption role="admin" %][% INCLUDE roleoption role="create-project" %]</select></div></div>[% END %][% IF create %]<div class="control-group"><div class="controls"><img src="[% c.uri_for('/captcha') %]" alt="CAPTCHA"/></div></div><div class="control-group"><label class="control-label">Type the digits shown in the image above</label><div class="controls"><input type="text" class="span3" name="captcha" value=""></input></div></div>
<div class="form-actions"><button type="submit" class="btn btn-primary"><i class="icon-ok icon-white"></i>[%IF create %]Create[% ELSE %]Apply changes[% END %]</button>[% IF !create %]<button id="delete-user" type="submit" class="btn btn-danger" name="submit" value="delete"><i class="icon-trash icon-white"></i>Delete this user</button><script type="text/javascript">$("#delete-user").click(function() {return confirm("Are you sure you want to delete this user?");});</script>[% END %]