# Copyright (c) 2007 bivio Software, Inc. All Rights Reserved. # # Visit http://www.bivio.biz for more info. # # This library is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as # published by the Free Software Foundation; either version 2.1 of the # License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; If not, you may get a copy from: # http://www.opensource.org/licenses/lgpl-license.html # # $Id: TestUser.pm,v 1.14 2011/02/06 01:46:22 nagler Exp $ package Bivio::Util::TestUser; use strict; use Bivio::Base 'Bivio.ShellUtil'; our($VERSION) = sprintf('%d.%02d', q$Revision: 1.14 $ =~ /\d+/g); my($_E) = b_use('Type.Email'); sub ADM { return 'adm'; } sub DEFAULT_PASSWORD { return 'password'; } sub USAGE { return <<'EOF'; usage: b-test-user [options] command [args..] commands create name_or_email [[password] name]-- RealmAdmin->create_user format_email base [domain] -- HTTP->generate_local_email if not already an email init -- test users (adm, etc.) leave_and_delete [email_re] -- remove user from all realms and delete [ EOF } sub create { sub CREATE {[ [qw(user_or_email String)], [qw(password Password), sub {shift->DEFAULT_PASSWORD}], [qw(name RealmName), undef], ]} my($self, $bp) = shift->parameters(\@_); $self->initialize_fully; my($display_name) = $_E->is_valid($bp->{user_or_email}) ? $_E->get_local_part($bp->{user_or_email}) : $bp->{user_or_email}; my($uid) = $self->new_other('RealmAdmin')->create_user( $self->format_email($bp->{user_or_email}), $display_name, $bp->{password}, $bp->{name} || b_use('Type.RealmName')->clean_and_trim($display_name), ); b_use('Type.PageSize')->row_tag_replace($uid, 100, $self->req); return $uid; } sub format_email { my($self, $base, $domain) = @_; return $_E->is_valid($base) ? $base : (b_use('TestLanguage.HTTP')->generate_local_email($base, $domain))[0], } sub init { my($self) = @_; $self->initialize_fully->with_realm(undef, sub { $self->req->with_user($self->ADM => sub { $self->new_other('SiteForum')->make_admin; }); return; }); return; } sub init_adm { my($self) = @_; return $self->initialize_fully->with_realm(undef, sub { my($req) = $self->req; $self->create($self->ADM) unless $self->model('RealmOwner')->unauth_load({name => $self->ADM}); $req->set_user($self->ADM); $self->new_other('RealmRole')->make_super_user unless $req->is_super_user; return; }); } sub leave_and_delete { sub LEAVE_AND_DELETE {[[qw(name_re Regexp), undef]]} my($self, $bp) = shift->parameters(\@_); $self->req->assert_test; my($uids) = $bp->{name_re} ? _match_users($self, $bp->{name_re}) : [$self->req('auth_user_id')]; return [] unless @$uids; $self->model('RealmUser')->do_iterate( sub { my($it) = @_; $it->unauth_delete; return 1; }, 'unauth_iterate_start', 'realm_id', {user_id => $uids}, ); foreach my $uid (@$uids) { $self->req->with_user( $uid, sub {$self->new_other('RealmAdmin')->put(force => 1)->delete_auth_user}, ); } return $uids; } sub _match_users { my($self, $re) = @_; return [sort( keys( %{{ @{$self->model('AdmUserList') ->map_iterate( sub { my($it) = @_; return $it->get('Email.email') =~ $re ? ($it->get('User.user_id') => 1) : (); }, ), }, }}, ), )]; } 1;