21 $serviceShowInfo =
false;
22 $serviceLoadMenu =
false;
23 $serviceShowMenu =
false;
24 $serviceAllowReadonly =
true;
29 require_once(dirname(__FILE__) .
'/../library/hcuService.i');
31 $EMAIL_FLAG = GetMsgTxValue(
'MSGTX_FORCE_EM');
34 $dms_ok = array(
"action"=>
"string",
35 "email"=>
"string",
"emailValid"=>
"string",
"egenl"=>
"string",
36 "alertEmails"=>
"string",
37 "old"=>
"string",
"new1"=>
"string",
38 "new2"=>
"string",
"sawhints"=>
"string",
39 "security_qst"=>
"prefix_s",
"security_rsp"=>
"prefix_s",
40 "security_curpwd"=>
"string",
"security_token"=>
"string",
41 "security_confidence"=>
"string",
42 "security_phones"=>
"string",
43 "user_alias"=>
"string",
"user_alias2"=>
"string",
44 "account_data"=>
"array" 48 HCU_ImportVars($HB_ENV,
"HCUPOST", $dms_ok);
50 header(
'Content-Type: application/json');
55 $logger = $HB_ENV[
"SYSENV"][
"logger"];
58 $usrInfo = GetUserbyName($HB_ENV[
'dbh'], $HB_ENV[
'Cu'], $HB_ENV[
'Cn']);
59 $usrDeviceCookieExists = isValidDeviceCookie($HB_ENV[
'Cu'], $usrInfo);
75 if (!PermCheckFeatureScreen($dbh, $HB_ENV, $MC, FEATURE_BASIC,
'',
false)) {
76 throw new Exception (HCU_JsonEncode(Array($MC->msg(
'Rights not set', HCU_DISPLAY_AS_HTML))));
80 require_once(dirname(__FILE__) .
'/../../shared/library/cu_fun.i');
93 $live = (dirname($_SERVER[
'PHP_SELF']) ==
'/hculive7');
96 $showtx =
", show_livetx('{$HB_ENV['cu']}','{$HB_ENV['Cn']}') ";
99 $showtx =
", show_txacct('{$HB_ENV['cu']}','{$HB_ENV['Cn']}') ";
114 $requested_operation = $HB_ENV[
"HCUPOST"][
"action"];
115 switch ( $requested_operation ) {
119 $emailRequired = ($HB_ENV[
'Fmsg_tx'] & $EMAIL_FLAG);
120 $paramEmailAddress = $HB_ENV[
'HCUPOST'][
'email'];
121 $updFields[
'settings_email'][
'email'] = $HB_ENV[
'HCUPOST'][
'email'];
122 $updFields[
'settings_email'][
'egenl'] = $HB_ENV[
'HCUPOST'][
'egenl'];
123 $updFields[
'settings_email'][
'verify'] = $emailRequired;
124 $updFields[
'settings_email'][
'valid'] = $HB_ENV[
'HCUPOST'][
'emailValid'];
127 $aryUpdate = Validate_Settings($dbh, $HB_ENV, $updFields, $MC);
129 if ($aryUpdate[
'status'][
'code'] ==
'000') {
130 $aryUpdate = Update_User_Settings($dbh, $HB_ENV, $MC, $updFields,
false);
133 if ($aryUpdate[
'status'][
'code'] !=
'000') {
135 $aryErrors = array();
136 for ( $e = 0; $e < count( $aryUpdate[
"status"][
"errors"] ); $e++ ) {
137 $aryErrors[] = array(
"message" => $aryUpdate[
"status"][
"errors"][$e] );
140 throw new Exception (HCU_JsonEncode($aryErrors));
143 if ( $emailRequired ) {
145 $reqFlag =
"&Fmsg_tx=" . ($HB_ENV[
'Fmsg_tx'] ^ $EMAIL_FLAG);
147 $_COOKIE[
'Ticket'] = SetTicket($HB_ENV, $_COOKIE[
'Ticket'],
"Ml=$paramEmailAddress" . $reqFlag);
150 $aryResult[
"email"] = $HB_ENV[
'HCUPOST'][
'email'];
151 $aryResult[
"egenl"] = $HB_ENV[
'HCUPOST'][
'egenl'];
154 $aryInfo = array(
"message" => $MC->msg(
'EMail Settings Changed', HCU_DISPLAY_AS_RAW) );
157 if ( strlen( $HB_ENV[
"HCUPOST"][
"alertEmails"] ) > 0 ) {
160 $alertInfo = Get_AlertsDetailed( $dbh, $HB_ENV[
"Cu"], $HB_ENV[
"Uid"], $HB_ENV[
"Fset3"]);
161 $alertList = $alertInfo[
"data"];
163 $emailList = explode(
"|", $HB_ENV[
"HCUPOST"][
"alertEmails"] );
166 for ( $a = 0; $a < count( $alertList ); $a++ ) {
167 if ( $alertList[$a][
"emailtype"] ==
"E" &&
168 in_array( $alertList[$a][
"notifyto"], $emailList ) ) {
170 $sql =
"UPDATE cu_alerts 171 SET notifyto='{$HB_ENV['HCUPOST']['email']}' 172 WHERE user_id={$HB_ENV["Uid
"]} 173 AND id={$alertList[$a]["id"]}";
175 db_query($sql, $dbh);
183 case "read_alert_emails":
185 $emailAlertList = array();
186 $alertInfo = Get_AlertsDetailed( $dbh, $HB_ENV[
"Cu"], $HB_ENV[
"Uid"], $HB_ENV[
"Fset3"]);
187 $alertList = $alertInfo[
"data"];
188 $defaultEmail = $HB_ENV[
'Ml'];
190 for( $i = 0; $i < count($alertList); $i ++) {
191 if( $alertList[$i][
'emailtype'] ==
'E' ) {
194 for ($j = 0; $j < count( $emailAlertList ); $j++ ) {
195 if($emailAlertList[$j][
'email'] == $alertList[$i][
'notifyto']) {
198 if( $emailAlertList[$j][
"type"] != $alertList[$i][
"type_name"] ) {
199 $emailAlertList[$j][
"type"] =
"Multiple";
205 $emailAlertList[] = array(
207 "type" => $alertList[$i][
"type_name"],
208 "email" => $alertList[$i][
"notifyto"],
209 "choice" => $alertList[$i][
"notifyto"] == $defaultEmail ?
"Y" :
"N" );
214 $aryResult = $emailAlertList;
221 $updFields[
'settings_password'][
'current'] = $HB_ENV[
'HCUPOST'][
'old'];
222 $updFields[
'settings_password'][
'newpasswd'] = $HB_ENV[
'HCUPOST'][
'new1'];
223 $updFields[
'settings_password'][
'confpasswd'] = $HB_ENV[
'HCUPOST'][
'new2'];
226 if ( $HB_ENV[
'HCUPOST'][
'sawhints'] !=
"Y" ) {
227 $aryErrors[] = array(
"message" => $MC->msg(
'Please review the password guidelines', HCU_DISPLAY_AS_RAW) );
229 throw new Exception (HCU_JsonEncode($aryErrors));
232 $aryResult = Validate_PwdRules( $dbh, $HB_ENV, $updFields, $MC );
235 if ( $aryResult[
"status"][
"code"] !=
'000' ) {
236 for ( $e = 0; $e < count( $aryResult[
"status"][
"errors"] ); $e++ ) {
237 $aryErrors[] = array(
"message" => $aryResult[
"status"][
"errors"][$e] );
240 throw new Exception (HCU_JsonEncode($aryErrors));
244 $aryUpdate = Validate_Settings($dbh, $HB_ENV, $updFields, $MC);
246 if ($aryUpdate[
'status'][
'code'] ==
'000') {
247 $aryUpdate = Update_User_Settings($dbh, $HB_ENV, $MC, $updFields,
false);
249 if ($aryUpdate[
'status'][
'code'] !=
'000') {
251 for ( $e = 0; $e < count( $aryUpdate[
"status"][
"errors"] ); $e++ ) {
252 $aryErrors[] = array(
"message" => $aryUpdate[
"status"][
"errors"][$e] );
255 throw new Exception (HCU_JsonEncode($aryErrors));
258 $aryResult[
"success"] = 0;
261 SetTicket($HB_ENV, $_COOKIE[
'Ticket'],
"Ffchg=N");
264 $aryInfo = array(
"message" => $MC->msg(
'Update Completed', HCU_DISPLAY_AS_RAW) );
268 for ( $e = 0; $e < count( $aryUpdate[
"status"][
"errors"] ); $e++ ) {
269 $aryErrors[] = array(
"message" => $aryUpdate[
"status"][
"errors"][$e] );
272 throw new Exception (HCU_JsonEncode($aryErrors));
276 case "challenge_save":
279 if ($HB_ENV[
'HCUPOST'][
'security_token'] !=
'') {
282 $mbrPwd = GetUserInfo($dbh, $HB_ENV, $MC, Array(
"user_id" => $HB_ENV[
'Uid'],
"cu" => $HB_ENV[
'Cu']));
284 if ($mbrPwd[
'status'][
'code'] !=
'000') {
286 for ( $e = 0; $e < count( $mbrPwd[
"status"][
"errors"] ); $e++ ) {
287 $aryErrors[] = array(
"message" => $mbrPwd[
"status"][
"errors"][$e] );
292 $mbrPwdHash = $mbrPwd[
'data'][
'cuusers_passwd'];
294 $randomNbr = Return_Random4Challenge($HB_ENV);
296 $aryMbrChg = Get_MemberChallengeResponses($dbh, $HB_ENV, $HB_ENV[
'Cn']);
300 foreach ($aryMbrChg as $questId => $questResp) {
301 $choices[] = $questId;
304 $choiceString = implode( $choices );
307 $securityToken = sha1($mbrPwdHash . $randomNbr . $choiceString . $HB_ENV[
'secret']);
309 if ($securityToken == $HB_ENV[
'HCUPOST'][
'security_token']) {
312 $aryErrors[] = array(
"message" => $MC->msg(
'Invalid Authentication', HCU_DISPLAY_AS_RAW) );
316 $aryErrors[] = array(
"message" => $MC->msg(
'Invalid Authentication', HCU_DISPLAY_AS_RAW) );
319 if ( count( $aryErrors ) ) {
320 throw new Exception (HCU_JsonEncode($aryErrors));
326 $updFields[
'settings_confidence'][
'confword'] = $HB_ENV[
'HCUPOST'][
'security_confidence'];
327 if ($HB_ENV[
'Ffreset'] > 0) {
329 if (HCU_array_key_exists(
'cuusers_userflags', $mbrPwd[
'data'])) {
333 $tmpVal = (int) HCU_array_key_value(
'cuusers_userflags', $mbrPwd[
'data']);
335 $tmpVal = ~(~$tmpVal | GetUserFlagsValue(
'MEM_FORCE_RESET'));
337 $updFields[
'settings_confidence'][
'userflags'] = $tmpVal;
342 $newChoices = array();
343 if (intval($HB_ENV[
'flagset3'] & GetFlagsetValue(
"CU3_MFA_AUTHCODE")) === 0) {
344 while(HCU_array_key_exists(
"security_qst{$questIdx}", $HB_ENV[
'HCUPOST'])) {
345 $updFields[
'settings_questions'][] = Array(
'cqid' => $HB_ENV[
'HCUPOST'][
"security_qst{$questIdx}"],
'display' => $HB_ENV[
'HCUPOST'][
"security_rsp{$questIdx}"]);
348 $newChoices[] = $HB_ENV[
'HCUPOST'][
"security_qst{$questIdx}"];
354 if (HCU_array_key_exists(
"security_phones", $HB_ENV[
'HCUPOST'])) {
355 $phonesJson = $HB_ENV[
'HCUPOST'][
'security_phones'];
356 $phonesAry = HCU_JsonDecode($phonesJson);
357 $updFields[
'settings_phones'][
'mobile'] = $phonesAry[
'mobile'];
362 $aryUpdate = Validate_Settings($dbh, $HB_ENV, $updFields, $MC);
364 if ($aryUpdate[
'status'][
'code'] ==
'000') {
369 $aryUpdate = Update_User_Security($dbh, $HB_ENV, $MC, $updFields);
370 if ($aryUpdate[
'status'][
'code'] !=
'000') {
372 for ( $e = 0; $e < count( $aryUpdate[
"status"][
"errors"] ); $e++ ) {
373 $aryErrors[] = array(
"message" => $aryUpdate[
"status"][
"errors"][$e] );
376 throw new Exception (HCU_JsonEncode($aryErrors));
380 $aryUpdate = Update_User_Settings($dbh, $HB_ENV, $MC, $updFields,
false);
381 if ($aryUpdate[
'status'][
'code'] !=
'000') {
383 for ( $e = 0; $e < count( $aryUpdate[
"status"][
"errors"] ); $e++ ) {
384 $aryErrors[] = array(
"message" => $aryUpdate[
"status"][
"errors"][$e] );
387 throw new Exception (HCU_JsonEncode($aryErrors));
392 $choiceString = implode( $newChoices );
395 $aryResult[
"security_token"] = sha1($mbrPwdHash . $randomNbr . $choiceString . $HB_ENV[
'secret']);
397 $aryResult[
"success"] = 0;
400 $aryInfo = array(
"message" => $MC->msg(
'Update Completed', HCU_DISPLAY_AS_RAW) );
404 for ( $e = 0; $e < count( $aryUpdate[
"status"][
"errors"] ); $e++ ) {
405 $aryErrors[] = array(
"message" => $aryUpdate[
"status"][
"errors"][$e] );
408 throw new Exception (HCU_JsonEncode($aryErrors));
416 $old = $HB_ENV[
'HCUPOST'][
'old'];
417 $userAlias = $HB_ENV[
'HCUPOST'][
'user_alias'];
418 $userAlias2 = $HB_ENV[
'HCUPOST'][
'user_alias2'];
420 # validate that password entered matches password in db 421 $sql =
"select passwd from {$Cu}user where user_name='$Cn'";
422 $sth = db_query($sql,$dbh);
424 list($savedPasswd) = db_fetch_array($sth,0);
425 db_free_result($sth);
427 $savedPasswd = preg_replace(
"/ +$/",
"",$savedPasswd);
428 if (!password_verify($old, $savedPasswd)) {
429 $aryErrors[] = array(
"message" => $MC->msg(
'Invalid Authentication', HCU_DISPLAY_AS_RAW) );
431 throw new Exception (HCU_JsonEncode($aryErrors));
435 $upd_fields[
'settings_password'][
'current'] = $old;
436 $upd_fields[
'settings_alias'][
'username'] = $userAlias;
437 $upd_fields[
'settings_alias'][
'username_confirm'] = $userAlias2;
438 $aryUpdate = Validate_Settings($dbh, $HB_ENV, $upd_fields, $MC);
441 unset($upd_fields[
'settings_password']);
443 if ($aryUpdate[
'status'][
'code'] ==
'000') {
445 $aryUpdate = Update_User_Settings($dbh, $HB_ENV, $MC, $upd_fields,
false);
448 if ($aryUpdate[
'status'][
'code'] !=
'000') {
450 $aryErrors = array();
451 for ( $e = 0; $e < count( $aryUpdate[
"status"][
"errors"] ); $e++ ) {
452 $aryErrors[] = array(
"message" => $aryUpdate[
"status"][
"errors"][$e] );
455 throw new Exception (HCU_JsonEncode($aryErrors));
459 $_COOKIE[
'Ticket'] = SetTicket($HB_ENV, $_COOKIE[
'Ticket'],
"Cn=$userAlias");
460 $HB_ENV[
'Cn'] = $userAlias;
464 $aryInfo = array(
"message" => $MC->msg(
'Member Settings Changed', HCU_DISPLAY_AS_RAW) );
466 case "acct_desc_read":
467 $HB_ENV[
"doEncrypt"]=
true;
470 $arry_balances = Get_Balances($dbh, $HB_ENV, $callerContext=
"acct_desc_read");
472 if ($arry_balances[
'status'][
'code'] !=
'000') {
474 $arry_errors = array();
475 for ( $e = 0; $e < count( $arry_balances[
"status"][
"errors"] ); $e++ ) {
476 $arry_errors[] = array(
"message" => $arry_balances[
"status"][
"errors"][$e] );
479 throw new Exception (HCU_JsonEncode($arry_errors));
483 $aryResult = array(
"dp" => array(),
"ln" => array(),
"cc" => array());
484 foreach ($arry_balances as $type => $data) {
487 if ($type ===
"status") {
continue; }
489 foreach ($data as $value) {
491 $aryResult[$type][] = array(
"displayorder" => $value[
"displayorder"],
"displayname" => $value[
"displayname"],
"encryption" => $value[
"encryption"],
492 "placeholder" => $value[
'description'],
"title" => $value[
"description"]);
498 case "acct_desc_update":
501 $Ci = $HB_ENV[
'Uid'];
504 $update = $HB_ENV[
'HCUPOST'][
'account_data'];
506 $accountDesc = array();
507 foreach ($update as $account) {
509 if ( HCU_array_key_exists(
"displayname", $account) && $account[
"displayname"] !=
"") {
510 $accountDesc[] = strtolower($account[
"displayname"]);
516 foreach ($update as $account) {
518 if (!HCU_array_key_exists(
"displayname", $account) || !HCU_array_key_exists(
"displayorder", $account) || !HCU_array_key_exists(
"encryption", $account))
519 throw new exception(array($MC->msg(
"Error Occurred updating settings", HCU_DISPLAY_AS_RAW)), 101);
522 $name = prep_save(trim($account[
"displayname"]), 255);
523 $order = intval($account[
"displayorder"]);
526 $encryption= HCU_PayloadDecode($Cu, $account[
"encryption"]);
528 $recordType = $encryption[0];
533 if (strpos($encryption[2],
'#')) {
535 $recordType = ($recordType ==
"D" ?
"T" :
"P");
537 $recordType = prep_save($recordType ==
"C" ?
"L" : $recordType, 1);
539 $accountNumber = prep_save($encryption[1], 12);
540 $accountType = prep_save($encryption[2], 25);
541 $certNumber = $recordType ==
"D" ? intval($encryption[3]) : 0;
545 UPDATE {$Cu}useraccounts 547 display_name= '$name', 548 display_order= '$order' 550 AND accountnumber= '$accountNumber' 551 AND accounttype= '$accountType' 552 AND recordtype= '$recordType' 553 AND certnumber= $certNumber;";
558 $sth = db_query($sqls, $dbh);
560 $aryErrors[] = $MC->msg(
"Error Occurred updating settings", HCU_DISPLAY_AS_RAW);
562 db_free_result($sth);
563 $aryInfo[] = $MC->msg(
"Member Settings Changed", HCU_DISPLAY_AS_RAW);
566 if ( count($aryErrors) ){
567 throw new Exception (HCU_JsonEncode($aryErrors));
572 $aryErrors[] = array(
"message" =>
"Unexpected action: {$HB_ENV["HCUPOST
"]["action
"]}" );
573 throw new Exception (HCU_JsonEncode($aryErrors));
580 $aryReply[
"homecuErrors"] = HCU_JsonDecode( $ex->getMessage() );
583 $aryResult = array();
592 $usrInfo = GetUserbyName($HB_ENV[
'dbh'], $HB_ENV[
'Cu'], $HB_ENV[
'Cn']);
593 $usrDeviceCookieSame = isValidDeviceCookie($HB_ENV[
'Cu'], $usrInfo);
597 if ( $HB_ENV[
"platform"] ==
"ADA" || $HB_ENV[
"platform"] ==
"APP") {
601 $mfaMode = (intval($HB_ENV[
'Fset3'] & GetFlagsetValue(
'CU3_MFA_AUTHCODE')));
604 $mfaDate = HCU_array_key_value(
"mfadate", $usrInfo);
606 $cookieParams = array (
"cu" => $HB_ENV[
"cu"],
607 "user_name" => $usrInfo[
"user_name"],
608 "saved_pass" => $usrInfo[
"passwd"],
609 "saved_email" => $usrInfo[
'email'],
610 "saved_confidence" => $usrInfo[
'confidence'],
611 "mfa_mode" => $mfaMode,
612 "mfa_date" => $mfaDate,
613 "persists_time" => $HB_ENV[
'SYSENV'][
'ticket'][
'persists']
616 $cookieInfo = CreateDeviceCookie( $cookieParams);
619 if ( strlen( $cookieInfo[
"name"] ) > 0 ) {
620 $returnCookieInfo = $cookieInfo[
"name"] .
"|" . $cookieInfo[
"content"] .
"|" . $cookieInfo[
"expire"];
621 $aryResult[
"homecuKey"] = $returnCookieInfo;
624 if ($usrDeviceCookieExists && !$usrDeviceCookieSame) {
626 $mbrInfo = GetUserInfo($dbh, $HB_ENV, $MC, Array(
"user_id" => $HB_ENV[
'Uid'],
"cu" => $HB_ENV[
'Cu']));
628 if ($mbrInfo[
'status'][
'code'] ==
'000') {
630 $HB_ENV[
'cu'] = $HB_ENV[
'Cu'];
631 $HB_ENV[
'username'] = $HB_ENV[
'Cn'];
632 $HB_ENV[
'savepass'] = trim($mbrInfo[
'data'][
'cuusers_passwd']);
633 $HB_ENV[
'savemail'] = trim($mbrInfo[
'data'][
'cuusers_email']);
634 $HB_ENV[
'confidence'] = trim($mbrInfo[
'data'][
'cuusers_confidence']);
637 SetDeviceCookie($HB_ENV, $mbrInfo[
'data']);
642 if ( count( $aryResult ) ) $aryReply[
"homecuData"] = $aryResult;
644 if ( count( $aryInfo ) ) $aryReply[
"homecuInfo"] = $aryInfo;
646 print HCU_JsonEncode($aryReply);