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

Last change on this file since 941 was 941, checked in by nanardon, 12 years ago
  • remove space from login and mail when creating user
File size: 3.1 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                $login =~ s/ //g; # strip space in login
27                length($login) > 10 and $login = substr($login, 0, 8);
28                for (1) {
29                    $self->base->get_object('user', $login) or do {
30                        $info->{name}{content} = $login;
31                        last;
32                    };
33                    if ($info->{contents}{givenName}) {
34                        length($login) > 8 and $login = substr($login, 0, 8);
35                        $login .= substr(lc(to_ascii($info->{contents}{givenName})), 0, 1);
36                        $self->base->get_object('user', $login) or do {
37                            $info->{name}{contents} = $login;
38                            last;
39                        };
40                    }
41                }
42            }
43        } else {
44            $self->base->get_object('user', $login) and do {
45                $info->{name}{ask} = 1;
46            }
47        }
48        push(@{$info->{ask}}, 'uidNumber');
49        push(@{$info->{ask}}, 'gidNumber');
50        my $mailid = $info->{contents}{givenName} && $info->{contents}{sn}
51            ? sprintf('%s.%s',
52                to_ascii(lc($info->{contents}{givenName})),
53                to_ascii(lc($info->{contents}{sn})),)
54            : undef;
55        $mailid =~ s/ /-/g if ($mailid); # replace space by '-' in mail
56        push(@{$info->{ask}}, 'mail');
57        $info->{contents}{mail} = $mailid && $self->base->{defattr}{'user.maildomain'}
58            ? sprintf('%s@%s', $mailid,
59                $self->base->{defattr}{'user.maildomain'})
60            : undef;
61        if (my $attr = $self->base->attribute('user', 'aliases')) {
62            if (!$attr->ro) {
63                push(@{$info->{ask}}, 'aliases');
64                $info->{contents}{aliases} = $mailid
65            }
66        }
67        if (my $attr = $self->base->attribute('user', 'revaliases')) {
68            if (!$attr->ro) {
69                push(@{$info->{ask}}, 'revaliases');
70                $info->{contents}{revaliases} = $mailid
71            }
72        }
73        return 'NEEDINFO';
74
75
76    } elsif ($info->{step} == 2) {
77        if ($self->base->create_c_object($self->otype,
78                $info->{name}{content},
79                %{$info->{contents} || {}},
80            )) {
81            return 'CREATED';
82        } else {
83            return 'ERROR';
84        }
85    } else {
86        return undef;
87    }
88}
89
901;
Note: See TracBrowser for help on using the repository browser.