diff options
author | Buchan Milne <buchan@mageia.org> | 2011-08-29 10:12:45 +0000 |
---|---|---|
committer | Buchan Milne <buchan@mageia.org> | 2011-08-29 10:12:45 +0000 |
commit | e3cb88c37d7e8d894cc9c1b95c157bdb86815b15 (patch) | |
tree | d2dddeb22b25ae64065a3d782145f88c262399b7 /lib/CatDap/Controller | |
parent | ae74ec53d9e959ad269d533aed377f47372cd320 (diff) | |
parent | 420e9a02a8a0f4a685457889e95e867c128a563c (diff) | |
download | identity-e3cb88c37d7e8d894cc9c1b95c157bdb86815b15.tar identity-e3cb88c37d7e8d894cc9c1b95c157bdb86815b15.tar.gz identity-e3cb88c37d7e8d894cc9c1b95c157bdb86815b15.tar.bz2 identity-e3cb88c37d7e8d894cc9c1b95c157bdb86815b15.tar.xz identity-e3cb88c37d7e8d894cc9c1b95c157bdb86815b15.zip |
Merge branch 'master' into stable
Diffstat (limited to 'lib/CatDap/Controller')
-rw-r--r-- | lib/CatDap/Controller/admin.pm | 88 | ||||
-rw-r--r-- | lib/CatDap/Controller/register.pm | 2 |
2 files changed, 71 insertions, 19 deletions
diff --git a/lib/CatDap/Controller/admin.pm b/lib/CatDap/Controller/admin.pm index 7fd5539..6c93212 100644 --- a/lib/CatDap/Controller/admin.pm +++ b/lib/CatDap/Controller/admin.pm @@ -547,7 +547,7 @@ sub password : Local { 'content_type' => 'text/plain', }, entry => $entry, - url => $c->uri_for('/user/firstlogin') . "/?username=$uid&key=$newpass", + url => $c->uri_for('/user/firstlogin') . "?username=$uid&key=$newpass", ); $c->forward( $c->view('Email::Template') ); $c->languages(@oldlang); @@ -565,39 +565,84 @@ sub password : Local { sub group : Local { my ( $self, $c ) = @_; $c->detach('/user/login') if not $c->user; - $c->assert_user_roles('Account Admins'); - $c->stash( subpages => gensubpages('account') ); + my $mainrole; + if ( $c->check_user_roles('Account Admins') ) { + $mainrole = 'account'; + } + elsif ( $c->check_user_roles('Group Admins') ) { + $mainrole = 'group'; + } + else { + $c->res->forward('/user'); + } + #$c->assert_any_user_role({['Account Admins','Group Admins']}); + #$mainrole = 'account' if $c->check_user_roles('Account Admins'); + $c->stash( subpages => gensubpages($mainrole) ); my @errors; - return if not $c->req->param('attribute') and not $c->req->param('value'); - my $attribute = $c->req->param('attribute'); - $attribute =~ s/[^\w\d]//g; - my $value = $c->req->param('value'); - $value =~ s/[^\w\d\* ]//g; + my ($attribute,$value); + if ( not $c->req->param('attribute') and not $c->req->param('value') ) { + $attribute = 'owner'; + $value = $c->user->ldap_entry->dn; + $c->stash( heading => 'Groups you manage'); + } + else { + $attribute = $c->req->param('attribute'); + $attribute =~ s/[^\w\d]//g; + $value = $c->req->param('value'); + $value =~ s/[^\w\d\* ]//g; + $c->stash( heading => 'Groups matching search criteria'); + } my $mesg = $c->model('user') - ->search("(&(objectclass=posixGroup)($attribute=$value))"); + ->search("(&(objectclass=groupOfNames)($attribute=$value))"); push @errors, $mesg->error if $mesg->code; - my @entries = $mesg->entries; + my @entries = $mesg->entries if ($mesg->entries ge 1); push @errors, $mesg->error if $mesg->code; - $c->stash( - entries => \@entries, - errors => \@errors, - ); + $c->stash( entries => \@entries ) if (@entries); + $c->stash( errors => \@errors); } sub group_modify : Local { - my ( $self, $c, $group ) = @_; + my ( $self, $c, $group, $op, $attr, $value ) = @_; $c->detach('/user/login') if not $c->user; - $c->assert_user_roles('Account Admins'); - $c->stash( subpages => gensubpages('account') ); + my $mainrole = 'account'; + if ( ! $c->check_user_roles('Account Admins') and ! $c->check_user_roles('Group Admins')) { + $c->res->forward('/user'); + } + $mainrole = 'group' if (not $c->check_user_roles('Account Admins')); + $c->stash( subpages => gensubpages($mainrole) ); my @errors; + my @entries; + my $mesg; $c->detach('/admin/group') if $group eq ''; if ( $group !~ /^[\w\d ]*$/ ) { push @errors, "Group contains illegal characters"; $c->detach('/admin/group'); } - my $mesg = - $c->model('user')->search("(&(objectClass=posixGroup)(cn=$group))"); + if (defined $op and $op eq 'delete') { + $mesg = $c->model('user')->search("(&(objectClass=groupOfNames)(cn=$group))"); + @entries = $mesg->entries; + $entries[0]->delete( $attr => $value)->update; + $c->res->redirect("/admin/group_modify/$group"); + } + if ( defined $op and $op eq 'add' ) { + my $member = $c->req->param('member'); + $mesg = $c->model('user')->search("(uid=$member)"); + if ( $mesg->code ) { + $c->stash({ errors => $mesg->error}); + $c->detach('/admin/group'); + } + if ( $mesg->entries ne 1 ) { + $c->detach('/admin/group'); + } + @entries = $mesg->entries; + my $dn = $entries[0]->dn; + $mesg = $c->model('user')->search("(&(objectClass=groupOfNames)(cn=$group))"); + @entries = $mesg->entries; + $entries[0]->add( 'member' => $dn )->update; + $c->res->redirect("/admin/group_modify/$group"); + } + $mesg = $c->model('user')->search("(&(objectClass=groupOfNames)(cn=$group))"); if ( $mesg->entries gt 1 ) { push @errors, 'More than one entry matched'; $c->detach('/admin/group'); @@ -641,6 +686,11 @@ sub gensubpages : Private { { page => 'group', title => "Groups" }, ); } + if ( $type eq 'group' ) { + @subpagenames = ( + { page => 'group', title => "Groups" }, + ); + } return \@subpagenames; } diff --git a/lib/CatDap/Controller/register.pm b/lib/CatDap/Controller/register.pm index d52971e..2038e2b 100644 --- a/lib/CatDap/Controller/register.pm +++ b/lib/CatDap/Controller/register.pm @@ -25,6 +25,8 @@ Catalyst Controller. sub index :Path :Args(0) : Form { my ( $self, $c ) = @_; + my $langs = join ',',@{$c->languages}; + $c->log->debug("Languages: $langs, default: " . $c->language . ", saving: " . ${$c->languages}[0]); #my $form = Catalyst::Controller::HTML::FormFu->form(); #$c->response->body('Matched CatDap::Controller::register in register.'); |