File: | /home/mik/work/module/Tivoli/AccessManager/Admin/SSO/Web.pm |
Coverage: | 99.5% |
line | stmt | bran | cond | sub | pod | time | code |
---|---|---|---|---|---|---|---|
1 | package Tivoli::AccessManager::Admin::SSO::Web; | ||||||
2 | 15 15 15 | 173 76 227 | use strict; | ||||
3 | 15 15 15 | 215 58 235 | use warnings; | ||||
4 | 15 15 15 | 207 57 316 | use Carp; | ||||
5 | 15 15 15 | 211 67 297 | use Tivoli::AccessManager::Admin::Response; | ||||
6 | 15 15 15 | 215 61 280 | use Data::Dumper; | ||||
7 | |||||||
8 | #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= | ||||||
9 | # $Id$ | ||||||
10 | #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= | ||||||
11 | $Tivoli::AccessManager::Admin::SSO::Web::VERSION = '0.04'; | ||||||
12 | 15 | 228 | use Inline(C => 'DATA', | ||||
13 | INC => '-I/opt/PolicyDirector/include', | ||||||
14 | LIBS => ' -lpthread -lpdadminapi -lstdc++', | ||||||
15 | CCFLAGS => '-Wall', | ||||||
16 | # VERSION => '0.04', | ||||||
17 | NAME => 'Tivoli::AccessManager::Admin::SSO::Web', | ||||||
18 | 15 15 | 224 60 | ); | ||||
19 | |||||||
20 | sub new { | ||||||
21 | 29 | 1 | 228 | my $class = shift; | |||
22 | 29 | 126 | my $cont = shift; | ||||
23 | 29 | 160 | my $self = {}; | ||||
24 | 29 | 364 | my $resp = Tivoli::AccessManager::Admin::Response->new(); | ||||
25 | 29 | 131 | my ($name,$desc); | ||||
26 | |||||||
27 | 29 | 642 | unless ( defined($cont) and UNIVERSAL::isa($cont,'Tivoli::AccessManager::Admin::Context' ) ) { | ||||
28 | 3 | 65 | warn "Incorrect syntax -- did you forget the context?\n"; | ||||
29 | 3 | 26 | return undef; | ||||
30 | } | ||||||
31 | |||||||
32 | 26 | 221 | bless $self, $class; | ||||
33 | |||||||
34 | 26 | 293 | if ( @_ == 1 ) { | ||||
35 | 1 | 12 | $name = shift; | ||||
36 | } | ||||||
37 | elsif ( @_ % 2 ) { | ||||||
38 | 2 | 28 | warn "Invalid parameter list -- please use a hash\n"; | ||||
39 | 2 | 13 | return undef; | ||||
40 | } | ||||||
41 | else { | ||||||
42 | 23 | 239 | my %opts = @_; | ||||
43 | 23 | 190 | $name = $opts{name} || ''; | ||||
44 | 23 | 329 | $desc = $opts{desc} || ''; | ||||
45 | } | ||||||
46 | |||||||
47 | 24 | 202 | $self->{name} = $name; | ||||
48 | 24 | 204 | $self->{context} = $cont; | ||||
49 | 24 | 144 | $self->{desc} = $desc; | ||||
50 | 24 | 388 | $self->_ssoweb_stash(); | ||||
51 | |||||||
52 | 24 | 128 | if ( $name ) { | ||||
53 | 20 | 1309926 | $self->{exist} = $self->ssoweb_get( $resp ); | ||||
54 | } | ||||||
55 | else { | ||||||
56 | 4 | 19 | $self->{exist} = 0; | ||||
57 | } | ||||||
58 | |||||||
59 | 24 | 456 | return $self; | ||||
60 | } | ||||||
61 | |||||||
62 | sub create { | ||||||
63 | 19 | 1 | 198 | my $self = shift; | |||
64 | 19 | 209 | my $resp = Tivoli::AccessManager::Admin::Response->new(); | ||||
65 | 19 | 81 | my ($name,$desc); | ||||
66 | |||||||
67 | 19 | 126 | unless ( ref( $self ) ) { | ||||
68 | 12 | 51 | my $pd = shift; | ||||
69 | 12 | 998 | $self = $self->new( $pd, @_ ); | ||||
70 | 12 | 348 | unless ( defined $self ) { | ||||
71 | 2 | 16 | $resp->set_message("Couldn't instatiate the resource"); | ||||
72 | 2 | 14 | $resp->set_isok(0); | ||||
73 | 2 | 14 | return $resp; | ||||
74 | } | ||||||
75 | } | ||||||
76 | |||||||
77 | 17 | 175 | if ( @_ == 1 ) { | ||||
78 | 1 | 5 | $self->{name} = shift; | ||||
79 | } | ||||||
80 | elsif ( @_ % 2 ) { | ||||||
81 | 1 | 9 | $resp->set_message("Invalid parameter list -- please use a hash"); | ||||
82 | 1 | 10 | $resp->set_isok(0); | ||||
83 | 1 | 9 | return $resp; | ||||
84 | } | ||||||
85 | else { | ||||||
86 | 15 | 156 | my %opts = @_; | ||||
87 | 15 | 172 | $self->{name} = $opts{name} || $self->{name} || ''; | ||||
88 | 15 | 280 | $self->{desc} = $opts{desc} || $self->{desc} || ''; | ||||
89 | } | ||||||
90 | |||||||
91 | 16 | 96 | unless ( $self->{name} ) { | ||||
92 | 1 | 11 | $resp->set_message("I cannot create an unnamed SSO resource"); | ||||
93 | 1 | 10 | $resp->set_isok(0); | ||||
94 | 1 | 5 | return $resp; | ||||
95 | } | ||||||
96 | |||||||
97 | 15 | 174 | if ( $self->exist ) { | ||||
98 | 1 | 8 | $resp->set_message("The SSO resource " . $self->name . " already exists"); | ||||
99 | 1 | 13 | $resp->set_value($self); | ||||
100 | 1 | 11 | $resp->set_iswarning(1); | ||||
101 | 1 | 12 | return $resp; | ||||
102 | } | ||||||
103 | |||||||
104 | 14 | 951286 | my $rc = $self->ssoweb_create($resp); | ||||
105 | 14 | 202 | $self->{exist} = $rc; | ||||
106 | |||||||
107 | 14 | 157 | if ( $rc ) { | ||||
108 | 13 | 256 | $resp->set_value($self); | ||||
109 | } | ||||||
110 | |||||||
111 | 14 | 430 | return $resp; | ||||
112 | } | ||||||
113 | |||||||
114 | sub delete { | ||||||
115 | 15 | 1 | 101 | my $self = shift; | |||
116 | 15 | 191 | my $resp = Tivoli::AccessManager::Admin::Response->new(); | ||||
117 | |||||||
118 | 15 | 923 | unless ( $self->exist ) { | ||||
119 | 1 | 8 | $resp->set_message("SSO resource " . $self->name . " doesn't exist"); | ||||
120 | 1 | 11 | $resp->set_isok(0); | ||||
121 | 1 | 10 | return $resp; | ||||
122 | } | ||||||
123 | |||||||
124 | 14 | 758416 | my $rc = $self->ssoweb_delete($resp); | ||||
125 | 14 | 251 | if ($rc) { | ||||
126 | 13 | 212 | $self->{exist} = 0; | ||||
127 | } | ||||||
128 | 14 | 258 | $resp->set_value($rc); | ||||
129 | 14 | 154 | return $resp; | ||||
130 | } | ||||||
131 | |||||||
132 | sub list { | ||||||
133 | 4 | 1 | 47 | my $class = shift; | |||
134 | 4 | 38 | my $resp = Tivoli::AccessManager::Admin::Response->new(); | ||||
135 | 4 | 15 | my $pd; | ||||
136 | |||||||
137 | # I want this to be called as either Tivoli::AccessManager::Admin::User->list or | ||||||
138 | # $self->list | ||||||
139 | 4 | 22 | if ( ref($class) ) { | ||||
140 | 1 | 5 | $pd = $class->{context}; | ||||
141 | } | ||||||
142 | else { | ||||||
143 | 3 | 21 | $pd = shift; | ||||
144 | } | ||||||
145 | |||||||
146 | 4 | 63 | unless ( defined($pd) and UNIVERSAL::isa($pd,'Tivoli::AccessManager::Admin::Context' ) ) { | ||||
147 | 2 | 17 | $resp->set_message("Incorrect syntax -- did you forget the context?"); | ||||
148 | 2 | 15 | $resp->set_isok(0); | ||||
149 | 2 | 16 | return $resp; | ||||
150 | } | ||||||
151 | |||||||
152 | 2 | 91072 | my @rc = ssoweb_list($pd,$resp); | ||||
153 | 2 | 48 | $resp->isok() && $resp->set_value( $rc[0],\@rc ); | ||||
154 | 2 | 23 | return $resp; | ||||
155 | } | ||||||
156 | |||||||
157 | sub name { | ||||||
158 | 37 | 1 | 258 | my $self = shift; | |||
159 | 37 | 328 | my $name = $self->{name} || ''; | ||||
160 | |||||||
161 | 37 | 368 | return $name; | ||||
162 | } | ||||||
163 | |||||||
164 | sub description { | ||||||
165 | 4 | 1 | 24 | my $self = shift; | |||
166 | 4 | 41 | my $desc = $self->{desc} || ''; | ||||
167 | |||||||
168 | 4 | 38 | return $desc; | ||||
169 | } | ||||||
170 | |||||||
171 | 37 | 1 | 657 | sub exist { return $_[0]->{exist} || 0; } | |||
172 | |||||||
173 | 1; | ||||||
174 | |||||||
175 - 428 | =head1 NAME Tivoli::AccessManager::Admin::SSO::Web =head1 SYNOPSIS use Tivoli::AccessManager::Admin; my $pd = Tivoli::AccessManager::Admin->new( password => $pswd); my $sso = Tivoli::AccessManager::Admin::SSO::Web->new( $pd, name => 'twiki' ); my $resp; # See what web GSO resources exist $resp = Tivoli::AccessManager::Admin::SSO::Web->list($pd); print join("\n", $resp->value); # Create the web SSO resource if it doesn't exist $sso = Tivoli::AccessManager::Admin::SSO::Web->new($pd) unless $sso->exist; my $name = $sso->name; my $desc = $sso->description $resp = $sso->delete; =head1 DESCRIPTION L<Tivoli::AccessManager::Admin::SSO::Web> provides the interface to create and manage web GSO resources. =head1 CONSTRUCTOR =head2 new(PDADMIN[, name => STRING, desc => STRING]) Creates a blessed L<Tivoli::AccessManager::Admin::SSO::Web> object and returns it. =head3 Parameters =over 4 =item PDADMIN An initialized L<Tivoli::AccessManager::Admin::Context> object. As with every other class, the only way to change the context is to destroy the L<Tivoli::AccessManager::Admin::SSO::Web> object and recreate it with the new context. This parameter is required. =item name =E<gt> STRING The name of the SSO web resource. If this is the only other parameter provided, you do not need to use a named parameter. I.e., new($pd,"name") will assume "name" is the name of the resource. This parameter is optional. =item desc =E<gt> STRING A description of the resource. This is an optional parameter. =back =head3 Returns A blessed L<Tivoli::AccessManager::Admin::SSO::Web> object if things worked. undef will be returned otherwise, along with a nasty warning to STDERR. =head2 create(PDADMIN, <NAME|name =E<gt> name, desc =E<gt> STRING>) Creates a new web GSO resource. =head3 Parameters =over 4 =item PDADMIN An initialized L<Tivoli::AccessManager::Admin::Context> object. As with every other class, the only way to change the context is to destroy the L<Tivoli::AccessManager::Admin::SSO::Web> object and recreate it with the new context. This parameter is required. =item NAME If only one parameter provided other than PDADMIN is provided, it will be interpreted as the name of the GSO web resource. You must provide the name of the resource to create -- either this way or the next way. =item name =E<gt> NAME An alternate way to provide the reource's name. =item desc =E<gt> STRING Provide a description for the GSO resource. The only way to provide this to create is to use the full named parameter call. It is an optional parameter. I should also note that this is the only way to set the description -- the API provides no way to change the description after the resource is created. =back =head3 Returns A L<Tivoli::AccessManager::Admin::Response> object, containing the L<Tivoli::AccessManager::Admin::SSO::Web> object if the create was successful. Otherwise you will get an error message. =head1 CLASS METHODS The standard disclaimer. All the class methods will return a L<Tivoli::AccessManager::Admin::Response> object unless specifically stated otherwise. See the documentation for that module on how to coax the values out. =head2 list Lists all the defined web resources. =head3 Parameters None. =head3 Returns A list of the defined web GSO resources. =head1 METHODS The standard disclaimer. All the methods will return a L<Tivoli::AccessManager::Admin::Response> object unless specifically stated otherwise. See the documentation for that module on how to coax the values out. The methods also follow the same basic pattern. If an optional parameter is provided, it will have the affect of setting the attribute. All method calls will embed the results of a 'get' in the L<Tivoli::AccessManager::Admin::Response> object. =head2 create( [NAME|name =E<gt> NAME[, desc =E<gt> STRING]] ) As you might expect, create can also be used as a method call. =head3 Parameters =over 4 =item NAME The name of the resource. This is only required if you did not provide the name of the resource when you created the object and if you are not using the named parameter call. If you provide the name to both L</"new"> and L</"create">, the name given to L</"create"> will be the one used. =item name =E<gt> NAME An alternate way to provide the name of the resource. If you want to provide a description of the resource, you must use this form. =item desc =E<gt> STRING A description of the resource. This is optional. If you provide a description to both L</"new"> and L</"create">, the description given to L</"create"> will be the one used. I should also note that this is the only way to set the description -- the API provides no way to change the description after the resource is created. =back =head3 Returns The success or failure of the operation. =head2 delete Deletes the web resource. =head3 Parameters None. =head3 Returns The success of failure of the operation. =head2 list As should be no surprise, L</"list"> can be used as an instance method as well. I don't think it makes any sense, but you can do it. =head3 Parameters None =head3 Returns A list of the defined web GSO resources. =head2 name Gets the name of the web resource. =head3 Parameters None. =head3 Returns The name of the resource. This is returned as a string -- it is not embedded in an L<Tivoli::AccessManager::Admin::Response> object. =head2 description Gets the web resource's description, if set. =head3 Parameters None. =head3 Returns The resource's description, if set. This is returned as a string -- it is not embedded in an L<Tivoli::AccessManager::Admin::Response> object. You will get an empty string if the description is not set. =head2 exist Determines if the web resource object exists. =head3 Parameters None. =head3 Returns True if the resource exists, false otherwise. Again, this is not embedded in an L<Tivoli::AccessManager::Admin::Response> object. =head1 ACKNOWLEDGEMENTS See L<Tivoli::AccessManager::Admin> for the list. This was not possible without the help of a bunch of people smarter than I. =head1 BUGS None known. =head1 AUTHOR Mik Firestone E<lt>mikfire@gmail.comE<gt> =head1 COPYRIGHT Copyright (c) 2006-2013 Mik Firestone. All rights reserved. This program is free software; you can redistibute it and/or modify it under the same terms as Perl itself. All references to TAM, Tivoli Access Manager, etc are copyrighted, trademarked and otherwise patented by IBM. =cut | ||||||
429 |