source: tags/5.2.1/LATMOS-Accounts/lib/LATMOS/Accounts/Bases/OCHelper/User.pm

Last change on this file was 1076, checked in by nanardon, 12 years ago

Factorize default value computation

This avoid the difference of behavior between OCHelper and direct object
creation.

File size: 3.5 KB
Line 
1package LATMOS::Accounts::Bases::OCHelper::User;
2
3# $Id: User.pm 2932 2010-08-10 17:19:21Z nanardon $
4
5use strict;
6use warnings;
7use base qw(LATMOS::Accounts::Bases::OCHelper);
8use LATMOS::Accounts::Utils;
9
10=head1 NAME
11
12LATMOS::Accounts::Bases::OCHelper::User -
13Helper to create user in L<LATMOS::Accounts> system
14
15=cut
16
17sub _step {
18    my ($self, $info) = @_;
19    if ($info->{step} <= 0) {
20        $info->{name}{ask} = 1;
21        push(@{$info->{ask}}, qw(givenName sn));
22        $info->{step} = 1;
23        if (!($info->{name}{content} || 
24              ($info->{contents}{sn}) && $info->{contents}{givenName})) {
25            return 'NEEDINFO';
26        }
27    } 
28    if ($info->{step} == 1) {
29        $info->{step} = 2;
30        my $login = $info->{name}{content};
31        if (!$login) {
32            $info->{name}{ask} = 1;
33            # Try to find a login:
34           
35            if ($info->{contents}{sn}) {
36                my $login = lc(to_ascii($info->{contents}{sn}));
37                $login =~ s/ //g; # strip space in login
38                length($login) > 10 and $login = substr($login, 0, 8);
39                for (1) {
40                    $self->base->get_object('user', $login) or do {
41                        $info->{name}{content} = $login;
42                        last;
43                    };
44                    if ($info->{contents}{givenName}) {
45                        length($login) > 8 and $login = substr($login, 0, 8);
46                        $login .= substr(lc(to_ascii($info->{contents}{givenName})), 0, 1);
47                        $self->base->get_object('user', $login) or do {
48                            $info->{name}{contents} = $login;
49                            last;
50                        };
51                    }
52                }
53            }
54        } else {
55            $self->base->get_object('user', $login) and do {
56                $info->{name}{ask} = 1;
57            }
58        }
59        push(@{$info->{ask}}, 'uidNumber');
60        push(@{$info->{ask}}, 'gidNumber');
61
62       my %default = $self->base->compute_default(
63            'user', $login || '',
64            %{ $info->{contents} || {} }
65        );
66
67        if ($default{mail}) {
68            push(@{$info->{ask}}, 'mail');
69            $info->{contents}{mail} = $default{mail};
70        }
71        if (my $attr = $self->base->attribute('user', 'aliases')) {
72            if (!$attr->ro) {
73                push(@{$info->{ask}}, 'aliases');
74                $info->{contents}{aliases} = $default{aliases};
75            }
76        }
77        if (my $attr = $self->base->attribute('user', 'revaliases')) {
78            if (!$attr->ro) {
79                push(@{$info->{ask}}, 'revaliases');
80                $info->{contents}{revaliases} = $default{revaliases};
81            }
82        }
83        return 'NEEDINFO';
84
85
86    } elsif ($info->{step} == 2) {
87        if ($self->base->create_c_object($self->otype,
88                $info->{name}{content},
89                %{$info->{contents} || {}},
90            )) {
91            return 'CREATED';
92        } else {
93            return 'ERROR';
94        }
95    } else {
96        return undef;
97    }
98}
99
1001;
101
102__END__
103
104=head1 SEE ALSO
105
106L<LATMOS::Accounts::Bases::OCHelper>
107
108=head1 AUTHOR
109
110Thauvin Olivier, E<lt>olivier.thauvin@latmos.ipsl.frE<gt>
111
112=head1 COPYRIGHT AND LICENSE
113
114Copyright (C) 2012 by Thauvin Olivier
115
116This library is free software; you can redistribute it and/or modify
117it under the same terms as Perl itself, either Perl version 5.10.0 or,
118at your option, any later version of Perl 5 you may have available.
119
120=cut
Note: See TracBrowser for help on using the repository browser.