make password-insecure option work when adding a new svc_acct, #40236
[freeside.git] / httemplate / misc / xmlhttp-validate_password.html
1 <%doc>
2 Requires cgi params 'password' (plaintext) and 'sub' ('validate_password' is
3 only acceptable value.)  Also accepts 'svcnum' (for svc_acct, will otherwise
4 create an empty dummy svc_acct), 'pkgnum' (for when the svc_acct isn't yet
5 inserted), and 'fieldid' (for html post-processing, passed along in results
6 for convenience.)
7
8 Returns a json-encoded hashref with keys of 'valid' (set to 1 if object is
9 valid), 'error' (error text if password is invalid) or 'syserror' (error text
10 if password could not be validated.)  Only one of these keys will be set.
11 Will also set 'fieldid' if it was passed.
12 </%doc>
13
14 <% encode_json($result) %>
15
16 <%init>
17
18 my $validate_password = sub {
19   my %arg = $cgi->param('arg');
20   my %result;
21
22   $result{'fieldid'} = $arg{'fieldid'}
23     if $arg{'fieldid'} =~ /^\w+$/;
24
25   $result{'syserror'} = 'Request is not POST' unless $cgi->request_method eq 'POST';
26   return \%result if $result{'syserror'};
27
28   my $password = $arg{'password'};
29   $result{'syserror'} = 'Invoked without password' unless $password;
30   return \%result if $result{'syserror'};
31
32   my $svcnum = $arg{'svcnum'};
33   $result{'syserror'} = 'Invalid svcnum' unless $svcnum =~ /^\d*$/;
34   return \%result if $result{'syserror'};
35
36   my $pkgnum = $arg{'pkgnum'};
37   $result{'syserror'} = 'Invalid pkgnum' unless $pkgnum =~ /^\d*$/;
38   return \%result if $result{'syserror'};
39
40   my $svc_acct = $svcnum 
41     ? qsearchs('svc_acct',{'svcnum' => $svcnum})
42     : FS::svc_acct->new({ 'pkgnum' => $pkgnum });
43   $result{'syserror'} = 'Could not find service' unless $svc_acct;
44   return \%result if $result{'syserror'};
45
46   $result{'error'} = $svc_acct->is_password_allowed($password);
47   $result{'valid'} = 1 unless $result{'error'};
48   return \%result;
49 };
50
51 my $result = ($cgi->param('sub') eq 'validate_password')
52              ? &$validate_password()
53              : { 'syserror' => 'Invalid sub' };
54
55 </%init>