From 63300398e0235cc6c63550a8cfe8003cbc03365e Mon Sep 17 00:00:00 2001 From: Alex 'AdUser' Z Date: Fri, 21 Nov 2014 11:03:05 +1000 Subject: [PATCH] * LDV::User --- lib/LDV/Actions.pm | 75 --------------------------------------- lib/LDV/User.pm | 88 +++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 84 insertions(+), 79 deletions(-) delete mode 100644 lib/LDV/Actions.pm diff --git a/lib/LDV/Actions.pm b/lib/LDV/Actions.pm deleted file mode 100644 index bf9d51e..0000000 --- a/lib/LDV/Actions.pm +++ /dev/null @@ -1,75 +0,0 @@ -package LDV::Actions; - -use strict; -use warnings; -use utf8; - -use Mojo::Base 'Mojolicious::Controller'; -use Net::LDAP; -use Net::LDAP::Util qw(ldap_error_name); -use Crypt::SaltedHash; - -sub create -{ - my ($self) = @_; - my ($result); - - $result = "Created"; - eval { - my ($ldap, $mesg); - $ldap = Net::LDAP->new($self->app->config->{server}) - or die("$@"); - $mesg = $ldap->bind($self->app->config->{binddn}, - password => $self->app->config->{bindpass}); - if ($mesg->code) { - $self->app->log->error($mesg->error); - die("Can't connect to server\n"); - } - - my $base = $self->app->config->{userbase}; - my $login = $self->req->param('login'); - die ("Empty username\n") - unless ($login); - die ("Forbidden characters in username\n") - unless ($login =~ m|^[a-z]{2,36}$|oi); - $mesg = $ldap->search(base => $base, scope => 'one', deref => 'never', - filter => '(&(uid=$login)(class=InetOrgPerson))'); - die("This user already exists\n") - if ($mesg->count); - - my $attrs = {}; - $attrs->{objectclass} = [ "top", @{$self->app->config->{defclasses}} ]; - $attrs->{mail} = $self->req->param('mail'); - $attrs->{displayname} = $self->req->param('displayname') || ''; - if ($attrs->{displayname} =~ m|^(\S+)\s+(?:.*\s+)?(\S+)$|oi) { - $attrs->{cn} = $1; - $attrs->{sn} = $2; - } else { - $attrs->{cn} = '!not set!'; - $attrs->{sn} = '!not set!'; - } - - $attrs->{uid} = $login; - my $csh = Crypt::SaltedHash->new(algorithm => 'SHA-1'); - $csh->add($self->req->param('pass')); - $attrs->{userpassword} = $csh->generate(); - - $mesg = $ldap->add("uid=$login,$base", attrs => [ %$attrs ]); - if ($mesg->code) { - $self->app->log->error($mesg->error); - die("Can't add user\n"); - } - - $ldap->unbind(); 1; - } or do { - $self->app->log->error($@); - $result = "Error: $@"; - }; - - $self->flash({result => $result}); - $self->redirect_to('/user/create'); - $self->rendered(); - return 1; -} - -1; diff --git a/lib/LDV/User.pm b/lib/LDV/User.pm index 870039e..f7a46e8 100644 --- a/lib/LDV/User.pm +++ b/lib/LDV/User.pm @@ -7,10 +7,27 @@ use utf8; use Mojo::Base 'Mojolicious::Controller'; use Net::LDAP; -use Net::LDAP::Util qw(ldap_error_name); +use Net::LDAP::Util qw(ldap_error_name); # is really needed? +use Crypt::SaltedHash; -sub create { my ($self) = @_; $self->render(); } -sub login { my ($self) = @_; $self->render(); } +# pages +sub login { my ($self) = @_; $self->render(); } +sub register { my ($self) = @_; $self->render(); } + +sub profile { + my ($self) = @_; + + if (my $uid = $self->session('useruid')) { + my $data = $self->app->ldap->get($uid); + $self->stash(user_data => $data); + $self->render(); + return; + } + + $self->redirect_to('/user/login'); + $self->rendered(); + return; +} sub logout { my ($self) = @_; @@ -38,7 +55,7 @@ sub update { if ($mesg->code) { $self->app->log->error($mesg->error); die("Can't connect to server\n"); - } + } my $base = $self->app->config->{userbase}; my $attrs = [ @{$self->app->config->{defattrs}} ]; $mesg = $ldap->search(base => $base, scope => 'one', deref => 'never', @@ -55,4 +72,67 @@ sub update { $self->render(); } +sub create +{ + my ($self) = @_; + my ($result); + + $result = "Created"; + eval { + my ($ldap, $mesg); + $ldap = Net::LDAP->new($self->app->config->{server}) + or die("$@"); + $mesg = $ldap->bind($self->app->config->{binddn}, + password => $self->app->config->{bindpass}); + if ($mesg->code) { + $self->app->log->error($mesg->error); + die("Can't connect to server\n"); + } + + my $base = $self->app->config->{userbase}; + my $login = $self->req->param('login'); + die ("Empty username\n") + unless ($login); + die ("Forbidden characters in username\n") + unless ($login =~ m|^[a-z]{2,36}$|oi); + $mesg = $ldap->search(base => $base, scope => 'one', deref => 'never', + filter => '(&(uid=$login)(class=InetOrgPerson))'); + die("This user already exists\n") + if ($mesg->count); + + my $attrs = {}; + $attrs->{objectclass} = [ "top", @{$self->app->config->{defclasses}} ]; + $attrs->{mail} = $self->req->param('mail'); + $attrs->{displayname} = $self->req->param('displayname') || ''; + if ($attrs->{displayname} =~ m|^(\S+)\s+(?:.*\s+)?(\S+)$|oi) { + $attrs->{cn} = $1; + $attrs->{sn} = $2; + } else { + $attrs->{cn} = '!not set!'; + $attrs->{sn} = '!not set!'; + } + + $attrs->{uid} = $login; + my $csh = Crypt::SaltedHash->new(algorithm => 'SHA-1'); + $csh->add($self->req->param('pass')); + $attrs->{userpassword} = $csh->generate(); + + $mesg = $ldap->add("uid=$login,$base", attrs => [ %$attrs ]); + if ($mesg->code) { + $self->app->log->error($mesg->error); + die("Can't add user\n"); + } + + $ldap->unbind(); 1; + } or do { + $self->app->log->error($@); + $result = "Error: $@"; + }; + + $self->flash({result => $result}); + $self->redirect_to('/user/create'); + $self->rendered(); + return 1; +} + 1;