@@ -69,7 +69,7 @@ discard block |
||
69 | 69 | ) { |
70 | 70 | // Not allowed page |
71 | 71 | $session->set('system-error_code', ERR_NOT_ALLOWED); |
72 | - include $SETTINGS['cpassman_dir'] . '/error.php'; |
|
72 | + include $SETTINGS['cpassman_dir'].'/error.php'; |
|
73 | 73 | exit; |
74 | 74 | } |
75 | 75 | |
@@ -450,7 +450,7 @@ discard block |
||
450 | 450 | ); |
451 | 451 | |
452 | 452 | // add new role to user |
453 | - $tmp = $data_tmp['fonction_id'] . (substr($data_tmp['fonction_id'], -1) == ';' ? $role_id : ';' . $role_id); |
|
453 | + $tmp = $data_tmp['fonction_id'].(substr($data_tmp['fonction_id'], -1) == ';' ? $role_id : ';'.$role_id); |
|
454 | 454 | $session->set('user-roles', str_replace(';;', ';', $tmp)); |
455 | 455 | |
456 | 456 | // store in DB |
@@ -722,7 +722,7 @@ discard block |
||
722 | 722 | $groupsData = $openLdapExtra->getADGroups($ldapConnection, $SETTINGS); |
723 | 723 | break; |
724 | 724 | default: |
725 | - throw new Exception("Unsupported LDAP type: " . $SETTINGS['ldap_type']); |
|
725 | + throw new Exception("Unsupported LDAP type: ".$SETTINGS['ldap_type']); |
|
726 | 726 | } |
727 | 727 | } catch (Exception $e) { |
728 | 728 | echo prepareExchangedData(array( |
@@ -739,7 +739,7 @@ discard block |
||
739 | 739 | // Handle successful retrieval of groups |
740 | 740 | // exists in Teampass |
741 | 741 | //error_log("Error: " . print_r($groupsData['userGroups'], true)); |
742 | - foreach($groupsData['userGroups'] as $key => $group) { |
|
742 | + foreach ($groupsData['userGroups'] as $key => $group) { |
|
743 | 743 | $role_detail = DB::queryfirstrow( |
744 | 744 | 'SELECT a.increment_id as increment_id, a.role_id as role_id, r.title as title |
745 | 745 | FROM '.prefixTable('ldap_groups_roles').' AS a |
@@ -764,7 +764,7 @@ discard block |
||
764 | 764 | |
765 | 765 | // Get all groups in Teampass |
766 | 766 | $teampassRoles = array(); |
767 | - $rows = DB::query('SELECT id,title FROM ' . prefixTable('roles_title')); |
|
767 | + $rows = DB::query('SELECT id,title FROM '.prefixTable('roles_title')); |
|
768 | 768 | foreach ($rows as $record) { |
769 | 769 | array_push( |
770 | 770 | $teampassRoles, |
@@ -87,7 +87,7 @@ discard block |
||
87 | 87 | if ($checkUserAccess->checkSession() === false) { |
88 | 88 | // Not allowed page |
89 | 89 | $session->set('system-error_code', ERR_NOT_ALLOWED); |
90 | - include $SETTINGS['cpassman_dir'] . '/error.php'; |
|
90 | + include $SETTINGS['cpassman_dir'].'/error.php'; |
|
91 | 91 | exit; |
92 | 92 | } |
93 | 93 | |
@@ -122,7 +122,7 @@ discard block |
||
122 | 122 | * @param array $SETTINGS |
123 | 123 | * @return bool|string |
124 | 124 | */ |
125 | - function handleAuthAttempts($post_data, $SETTINGS): bool|string |
|
125 | + function handleAuthAttempts($post_data, $SETTINGS): bool | string |
|
126 | 126 | { |
127 | 127 | $session = SessionManager::getSession(); |
128 | 128 | $lang = new Language(); |
@@ -234,7 +234,7 @@ discard block |
||
234 | 234 | $sessionPwdAttempts = $session->get('pwd_attempts'); |
235 | 235 | $sessionUrl = $session->get('user-initial_url'); |
236 | 236 | $server = []; |
237 | - $server['PHP_AUTH_USER'] = $request->server->get('PHP_AUTH_USER'); |
|
237 | + $server['PHP_AUTH_USER'] = $request->server->get('PHP_AUTH_USER'); |
|
238 | 238 | $server['PHP_AUTH_PW'] = $request->server->get('PHP_AUTH_PW'); |
239 | 239 | |
240 | 240 | // decrypt and retreive data in JSON format |
@@ -249,18 +249,18 @@ discard block |
||
249 | 249 | } |
250 | 250 | |
251 | 251 | // Check if Duo auth is in progress and pass the pw and login back to the standard login process |
252 | - if( |
|
252 | + if ( |
|
253 | 253 | isKeyExistingAndEqual('duo', 1, $SETTINGS) === true |
254 | 254 | && $dataReceived['user_2fa_selection'] === 'duo' |
255 | 255 | && $session->get('user-duo_status') === 'IN_PROGRESS' |
256 | 256 | && !empty($dataReceived['duo_state']) |
257 | - ){ |
|
257 | + ) { |
|
258 | 258 | $key = hash('sha256', $dataReceived['duo_state']); |
259 | 259 | $iv = substr(hash('sha256', $dataReceived['duo_state']), 0, 16); |
260 | 260 | $duo_data_dec = openssl_decrypt(base64_decode($session->get('user-duo_status')), 'AES-256-CBC', $key, 0, $iv); |
261 | 261 | // Clear the data from the Duo process to continue clean with the standard login process |
262 | - $session->set('user-duo_data',''); |
|
263 | - if($duo_data_dec === false){ |
|
262 | + $session->set('user-duo_data', ''); |
|
263 | + if ($duo_data_dec === false) { |
|
264 | 264 | echo prepareExchangedData( |
265 | 265 | [ |
266 | 266 | 'error' => true, |
@@ -275,7 +275,7 @@ discard block |
||
275 | 275 | $dataReceived['login'] = $duo_data['duo_login']; |
276 | 276 | } |
277 | 277 | |
278 | - if(isset($dataReceived['pw']) === false || isset($dataReceived['login']) === false) { |
|
278 | + if (isset($dataReceived['pw']) === false || isset($dataReceived['login']) === false) { |
|
279 | 279 | echo json_encode([ |
280 | 280 | 'data' => prepareExchangedData( |
281 | 281 | [ |
@@ -544,7 +544,7 @@ discard block |
||
544 | 544 | } |
545 | 545 | // Append with roles from AD groups |
546 | 546 | if (is_null($userInfo['roles_from_ad_groups']) === false) { |
547 | - $userInfo['fonction_id'] = empty($userInfo['fonction_id']) === true ? $userInfo['roles_from_ad_groups'] : $userInfo['fonction_id']. ';' . $userInfo['roles_from_ad_groups']; |
|
547 | + $userInfo['fonction_id'] = empty($userInfo['fonction_id']) === true ? $userInfo['roles_from_ad_groups'] : $userInfo['fonction_id'].';'.$userInfo['roles_from_ad_groups']; |
|
548 | 548 | } |
549 | 549 | // store |
550 | 550 | $session->set('user-roles', $userInfo['fonction_id']); |
@@ -556,7 +556,7 @@ discard block |
||
556 | 556 | if (count($session->get('user-roles_array')) > 0) { |
557 | 557 | $rolesList = DB::query( |
558 | 558 | 'SELECT id, title, complexity |
559 | - FROM ' . prefixTable('roles_title') . ' |
|
559 | + FROM ' . prefixTable('roles_title').' |
|
560 | 560 | WHERE id IN %li', |
561 | 561 | $session->get('user-roles_array') |
562 | 562 | ); |
@@ -602,7 +602,7 @@ discard block |
||
602 | 602 | if ($adjustPermissions) { |
603 | 603 | $session->set('user-admin', (int) $userInfo['admin']); |
604 | 604 | $session->set('user-manager', (int) $userInfo['gestionnaire']); |
605 | - $session->set('user-can_manage_all_users',(int) $userInfo['can_manage_all_users']); |
|
605 | + $session->set('user-can_manage_all_users', (int) $userInfo['can_manage_all_users']); |
|
606 | 606 | $session->set('user-read_only', (int) $userInfo['read_only']); |
607 | 607 | DB::update( |
608 | 608 | prefixTable('users'), |
@@ -674,10 +674,10 @@ discard block |
||
674 | 674 | $session->set('user-latest_items_tab', []); |
675 | 675 | $session->set('user-nb_roles', 0); |
676 | 676 | foreach ($session->get('user-latest_items') as $item) { |
677 | - if (! empty($item)) { |
|
677 | + if (!empty($item)) { |
|
678 | 678 | $dataLastItems = DB::queryFirstRow( |
679 | 679 | 'SELECT id,label,id_tree |
680 | - FROM ' . prefixTable('items') . ' |
|
680 | + FROM ' . prefixTable('items').' |
|
681 | 681 | WHERE id=%i', |
682 | 682 | $item |
683 | 683 | ); |
@@ -686,7 +686,7 @@ discard block |
||
686 | 686 | [ |
687 | 687 | 'id' => $item, |
688 | 688 | 'label' => $dataLastItems['label'], |
689 | - 'url' => 'index.php?page=items&group=' . $dataLastItems['id_tree'] . '&id=' . $item, |
|
689 | + 'url' => 'index.php?page=items&group='.$dataLastItems['id_tree'].'&id='.$item, |
|
690 | 690 | ], |
691 | 691 | 'add' |
692 | 692 | ); |
@@ -696,7 +696,7 @@ discard block |
||
696 | 696 | // Get cahce tree info |
697 | 697 | $cacheTreeData = DB::queryFirstRow( |
698 | 698 | 'SELECT visible_folders |
699 | - FROM ' . prefixTable('cache_tree') . ' |
|
699 | + FROM ' . prefixTable('cache_tree').' |
|
700 | 700 | WHERE user_id=%i', |
701 | 701 | (int) $session->get('user-id') |
702 | 702 | ); |
@@ -728,7 +728,7 @@ discard block |
||
728 | 728 | && (int) $sessionAdmin !== 1 |
729 | 729 | ) { |
730 | 730 | // get all Admin users |
731 | - $val = DB::queryfirstrow('SELECT email FROM ' . prefixTable('users') . " WHERE admin = %i and email != ''", 1); |
|
731 | + $val = DB::queryfirstrow('SELECT email FROM '.prefixTable('users')." WHERE admin = %i and email != ''", 1); |
|
732 | 732 | if (DB::count() > 0) { |
733 | 733 | // Add email to table |
734 | 734 | prepareSendingEmail( |
@@ -740,7 +740,7 @@ discard block |
||
740 | 740 | '#tp_time#', |
741 | 741 | ], |
742 | 742 | [ |
743 | - ' ' . $session->get('user-login') . ' (IP: ' . getClientIpServer() . ')', |
|
743 | + ' '.$session->get('user-login').' (IP: '.getClientIpServer().')', |
|
744 | 744 | date($SETTINGS['date_format'], (int) $session->get('user-last_connection')), |
745 | 745 | date($SETTINGS['time_format'], (int) $session->get('user-last_connection')), |
746 | 746 | ], |
@@ -887,7 +887,7 @@ discard block |
||
887 | 887 | { |
888 | 888 | $rows = DB::query( |
889 | 889 | 'SELECT date |
890 | - FROM ' . prefixTable('log_system') . " |
|
890 | + FROM ' . prefixTable('log_system')." |
|
891 | 891 | WHERE field_1 = %s |
892 | 892 | AND type = 'failed_auth' |
893 | 893 | AND label = 'password_is_not_correct' |
@@ -901,7 +901,7 @@ discard block |
||
901 | 901 | foreach ($rows as $record) { |
902 | 902 | array_push( |
903 | 903 | $arrAttempts, |
904 | - date($SETTINGS['date_format'] . ' ' . $SETTINGS['time_format'], (int) $record['date']) |
|
904 | + date($SETTINGS['date_format'].' '.$SETTINGS['time_format'], (int) $record['date']) |
|
905 | 905 | ); |
906 | 906 | } |
907 | 907 | } |
@@ -955,7 +955,7 @@ discard block |
||
955 | 955 | $ldapConnection |
956 | 956 | ) : bool |
957 | 957 | { |
958 | - include_once $SETTINGS['cpassman_dir'] . '/sources/main.functions.php'; |
|
958 | + include_once $SETTINGS['cpassman_dir'].'/sources/main.functions.php'; |
|
959 | 959 | |
960 | 960 | if ((int) $userInfoDisabled === 1) { |
961 | 961 | return false; |
@@ -1163,7 +1163,7 @@ discard block |
||
1163 | 1163 | $openLdapExtra = new OpenLdapExtra(); |
1164 | 1164 | break; |
1165 | 1165 | default: |
1166 | - throw new Exception("Unsupported LDAP type: " . $SETTINGS['ldap_type']); |
|
1166 | + throw new Exception("Unsupported LDAP type: ".$SETTINGS['ldap_type']); |
|
1167 | 1167 | } |
1168 | 1168 | } catch (Exception $e) { |
1169 | 1169 | return [ |
@@ -1176,7 +1176,7 @@ discard block |
||
1176 | 1176 | // 2- Get user info from AD |
1177 | 1177 | // We want to isolate attribute ldap_user_attribute or mostly samAccountName |
1178 | 1178 | $userADInfos = $ldapConnection->query() |
1179 | - ->where((isset($SETTINGS['ldap_user_attribute']) ===true && empty($SETTINGS['ldap_user_attribute']) === false) ? $SETTINGS['ldap_user_attribute'] : 'samaccountname', '=', $username) |
|
1179 | + ->where((isset($SETTINGS['ldap_user_attribute']) === true && empty($SETTINGS['ldap_user_attribute']) === false) ? $SETTINGS['ldap_user_attribute'] : 'samaccountname', '=', $username) |
|
1180 | 1180 | ->firstOrFail(); |
1181 | 1181 | |
1182 | 1182 | // Is user enabled? Only ActiveDirectory |
@@ -1195,7 +1195,7 @@ discard block |
||
1195 | 1195 | // For OpenLDAP and others, we use attribute dn |
1196 | 1196 | $userAuthAttempt = $ldapConnection->auth()->attempt( |
1197 | 1197 | $SETTINGS['ldap_type'] === 'ActiveDirectory' ? |
1198 | - $userADInfos['userprincipalname'][0] : // refering to https://ldaprecord.com/docs/core/v2/authentication#basic-authentication |
|
1198 | + $userADInfos['userprincipalname'][0] : // refering to https://ldaprecord.com/docs/core/v2/authentication#basic-authentication |
|
1199 | 1199 | $userADInfos['dn'], |
1200 | 1200 | $passwordClear |
1201 | 1201 | ); |
@@ -1212,7 +1212,7 @@ discard block |
||
1212 | 1212 | $error = $e->getDetailedError(); |
1213 | 1213 | return [ |
1214 | 1214 | 'error' => true, |
1215 | - 'message' => $lang->get('error')." - ".(isset($error) === true ? $error->getErrorCode()." - ".$error->getErrorMessage(). "<br>".$error->getDiagnosticMessage() : $e), |
|
1215 | + 'message' => $lang->get('error')." - ".(isset($error) === true ? $error->getErrorCode()." - ".$error->getErrorMessage()."<br>".$error->getDiagnosticMessage() : $e), |
|
1216 | 1216 | |
1217 | 1217 | ]; |
1218 | 1218 | } |
@@ -1277,7 +1277,7 @@ discard block |
||
1277 | 1277 | // error |
1278 | 1278 | return [ |
1279 | 1279 | 'error' => true, |
1280 | - 'message' => "Error: Unsupported LDAP type: " . $SETTINGS['ldap_type'], |
|
1280 | + 'message' => "Error: Unsupported LDAP type: ".$SETTINGS['ldap_type'], |
|
1281 | 1281 | ]; |
1282 | 1282 | } |
1283 | 1283 | |
@@ -1312,12 +1312,12 @@ discard block |
||
1312 | 1312 | if (isset($SETTINGS['enable_ad_users_with_ad_groups']) === true && (int) $SETTINGS['enable_ad_users_with_ad_groups'] === 1) { |
1313 | 1313 | // Get user groups from AD |
1314 | 1314 | $user_ad_groups = []; |
1315 | - foreach($groups as $group) { |
|
1315 | + foreach ($groups as $group) { |
|
1316 | 1316 | //print_r($group); |
1317 | 1317 | // get relation role id for AD group |
1318 | 1318 | $role = DB::queryFirstRow( |
1319 | 1319 | 'SELECT lgr.role_id |
1320 | - FROM ' . prefixTable('ldap_groups_roles') . ' AS lgr |
|
1320 | + FROM ' . prefixTable('ldap_groups_roles').' AS lgr |
|
1321 | 1321 | WHERE lgr.ldap_group_id = %i', |
1322 | 1322 | $group |
1323 | 1323 | ); |
@@ -1466,7 +1466,7 @@ discard block |
||
1466 | 1466 | } |
1467 | 1467 | |
1468 | 1468 | // Now check yubico validity |
1469 | - include_once $SETTINGS['cpassman_dir'] . '/includes/libraries/Authentication/Yubico/Yubico.php'; |
|
1469 | + include_once $SETTINGS['cpassman_dir'].'/includes/libraries/Authentication/Yubico/Yubico.php'; |
|
1470 | 1470 | $yubi = new Auth_Yubico($yubico_user_id, $yubico_user_key); |
1471 | 1471 | $auth = $yubi->verify($yubico_key); |
1472 | 1472 | //, null, null, null, 60 |
@@ -1620,7 +1620,7 @@ discard block |
||
1620 | 1620 | $mfaMessage = $lang->get('ga_flash_qr_and_login'); |
1621 | 1621 | // generate new QR |
1622 | 1622 | $new_2fa_qr = $tfa->getQRCodeImageAsDataUri( |
1623 | - 'Teampass - ' . $username, |
|
1623 | + 'Teampass - '.$username, |
|
1624 | 1624 | $userInfo['ga'] |
1625 | 1625 | ); |
1626 | 1626 | // clear temporary code from DB |
@@ -1633,7 +1633,7 @@ discard block |
||
1633 | 1633 | $userInfo['id'] |
1634 | 1634 | ); |
1635 | 1635 | $firstTime = [ |
1636 | - 'value' => '<img src="' . $new_2fa_qr . '">', |
|
1636 | + 'value' => '<img src="'.$new_2fa_qr.'">', |
|
1637 | 1637 | 'user_admin' => isset($sessionAdmin) ? (int) $sessionAdmin : '', |
1638 | 1638 | 'initial_url' => isset($sessionUrl) === true ? $sessionUrl : '', |
1639 | 1639 | 'pwd_attempts' => (int) $sessionPwdAttempts, |
@@ -1789,7 +1789,7 @@ discard block |
||
1789 | 1789 | }*/ |
1790 | 1790 | return [ |
1791 | 1791 | 'error' => true, |
1792 | - 'message' => $duo_error . $lang->get('duo_error_check_config'), |
|
1792 | + 'message' => $duo_error.$lang->get('duo_error_check_config'), |
|
1793 | 1793 | 'pwd_attempts' => (int) $sessionPwdAttempts, |
1794 | 1794 | 'debug_message' => $e->getMessage(), |
1795 | 1795 | 'proceedIdentification' => false, |
@@ -1805,7 +1805,7 @@ discard block |
||
1805 | 1805 | } catch (DuoException $e) { |
1806 | 1806 | return [ |
1807 | 1807 | 'error' => true, |
1808 | - 'message' => $duo_error . $lang->get('duo_error_url'), |
|
1808 | + 'message' => $duo_error.$lang->get('duo_error_url'), |
|
1809 | 1809 | 'pwd_attempts' => (int) $sessionPwdAttempts, |
1810 | 1810 | 'debug_message' => $e->getMessage(), |
1811 | 1811 | 'proceedIdentification' => false, |
@@ -1813,7 +1813,7 @@ discard block |
||
1813 | 1813 | } |
1814 | 1814 | |
1815 | 1815 | // Somethimes Duo return success but fail to return a URL, double check if the URL has been created |
1816 | - if (!empty($duo_redirect_url) && isset($duo_redirect_url) && filter_var($duo_redirect_url,FILTER_SANITIZE_URL)) { |
|
1816 | + if (!empty($duo_redirect_url) && isset($duo_redirect_url) && filter_var($duo_redirect_url, FILTER_SANITIZE_URL)) { |
|
1817 | 1817 | // Since Duo Universal requires a redirect, let's store some info when the user get's back after completing the Duo prompt |
1818 | 1818 | $key = hash('sha256', $duo_state); |
1819 | 1819 | $iv = substr(hash('sha256', $duo_state), 0, 16); |
@@ -1841,7 +1841,7 @@ discard block |
||
1841 | 1841 | } else { |
1842 | 1842 | return [ |
1843 | 1843 | 'error' => true, |
1844 | - 'message' => $duo_error . $lang->get('duo_error_url'), |
|
1844 | + 'message' => $duo_error.$lang->get('duo_error_url'), |
|
1845 | 1845 | 'pwd_attempts' => (int) $sessionPwdAttempts, |
1846 | 1846 | 'proceedIdentification' => false, |
1847 | 1847 | ]; |
@@ -1862,8 +1862,8 @@ discard block |
||
1862 | 1862 | // return the response (which should be the user name) |
1863 | 1863 | if ($decoded_token['preferred_username'] === $username) { |
1864 | 1864 | $session->set('user-duo_status', 'COMPLET'); |
1865 | - $session->set('user-duo_state',''); |
|
1866 | - $session->set('user-duo_data',''); |
|
1865 | + $session->set('user-duo_state', ''); |
|
1866 | + $session->set('user-duo_data', ''); |
|
1867 | 1867 | $session->set('user-login', $username); |
1868 | 1868 | |
1869 | 1869 | return [ |
@@ -1874,9 +1874,9 @@ discard block |
||
1874 | 1874 | ]; |
1875 | 1875 | } else { |
1876 | 1876 | // Something wrong, username from the original Duo request is different than the one received now |
1877 | - $session->set('user-duo_status',''); |
|
1878 | - $session->set('user-duo_state',''); |
|
1879 | - $session->set('user-duo_data',''); |
|
1877 | + $session->set('user-duo_status', ''); |
|
1878 | + $session->set('user-duo_state', ''); |
|
1879 | + $session->set('user-duo_data', ''); |
|
1880 | 1880 | |
1881 | 1881 | return [ |
1882 | 1882 | 'error' => true, |
@@ -1887,9 +1887,9 @@ discard block |
||
1887 | 1887 | } |
1888 | 1888 | } |
1889 | 1889 | // If we are here something wrong |
1890 | - $session->set('user-duo_status',''); |
|
1891 | - $session->set('user-duo_state',''); |
|
1892 | - $session->set('user-duo_data',''); |
|
1890 | + $session->set('user-duo_status', ''); |
|
1891 | + $session->set('user-duo_state', ''); |
|
1892 | + $session->set('user-duo_data', ''); |
|
1893 | 1893 | return [ |
1894 | 1894 | 'error' => true, |
1895 | 1895 | 'message' => $lang->get('duo_login_mismatch'), |
@@ -2045,8 +2045,8 @@ discard block |
||
2045 | 2045 | public function get_user_info($login, $enable_ad_user_auto_creation) { |
2046 | 2046 | $data = DB::queryFirstRow( |
2047 | 2047 | 'SELECT u.*, a.value AS api_key |
2048 | - FROM ' . prefixTable('users') . ' AS u |
|
2049 | - LEFT JOIN ' . prefixTable('api') . ' AS a ON (u.id = a.user_id) |
|
2048 | + FROM ' . prefixTable('users').' AS u |
|
2049 | + LEFT JOIN ' . prefixTable('api').' AS a ON (u.id = a.user_id) |
|
2050 | 2050 | WHERE login = %s AND deleted_at IS NULL', |
2051 | 2051 | $login |
2052 | 2052 | ); |
@@ -2396,15 +2396,15 @@ discard block |
||
2396 | 2396 | |
2397 | 2397 | if ($ret['error'] !== false) { |
2398 | 2398 | logEvents($SETTINGS, 'failed_auth', 'bad_duo_mfa', '', stripslashes($username), stripslashes($username)); |
2399 | - $session->set('user-duo_status',''); |
|
2400 | - $session->set('user-duo_state',''); |
|
2401 | - $session->set('user-duo_data',''); |
|
2399 | + $session->set('user-duo_status', ''); |
|
2400 | + $session->set('user-duo_state', ''); |
|
2401 | + $session->set('user-duo_data', ''); |
|
2402 | 2402 | return [ |
2403 | 2403 | 'error' => true, |
2404 | 2404 | 'mfaData' => $ret, |
2405 | 2405 | 'mfaQRCodeInfos' => false, |
2406 | 2406 | ]; |
2407 | - } else if ($ret['duo_url_ready'] === true){ |
|
2407 | + } else if ($ret['duo_url_ready'] === true) { |
|
2408 | 2408 | return [ |
2409 | 2409 | 'error' => false, |
2410 | 2410 | 'mfaData' => $ret, |