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