Parcourir la source

#4148 - Build-in API support: login

Alex Trofimov il y a 3 ans
Parent
commit
4037ab4f00

+ 3 - 0
inc/profiles.inc.php

@@ -127,6 +127,9 @@ function bx_login($iId, $bRememberMe = false)
  */
 function bx_logout($bNotify = true)
 {
+    if (!isset($_COOKIE['memberID']))
+        return;
+
     if ($bNotify && isMember())
         bx_alert('account', 'logout', (int)$_COOKIE['memberID']);
 

+ 10 - 9
inc/utils.inc.php

@@ -2280,14 +2280,14 @@ function bx_setcookie($sName, $sValue = "", $oExpiresOrOptions = 0, $sPath = 'au
     }
 
     if ('auto' === $sPath)
-        $sPath = isset($aUrl['path']) && !empty($aUrl['path']) ? $aUrl['path'] : '/';
+        $sPath = isset($aUrl['path']) && !empty($aUrl['path']) && !bx_is_api() ? $aUrl['path'] : '/';
 
     if ('auto' === $bSecure)
         $bSecure = 0 === strcasecmp('https', $aUrl['scheme']);
 
     if (PHP_VERSION_ID < 70300) {
-        if (!defined('BX_MULTISITE_URL_COOKIE') && ('memberPassword' == $sName || 'memberSession' == $sName))
-            $sPath .= '; SameSite=' . getParam('sys_samesite_cookies');
+        if (!defined('BX_MULTISITE_URL_COOKIE') && ('memberPassword' == $sName || 'memberSession' == $sName || bx_is_api()))
+            $sPath .= '; SameSite=' . (bx_is_api() ? 'None' : getParam('sys_samesite_cookies'));
         return setcookie($sName, $sValue, $oExpiresOrOptions, $sPath, $sDomain, $bSecure, $bHttpOnly);
     } 
     else {
@@ -2298,8 +2298,8 @@ function bx_setcookie($sName, $sValue = "", $oExpiresOrOptions = 0, $sPath = 'au
             'secure' => $bSecure, 
             'httponly' => $bHttpOnly,
         ];
-        if (!defined('BX_MULTISITE_URL_COOKIE') && !isset($aOptions['samesite']) && ('memberPassword' == $sName || 'memberSession' == $sName))
-            $aOptions['samesite'] = getParam('sys_samesite_cookies');
+        if (!defined('BX_MULTISITE_URL_COOKIE') && !isset($aOptions['samesite']) && ('memberPassword' == $sName || 'memberSession' == $sName || bx_is_api()))
+            $aOptions['samesite'] = bx_is_api() ? 'None' : getParam('sys_samesite_cookies');
 
         return setcookie($sName, $sValue, $aOptions);
     }
@@ -2359,10 +2359,11 @@ function bx_api_check_access()
             }
 
             header('Access-Control-Allow-Origin: ' . $sOriginHeader);
-            
+            header('Access-Control-Allow-Credentials: true');
+
             if ('OPTIONS' == $_SERVER['REQUEST_METHOD']) {
                 header('Access-Control-Allow-Methods: POST, GET');
-                header('Access-Control-Allow-Headers: Accept-Encoding, Authorization, Cache-Control, Connection, Host, Origin, Pragma, Referer, User-Agent, X-Custom-Header, X-Requested-With');                    
+                header('Access-Control-Allow-Headers: Accept-Encoding, Authorization, Cache-Control, Connection, Host, Origin, Pragma, Referer, User-Agent, X-Custom-Header, X-Requested-With');
                 exit;
             }
         }
@@ -2381,8 +2382,8 @@ function bx_api_check_access()
 
     }
     //TODO: Temporatery for use logged state 
-    bx_login(1);
-    check_logged();
+    //bx_login(1);
+    //check_logged();
 }
 
 function bx_api_get_image($sStorage, $iId)

+ 3 - 0
install/sql/system.sql

@@ -5456,6 +5456,7 @@ INSERT INTO `sys_objects_page` (`object`, `uri`, `title_system`, `title`, `modul
 ('sys_login', 'login', '_sys_page_title_system_login', '_sys_page_title_login', 'system', 0, 18, '', 2147483647, 1, 'page.php?i=login', '', '', '', 0, 1, 0, '', '', 0),
 ('sys_login_step2', 'login-step2', '_sys_page_title_system_login_step2', '_sys_page_title_login_step2', 'system', 1, 18, '', 2147483647, 1, 'page.php?i=login-step2', '', '', '', 0, 1, 0, '', '', 0),
 ('sys_login_step3', 'login-step3', '_sys_page_title_system_login_step3', '_sys_page_title_login_step3', 'system', 1, 18, '', 2147483647, 1, 'page.php?i=login-step3', '', '', '', 0, 1, 0, '', '', 0),
+('sys_logout', 'logout', '', '_sys_page_title_logout', 'system', 0, 18, '', 2147483647, 0, 'page.php?i=logout', '', '', '', 0, 0, 0, '', '', 0),
 ('sys_forgot_password', 'forgot-password', '_sys_page_title_system_forgot_password', '_sys_page_title_forgot_password', 'system', 1, 5, '', 2147483647, 1, 'page.php?i=forgot-password', '', '', '', 0, 1, 0, '', '', 0),
 ('sys_confirm_email', 'confirm-email', '_sys_page_title_system_confirm_email', '_sys_page_title_confirm_email', 'system', 1, 5, '', 2147483647, 1, 'page.php?i=confirm-email', '', '', '', 0, 1, 0, '', '', 0),
 ('sys_confirm_phone', 'confirm-phone', '_sys_page_title_system_confirm_phone', '_sys_page_title_confirm_phone', 'system', 1, 5, '', 2147483647, 1, 'page.php?i=confirm-phone', '', '', '', 0, 1, 0, '', '', 0),
@@ -5670,6 +5671,8 @@ INSERT INTO `sys_pages_blocks` (`object`, `cell_id`, `module`, `title_system`, `
 
 ('sys_login_step3', 1, 'system', '_sys_page_block_system_title_login_step3', '_sys_page_block_title_login_step3', 11, 0, 0, 2147483647, 'service', 'a:3:{s:6:\"module\";s:6:\"system\";s:6:\"method\";s:16:\"login_form_step3\";s:5:\"class\";s:17:\"TemplServiceLogin\";}', 0, 1, 1, 1),
 
+('sys_logout', 1, 'system', '', '_sys_page_block_title_logout', 11, 0, 0, 2147483647, 'service', 'a:3:{s:6:\"module\";s:6:\"system\";s:6:\"method\";s:6:\"logout\";s:5:\"class\";s:17:\"TemplServiceLogin\";}', 0, 1, 1, 1),
+
 ('sys_forgot_password', 1, 'system', '', '_sys_page_block_title_forgot_password', 13, 0, 0, 2147483647, 'service', 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:15:"forgot_password";s:6:"params";a:0:{}s:5:"class";s:19:"TemplServiceAccount";}', 0, 1, 1, 1),
 
 ('sys_confirm_email', 1, 'system', '', '_sys_page_block_title_confirm_email', 11, 0, 0, 2147483647, 'service', 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:18:"email_confirmation";s:6:"params";a:0:{}s:5:"class";s:19:"TemplServiceAccount";}', 0, 1, 1, 1),

+ 2 - 0
modules/boonex/english/data/langs/system/en.xml

@@ -3234,6 +3234,7 @@ If it is not enabled then please consider implement this optimization, since it
     <string name="_sys_page_block_title_system_cmts_view"><![CDATA[View Comment]]></string>
     <string name="_sys_page_block_title_system_cmts_administration"><![CDATA[Manage Comments]]></string>
     <string name="_sys_page_block_title_system_audit_administration"><![CDATA[Audit]]></string>
+    <string name="_sys_page_block_title_logout"><![CDATA[Log out]]></string>
     <string name="_sys_page_block_title_login"><![CDATA[Log in]]></string>
     <string name="_sys_page_block_title_login_step2"><![CDATA[Log in - step 2]]></string>
     <string name="_sys_page_block_title_login_step3"><![CDATA[Log in - step 3]]></string>
@@ -3276,6 +3277,7 @@ If it is not enabled then please consider implement this optimization, since it
     <string name="_sys_page_title_dashboard"><![CDATA[Dashboard]]></string>
     <string name="_sys_page_title_forgot_password"><![CDATA[Forgot Password]]></string>
     <string name="_sys_page_title_home"><![CDATA[{site_title} :: Homepage]]></string>
+    <string name="_sys_page_title_logout"><![CDATA[Log out]]></string>
     <string name="_sys_page_title_login"><![CDATA[Log in]]></string>
     <string name="_sys_page_title_login_step2"><![CDATA[Log in - step 2]]></string>
     <string name="_sys_page_title_login_step3"><![CDATA[Log in - step 3]]></string>

+ 2 - 0
modules/boonex/russian/data/langs/system/ru.xml

@@ -3189,6 +3189,7 @@
         <string name="_sys_page_block_title_system_cmts_view"><![CDATA[Просмотр комментария]]></string>
 	<string name="_sys_page_block_title_system_cmts_administration"><![CDATA[Управление комментариями]]></string>
         <string name="_sys_page_block_title_system_audit_administration"><![CDATA[Аудит]]></string>
+    <string name="_sys_page_block_title_logout"><![CDATA[Выход]]></string>
 	<string name="_sys_page_block_title_login"><![CDATA[Вход]]></string>
 	<string name="_sys_page_block_title_login_step2"><![CDATA[Вход - шаг 2]]></string>
 	<string name="_sys_page_block_title_login_step3"><![CDATA[Вход - шаг 3]]></string>
@@ -3228,6 +3229,7 @@
 	<string name="_sys_page_title_dashboard"><![CDATA[Панель]]></string>
 	<string name="_sys_page_title_forgot_password"><![CDATA[Забыли пароль]]></string>
 	<string name="_sys_page_title_home"><![CDATA[{site_title} :: Домашняя страница]]></string>
+    <string name="_sys_page_title_logout"><![CDATA[Выход]]></string>
 	<string name="_sys_page_title_login"><![CDATA[Вход]]></string>
 	<string name="_sys_page_title_login_step2"><![CDATA[Вход - шаг 2]]></string>
 	<string name="_sys_page_title_login_step3"><![CDATA[Вход - шаг 3]]></string>

+ 33 - 1
template/scripts/BxBaseServiceLogin.php

@@ -154,7 +154,7 @@ class BxBaseServiceLogin extends BxDol
             else {
                 return [
                     ['id' => 1, 'type' => 'msg', 'data' => 'You are already logged in 🐵! Redirecting...'],
-                    ['id' => 2, 'type' => 'redirect', 'data' => ['uri' => '/posts-home', 'timeout' => 1000]],
+                    ['id' => 2, 'type' => 'redirect', 'data' => ['uri' => '/posts-home', 'timeout' => 3000]],
                 ];
             }
         }
@@ -308,6 +308,38 @@ class BxBaseServiceLogin extends BxDol
         } 
         return $oForm->getCode();
     }
+
+    /**
+     * @page service Service Calls
+     * @section bx_system_general System Services 
+     * @subsection bx_system_general-login Login
+     * @subsubsection bx_system_general-logout logout
+     * 
+     * @code bx_srv('system', 'logout', [], 'TemplServiceLogin'); @endcode
+     * 
+     * Logout
+     * 
+     * @see BxBaseServiceLogin::serviceLogout
+     */
+    /** 
+     * @ref bx_system_general-logout "logout"
+     * @api @ref bx_system_general-logout "logout"
+     */
+    public function serviceLogout ()
+    {
+        bx_logout();
+
+        if (bx_is_api()) {
+            return [
+                ['id' => 2, 'type' => 'redirect', 'data' => ['uri' => '/posts-home']],
+            ];
+        }
+        else {
+            header("Location: " . BX_DOL_URL_ROOT);
+        }
+        
+        return true;
+    }
 }
 
 /** @} */

+ 1 - 0
template/scripts/BxBaseServices.php

@@ -57,6 +57,7 @@ class BxBaseServices extends BxDol implements iBxDolProfileService
             'MemberAuthCode' => 'BxBaseServiceLogin',
             'LoginForm' => 'BxBaseServiceLogin',
             'LoginFormOnly' => 'BxBaseServiceLogin',
+            'Logout' => 'BxBaseServiceLogin',
         
             'KeywordsCloud' => 'BxBaseServiceMetatags',