summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Prykop <jonathan@freeside.biz>2016-12-17 19:53:23 -0600
committerJonathan Prykop <jonathan@freeside.biz>2016-12-17 19:53:23 -0600
commit80bfc5e1b11694553ddaa48e3b181462cfadc9dd (patch)
treefd2c7d2547e9edba5222aab08768b0679bf03cb3
parentdbb1f2c9894385044ed85b64d9016b2eeb06d649 (diff)
73443: Selfservice NG Password reset page
-rw-r--r--FS/FS/ClientAPI_XMLRPC.pm1
-rw-r--r--ng_selfservice/elements/add_password_validation.php51
-rw-r--r--ng_selfservice/images/error.pngbin0 -> 666 bytes
-rw-r--r--ng_selfservice/images/tick.pngbin0 -> 537 bytes
-rw-r--r--ng_selfservice/password.php89
-rw-r--r--ng_selfservice/xmlrpc_validate_passwd.php15
6 files changed, 155 insertions, 1 deletions
diff --git a/FS/FS/ClientAPI_XMLRPC.pm b/FS/FS/ClientAPI_XMLRPC.pm
index 3167aa0..e69a06e 100644
--- a/FS/FS/ClientAPI_XMLRPC.pm
+++ b/FS/FS/ClientAPI_XMLRPC.pm
@@ -181,6 +181,7 @@ sub ss2clientapi {
'reset_passwd' => 'MyAccount/reset_passwd',
'check_reset_passwd' => 'MyAccount/check_reset_passwd',
'process_reset_passwd' => 'MyAccount/process_reset_passwd',
+ 'validate_passwd' => 'MyAccount/validate_passwd',
'list_tickets' => 'MyAccount/list_tickets',
'create_ticket' => 'MyAccount/create_ticket',
'get_ticket' => 'MyAccount/get_ticket',
diff --git a/ng_selfservice/elements/add_password_validation.php b/ng_selfservice/elements/add_password_validation.php
new file mode 100644
index 0000000..6938437
--- /dev/null
+++ b/ng_selfservice/elements/add_password_validation.php
@@ -0,0 +1,51 @@
+<SCRIPT>
+function add_password_validation (fieldid,nologin) {
+ var inputfield = document.getElementById(fieldid);
+ inputfield.onchange = function () {
+ var fieldid = this.id+'_result';
+ var resultfield = document.getElementById(fieldid);
+ var svcnum = '';
+ var svcfield = document.getElementById(this.id+'_svcnum');
+ if (svcfield) {
+ svcnum = svcfield.options[svcfield.selectedIndex].value;
+ }
+ if (this.value) {
+ resultfield.innerHTML = '<SPAN STYLE="color: blue;">Validating password...</SPAN>';
+ var validate_data = {
+ fieldid: fieldid,
+ check_password: this.value,
+ };
+ if (!nologin) {
+ validate_data['svcnum'] = svcnum;
+ }
+ $.ajax({
+ url: 'xmlrpc_validate_passwd.php',
+ data: validate_data,
+ method: 'POST',
+ success: function ( result ) {
+ result = JSON.parse(result);
+ var resultfield = document.getElementById(fieldid);
+ if (resultfield) {
+ var errorimg = '<IMG SRC="images/error.png" style="width: 1em; display: inline-block; padding-right: .5em">';
+ var validimg = '<IMG SRC="images/tick.png" style="width: 1em; display: inline-block; padding-right: .5em">';
+ if (result.password_valid) {
+ resultfield.innerHTML = validimg+'<SPAN STYLE="color: green;">Password valid!</SPAN>';
+ } else if (result.password_invalid) {
+ resultfield.innerHTML = errorimg+'<SPAN STYLE="color: red;">'+result.password_invalid+'</SPAN>';
+ } else {
+ resultfield.innerHTML = '';
+ }
+ }
+ },
+ error: function ( jqXHR, textStatus, errorThrown ) {
+ var resultfield = document.getElementById(fieldid);
+ console.log('ajax error: '+textStatus+'+'+errorThrown);
+ if (resultfield) {
+ resultfield.innerHTML = '';
+ }
+ },
+ });
+ }
+ };
+}
+</SCRIPT>
diff --git a/ng_selfservice/images/error.png b/ng_selfservice/images/error.png
new file mode 100644
index 0000000..628cf2d
--- /dev/null
+++ b/ng_selfservice/images/error.png
Binary files differ
diff --git a/ng_selfservice/images/tick.png b/ng_selfservice/images/tick.png
new file mode 100644
index 0000000..a9925a0
--- /dev/null
+++ b/ng_selfservice/images/tick.png
Binary files differ
diff --git a/ng_selfservice/password.php b/ng_selfservice/password.php
index 41296ed..a6e6795 100644
--- a/ng_selfservice/password.php
+++ b/ng_selfservice/password.php
@@ -1,5 +1,92 @@
<? $title ='Change Password'; include('elements/header.php'); ?>
<? $current_menu = 'password.php'; include('elements/menu.php'); ?>
-Chagne password
+<?
+$error = '';
+$pwd_change_success = false;
+if ( isset($_POST['svcnum']) ) {
+
+ $pwd_change_result = $freeside->myaccount_passwd(array(
+ 'session_id' => $_COOKIE['session_id'],
+ 'svcnum' => $_POST['svcnum'],
+ 'new_password' => $_POST['new_password'],
+ 'new_password2' => $_POST['new_password2'],
+ ));
+
+ if ($pwd_change_result['error']) {
+ $error = $pwd_change_result['error'];
+ } else {
+ $pwd_change_success = true;
+ }
+}
+
+if ($pwd_change_success) {
+?>
+
+<P>Password changed for <? echo $pwd_change_result['value'],' ',$pwd_change_result['label'] ?>.</P>
+
+<?
+} else {
+ $pwd_change_svcs = $freeside->list_svcs(array(
+ 'session_id' => $_COOKIE['session_id'],
+ 'svcdb' => 'svc_acct',
+ ));
+ if (isset($pwd_change_svcs['error'])) {
+ $error = $error || $pwd_change_svcs['error'];
+ }
+ if (!isset($pwd_change_svcs['svcs'])) {
+ $pwd_change_svcs['svcs'] = $pwd_change_svcs['svcs'];
+ $error = $error || 'Unknown error loading services';
+ }
+ if ($error) {
+ include('elements/error.php');
+ }
+?>
+
+<FORM METHOD="POST">
+<TABLE BGCOLOR="#cccccc">
+ <TR>
+ <TH ALIGN="right">Change password for account: </TH>
+ <TD>
+ <SELECT ID="new_password_svcnum" NAME="svcnum">
+<?
+ $selected_svcnum = isset($_POST['svcnum']) ? $_POST['svcnum'] : $pwd_change_svcs['svcnum'];
+ foreach ($pwd_change_svcs['svcs'] as $svc) {
+?>
+ <OPTION VALUE="<? echo $svc['svcnum'] ?>"<? echo $selected_svcnum == $svc['svcnum'] ? ' SELECTED' : '' ?>>
+ <? echo $svc['label'],': ',$svc['value'] ?>
+ </OPTION>
+<?
+ }
+?>
+ </SELECT>
+ </TD>
+ </TR>
+
+ <TR>
+ <TH ALIGN="right">New password: </TH>
+ <TD>
+ <INPUT ID="new_password" TYPE="password" NAME="new_password" SIZE="18">
+ <DIV ID="new_password_result"></DIV>
+<? include('elements/add_password_validation.php'); ?>
+ <SCRIPT>add_password_validation('new_password');</SCRIPT>
+ </TD>
+ </TR>
+
+ <TR>
+ <TH ALIGN="right">Re-enter new password: </TH>
+ <TD><INPUT TYPE="password" NAME="new_password2" SIZE="18"></TD>
+ </TR>
+
+</TABLE>
+<BR>
+
+<INPUT TYPE="submit" VALUE="Change password">
+
+</FORM>
+
+<?
+} // end if $pwd_change_show_form
+?>
+
<? include('elements/menu_footer.php'); ?>
<? include('elements/footer.php'); ?>
diff --git a/ng_selfservice/xmlrpc_validate_passwd.php b/ng_selfservice/xmlrpc_validate_passwd.php
new file mode 100644
index 0000000..5632dc3
--- /dev/null
+++ b/ng_selfservice/xmlrpc_validate_passwd.php
@@ -0,0 +1,15 @@
+<?
+
+require_once('elements/session.php');
+
+$xmlrpc_args = array(
+ fieldid => $_POST['fieldid'],
+ check_password => $_POST['check_password'],
+ svcnum => $_POST['svcnum'],
+ session_id => $_COOKIE['session_id']
+);
+
+$result = $freeside->validate_passwd($xmlrpc_args);
+echo json_encode($result);
+
+?>