source: LATMOS-Accounts/lib/LATMOS/Accounts/Bases/OCHelper/User.pm @ 861

Last change on this file since 861 was 861, checked in by nanardon, 13 years ago
  • reimport missing files from previous svn
File size: 2.9 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
10sub _step {
11    my ($self, $info) = @_;
12    if ($info->{step} == 0) {
13        $info->{name}{ask} = 1;
14        push(@{$info->{ask}}, qw(givenName sn));
15        $info->{step} = 1;
16        return 'NEEDINFO';
17    } elsif ($info->{step} == 1) {
18        $info->{step} = 2;
19        my $login = $info->{name}{content};
20        if (!$login) {
21            $info->{name}{ask} = 1;
22            # Try to find a login:
23           
24            if ($info->{contents}{sn}) {
25                my $login = lc(to_ascii($info->{contents}{sn}));
26                length($login) > 10 and $login = substr($login, 0, 8);
27                for (1) {
28                    $self->base->get_object('user', $login) or do {
29                        $info->{name}{content} = $login;
30                        last;
31                    };
32                    if ($info->{contents}{givenName}) {
33                        length($login) > 8 and $login = substr($login, 0, 8);
34                        $login .= substr(lc(to_ascii($info->{contents}{givenName})), 0, 1);
35                        $self->base->get_object('user', $login) or do {
36                            $info->{name}{contents} = $login;
37                            last;
38                        };
39                    }
40                }
41            }
42        } else {
43            $self->base->get_object('user', $login) and do {
44                $info->{name}{ask} = 1;
45            }
46        }
47        push(@{$info->{ask}}, 'uidNumber');
48        push(@{$info->{ask}}, 'gidNumber');
49        my $mailid = $info->{contents}{givenName} && $info->{contents}{sn}
50            ? sprintf('%s.%s',
51                to_ascii(lc($info->{contents}{givenName})),
52                to_ascii(lc($info->{contents}{sn})),)
53            : undef;
54        push(@{$info->{ask}}, 'mail');
55        $info->{contents}{mail} = $mailid && $self->base->{defattr}{'user.maildomain'}
56            ? sprintf('%s@%s', $mailid,
57                $self->base->{defattr}{'user.maildomain'})
58            : undef;
59        if (my $attr = $self->base->attribute('user', 'aliases')) {
60            if (!$attr->ro) {
61                push(@{$info->{ask}}, 'aliases');
62                $info->{contents}{aliases} = $mailid
63            }
64        }
65        if (my $attr = $self->base->attribute('user', 'revaliases')) {
66            if (!$attr->ro) {
67                push(@{$info->{ask}}, 'revaliases');
68                $info->{contents}{revaliases} = $mailid
69            }
70        }
71        return 'NEEDINFO';
72
73
74    } elsif ($info->{step} == 2) {
75        if ($self->base->create_c_object($self->otype,
76                $info->{name}{content},
77                %{$info->{contents} || {}},
78            )) {
79            return 'CREATED';
80        } else {
81            return 'ERROR';
82        }
83    } else {
84        return undef;
85    }
86}
87
881;
Note: See TracBrowser for help on using the repository browser.