Revision: 584
Author: perlstalker
Date: Wed Dec 2 20:57:26 2009
Log: - Add the ability to rename accounts.
- Add support for granting admin rights.
- Updated docs to reflect changes.
http://code.google.com/p/vuser/source/detail?r=584
Modified:
/VUser-Google-ProvisioningAPI/trunk/lib/VUser/Google/Provisioning/UserEntry.pm
/VUser-Google-ProvisioningAPI/trunk/lib/VUser/Google/Provisioning/V2_0.pm
/VUser-Google-ProvisioningAPI/trunk/t/tests/Test/VUser/Google/Provisioning/V2_0.pm
=======================================
---
/VUser-Google-ProvisioningAPI/trunk/lib/VUser/Google/Provisioning/UserEntry.pm
Tue Nov 17 23:17:24 2009
+++
/VUser-Google-ProvisioningAPI/trunk/lib/VUser/Google/Provisioning/UserEntry.pm
Wed Dec 2 20:57:26 2009
@@ -11,9 +11,11 @@
has 'FamilyName' => (is => 'rw', isa => 'Str');
has 'Password' => (is => 'rw', isa => 'Str');
has 'HashFunctionName' => (is => 'rw', isa => 'Str');
-has 'Suspended' => (is => 'rw', isa => 'Bool');
+has 'Suspended' => (is => 'rw', isa => 'Bool', default => 0);
has 'Quota' => (is => 'rw', isa => 'Int');
-has 'ChangePasswordAtNextLogin' => (is => 'rw', isa => 'Bool');
+has 'ChangePasswordAtNextLogin' => (is => 'rw', isa => 'Bool', default =>
0);
+has 'Admin' => (is => 'rw', isa => 'Bool', default => 0);
+has 'AgreedToTerms' => (is => 'rw', isa => 'Bool', default => 0);
sub as_hash {
my $self = shift;
@@ -27,6 +29,7 @@
suspended => $self->Suspended,
quota => $self->Quota,
changePasswordAtNextLogin => $self->ChangePasswordAtNextLogin,
+ admin => $self->Admin,
);
return %hash;
=======================================
---
/VUser-Google-ProvisioningAPI/trunk/lib/VUser/Google/Provisioning/V2_0.pm
Sat Nov 28 21:52:13 2009
+++
/VUser-Google-ProvisioningAPI/trunk/lib/VUser/Google/Provisioning/V2_0.pm
Wed Dec 2 20:57:26 2009
@@ -23,6 +23,7 @@
# suspended (bool)
# quota (in MB)
# changePasswordAtNextLogin (bool)
+# admin (bool)
sub CreateUser {
my $self = shift;
@@ -65,6 +66,10 @@
$post .= ' changePasswordAtNextLogin="'
.$self->_as_bool($options{changePasswordAtNextLogin}).'"';
}
+
+ if ($options{admin}) {
+ $post .= ' admin="'.$self->_as_bool($options{admin}).'"';
+ }
$post .= '/>';
@@ -200,6 +205,7 @@
# suspended (bool)
# quota (in MB)
# changePasswordAtNextLogin (bool)
+# admin (admin)
sub UpdateUser {
my $self = shift;
@@ -229,6 +235,7 @@
if ($options{password}
or defined $options{suspended}
or defined $options{changePasswordAtNextLogin}
+ or defined $options{admin}
) {
$post .= '<apps:login';
@@ -252,6 +259,10 @@
$post .= ' changePasswordAtNextLogin="'
.$self->_as_bool($options{changePasswordAtNextLogin}).'"';
}
+
+ if (defined $options{admin}) {
+ $post .= ' admin="'.$self->_as_bool($options{admin}).'"';
+ }
$post .= '/>';
}
@@ -282,6 +293,53 @@
}
sub RenameUser {
+ my $self = shift;
+ my $oldname = shift;
+ my $newname = shift;
+
+ die "Can't rename user: old userName not set\n" unless $oldname;
+ die "Can't rename user: new userName not set\n" unless $newname;
+
+ my $url = $self->base_url.$self->google->domain
+ ."/user/2.0/$oldname";
+
+ my $user = $self->RetrieveUser($oldname)
+ or die "Unknown user: $oldname\n";
+
+ my $post = '<?xml version="1.0" encoding="UTF-8"?>
+<atom:entry xmlns:atom="
http://www.w3.org/2005/Atom"
+ xmlns:apps="
http://schemas.google.com/apps/2006">
+ <atom:category scheme="
http://schemas.google.com/g/2005#kind"
+ term="
http://schemas.google.com/apps/2006#user"/>
+';
+
+ $post .= '<atom:title type="text">$oldname</atom:title>';
+ $post .= '<atom:link rel="self" type="application/atom+xml"';
+ $post .= " href=\"".$self->base_url.
+ $self->google->domain."/user/2.0/$oldname\"/>";
+ $post .= '<atom:link rel="edit" type="application/atom+xml"';
+ $post .= " href=\"".$self->base_url.
+ $self->google->domain."/user/2.0/$oldname\"/>";
+
+ $post .= "<apps:login";
+ $post .= " userName='$newname'";
+ $post .= ' suspended="'.$self->_as_bool($user->Suspended).'"';
+ $post .= ' admin="'.$self->_as_bool($user->Admin).'"';
+ $post .= ' changePasswordAtNextLogin="'
+ .$self->_as_bool($user->ChangePasswordAtNextLogin).'"';
+ # $post .= '
agreedToTerms="'.$self->_as_bool($user->AgreedToTerms).'"';
+ $post .= "/>";
+
+ $post .= '</atom:entry>';
+
+ if ($self->google->Request('PUT', $url, $post)) {
+ $self->dprint("Renamed $oldname to $newname");
+ my $entry = $self->_build_user_entry($self->google->result);
+ return $entry;
+ }
+ else {
+ die "Error rename user: ".$self->google->result->{'reason'}."\n";
+ }
}
sub DeleteUser {
@@ -366,6 +424,24 @@
$entry->ChangePasswordAtNextLogin(0);
}
}
+
+ if ($xml->{'apps:login'}[0]{'admin'}) {
+ if ($xml->{'apps:login'}[0]{'admin'} eq 'true') {
+ $entry->Admin(1);
+ }
+ else {
+ $entry->Admin(0);
+ }
+ }
+
+ if ($xml->{'apps:login'}[0]{'agreedToTerms'}) {
+ if ($xml->{'apps:login'}[0]{'agreedToTerms'} eq 'true') {
+ $entry->AgreedToTerms(1);
+ }
+ else {
+ $entry->AgreedToTerms(0);
+ }
+ }
$entry->FamilyName($xml->{'apps:name'}[0]{'familyName'});
$entry->GivenName($xml->{'apps:name'}[0]{'givenName'});
@@ -509,6 +585,12 @@
change their password the next time they login in. This is the default.
You may turn this off by setting changePasswordAtNextLogin to C<0>.
+=item admin
+
+If set to a true value, e.g. C<1>, the user will be granted
+administrative privileges. A false value, e.g. C<0>, admin rights will
+be revoked. By default, users will not be granted admin rights.
+
=back
=head3 RetrieveUser
@@ -581,7 +663,11 @@
=head3 RenameUser
-This has not yet been implemented.
+ my $user_user = $api->RenameUser($oldname, $newname);
+
+Rename an account. The first parameter is the old user name; the
+second is the new user name. RenameUser() will die if the old name
+does not exist.
=head3 DeleteUser
=======================================
---
/VUser-Google-ProvisioningAPI/trunk/t/tests/Test/VUser/Google/Provisioning/V2_0.pm
Sat Nov 28 20:23:58 2009
+++
/VUser-Google-ProvisioningAPI/trunk/t/tests/Test/VUser/Google/Provisioning/V2_0.pm
Wed Dec 2 20:57:26 2009
@@ -209,5 +209,43 @@
my $rc = $api->DeleteUser($user);
}
+
+sub RenameUser : Tests(6) {
+ my $test = shift;
+ my $class = $test->class;
+
+ my $api = $class->new(google => $test->create_google);
+
+ can_ok $api, 'RenameUser';
+
+ my $user = $test->get_test_user;
+
+ my $old_user = $api->CreateUser(
+ userName => $user,
+ givenName => 'Test',
+ familyName => 'User',
+ password => 'testing',
+ );
+
+ my $new_user = $api->RenameUser($user, $user.'.new');
+
+ isa_ok $new_user, 'VUser::Google::Provisioning::UserEntry',
+ '... and the account was renamed';
+
+ is $new_user->UserName, $user.'.new',
+ '... and the user name has been updated';
+
+ ## Double-check that settings match
+ is $new_user->GivenName, $old_user->GivenName,
+ '... and the given names match';
+
+ is $new_user->FamilyName, $old_user->FamilyName,
+ '... and the family names match';
+
+ is $new_user->Quota, $old_user->Quota,
+ '... and the quotas match';
+
+ my $rc = $api->DeleteUser($user.'.new');
+}
1;