This commit was generated by cvs2svn to compensate for changes in r2526,
[freeside.git] / FS / FS / ClientAPI / passwd.pm
1 package FS::ClientAPI::passwd;
2
3 use strict;
4 use FS::Record qw(qsearchs);
5 use FS::svc_acct;
6 #use FS::svc_domain;
7
8 use FS::ClientAPI; #hmm
9 FS::ClientAPI->register_handlers(
10   'passwd/passwd' => \&passwd,
11   'passwd/chfn' => \&chfn,
12   'passwd/chsh' => \&chsh,
13 );
14
15 sub passwd {
16   my $packet = shift;
17
18   my $domain = $FS::ClientAPI::domain || $packet->{'domain'};
19   my $svc_domain = qsearchs('svc_domain', { 'domain' => $domain } )
20     or return { error => "Domain $domain not found" };
21
22   my $old_password = $packet->{'old_password'};
23   my $new_password = $packet->{'new_password'};
24   my $new_gecos = $packet->{'new_gecos'};
25   my $new_shell = $packet->{'new_shell'};
26
27 #false laziness w/FS::ClientAPI::MyAccount::login (needs to handle encrypted pw)
28   my $svc_acct =
29     ( length($old_password) < 13
30       && qsearchs( 'svc_acct', { 'username'  => $packet->{'username'},
31                                  'domsvc'    => $svc_domain->svcnum,
32                                  '_password' => $old_password } )
33     )
34     || qsearchs( 'svc_acct', { 'username'  => $packet->{'username'},
35                                'domsvc'    => $svc_domain->svcnum,
36                                '_password' => $old_password } );
37
38   unless ( $svc_acct ) { return { error => 'Incorrect password.' } }
39
40   my %hash = $svc_acct->hash;
41   my $new_svc_acct = new FS::svc_acct ( \%hash );
42   $new_svc_acct->setfield('_password', $new_password ) 
43     if $new_password && $new_password ne $old_password;
44   $new_svc_acct->setfield('finger',$new_gecos) if $new_gecos;
45   $new_svc_acct->setfield('shell',$new_shell) if $new_shell;
46   my $error = $new_svc_acct->replace($svc_acct);
47
48   return { error => $error };
49
50 }
51
52 sub chfn {}
53
54 sub chsh {}
55
56 1;
57