Explorar o código

Merge branch 'master' of https://github.com/unaio/una

AntonLV %!s(int64=2) %!d(string=hai) anos
pai
achega
b962f274b2

+ 21 - 0
modules/boonex/okta_connect/classes/BxOktaConAlerts.php

@@ -0,0 +1,21 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    OktaConnect Okta Connect
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+class BxOktaConAlerts extends BxBaseModConnectAlerts
+{
+    function __construct()
+    {
+        parent::__construct();
+        $this -> oModule = BxDolModule::getInstance('bx_oktacon');
+    }
+}
+
+/** @} */

+ 48 - 0
modules/boonex/okta_connect/classes/BxOktaConConfig.php

@@ -0,0 +1,48 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    OktaConnect Okta Connect
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+class BxOktaConConfig extends BxBaseModConnectConfig
+{
+    public $sDomain;
+    public $sClientID;
+    public $sSecret;
+
+    public $sScope = 'openid profile email'; // 'okta.users.read'; 
+
+    public $sPageStart;
+    public $sPageHandle;
+
+    public $bAddExtensionsForDuplicateEmails = true;
+
+    function __construct($aModule)
+    {
+        parent::__construct($aModule);
+
+        $this -> bSendPasswordGenerated = false;
+
+        $this -> sDomain = getParam('bx_oktacon_domain');
+        $this -> sClientID = getParam('bx_oktacon_client_id');
+        $this -> sSecret = getParam('bx_oktacon_secret');
+
+        $this -> sEmailTemplatePasswordGenerated = 'bx_oktacon_password_generated';
+        $this -> sDefaultTitleLangKey = '_bx_oktacon';
+
+        $this -> sRedirectPage = getParam('bx_oktacon_redirect_page');
+        $this -> sProfilesModule = getParam('bx_oktacon_module');
+        $this -> isAlwaysConfirmEmail = (bool)getParam('bx_oktacon_confirm_email'); 
+        $this -> isAlwaysAutoApprove = (bool)getParam('bx_oktacon_approve');
+
+        $this -> sPageStart = BX_DOL_URL_ROOT . $this -> getBaseUri() . 'start';
+        $this -> sPageHandle = BX_DOL_URL_ROOT . $this -> getBaseUri() . 'handle';
+    }
+}
+
+/** @} */

+ 20 - 0
modules/boonex/okta_connect/classes/BxOktaConDb.php

@@ -0,0 +1,20 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    OktaConnect Okta Connect
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+class BxOktaConDb extends BxBaseModConnectDb
+{
+    function __construct(&$oConfig)
+    {
+        parent::__construct($oConfig);
+    }
+}
+
+/** @} */

+ 184 - 0
modules/boonex/okta_connect/classes/BxOktaConModule.php

@@ -0,0 +1,184 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    OktaConnect Okta Connect
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+
+/**
+ * This Okta connect code was created with instructions from:
+ * https://developer.okta.com/docs/guides/implement-oauth-for-okta/main/
+ */
+class BxOktaConModule extends BxBaseModConnectModule
+{
+    function __construct(&$aModule)
+    {
+        parent::__construct($aModule);
+    }
+
+    /**
+     * Redirect to remote site login form
+     *
+     * @return n/a - redirect or HTML page in case of error
+     */
+    function actionStart()
+    {
+        if (isset($_GET["error"])) {
+            $this->_oTemplate->getPage(_t($this->_oConfig->sDefaultTitleLangKey), DesignBoxContent(_t($this->_oConfig->sDefaultTitleLangKey), MsgBox(bx_get('error'))));
+            exit;
+        }
+
+        if (isLogged()) {
+            $this->_redirect ($this -> _oConfig -> sDefaultRedirectUrl);
+        }
+
+        if (!$this->_oConfig->sClientID || !$this->_oConfig->sSecret || !$this->_oConfig->sDomain) {
+            require_once(BX_DIRECTORY_PATH_INC . 'design.inc.php');
+            bx_import('BxDolLanguages');
+            $sCode =  MsgBox( _t('_bx_oktacon_profile_error_api_keys') );
+            $this->_oTemplate->getPage(_t('_bx_oktacon'), $sCode);
+        } 
+        else {
+
+            // First stage of the authentication process; This is just a simple redirect (first load of this page)
+            $sUrl = bx_append_url_params("https://{$this->_oConfig->sDomain}/oauth2/default/v1/authorize", [
+                'state' => $this->_genToken(), // BxDolSession::getInstance()->getId(), // This at least semi-random string is likely good enough as state identifier
+                'scope' => $this->_oConfig->sScope,
+                'response_type' => 'code',
+                'response_mode' => 'query',
+                'client_id' => $this->_oConfig->sClientID,
+                'redirect_uri' => $this->_oConfig->sPageHandle,
+            ]);
+            $this->_redirect($sUrl);
+        }
+    }
+
+    function actionHandle()
+    {
+        require_once(BX_DIRECTORY_PATH_INC . 'design.inc.php');
+
+        // check CSRF token
+        if ($this->_getToken() != bx_get('state')) {
+            $this->_oTemplate->getPage(_t('_Error'), MsgBox(_t('_sys_connect_state_invalid')));
+            return;
+        }
+
+        // check code
+        $sCode = bx_get('code');
+        if (!$sCode || bx_get('error')) {
+            $sErrorDescription = bx_get('error_description') ? bx_get('error_description') : _t('_error occured');
+            $this->_oTemplate->getPage(_t('_Error'), MsgBox($sErrorDescription));
+            return;
+        }
+
+        $s = bx_file_get_contents("https://{$this->_oConfig->sDomain}/oauth2/default/v1/token", [
+            'grant_type'    => 'authorization_code',
+            'client_id'     => $this->_oConfig->sClientID,
+            'redirect_uri'  => $this->_oConfig->sPageHandle,
+            'code'          => $sCode,
+            'client_secret' => $this->_oConfig->sSecret,
+        ], 'post', array ('Content-Type: application/x-www-form-urlencoded'));
+        $aAuthData = $this->_decodeResponseAndHandleError($s);
+
+        // get the data, especially access_token
+        $sAccessToken = $aAuthData['access_token'];
+        $sExpiresIn = $aAuthData['expires_in'];
+        $sExpiresAt = new \DateTime('+' . $sExpiresIn . ' seconds');
+
+        // request info about profile
+        $s = bx_file_get_contents("https://{$this->_oConfig->sDomain}/oauth2/default/v1/userinfo", array(), 'get', array(
+            'Accept: application/json',
+            'Authorization: Bearer ' . $sAccessToken,
+        ));
+echoDbgLog($s);
+        $aUserData = $this->_decodeResponseAndHandleError($s);
+	    $aRemoteProfileInfo = $aUserData;
+	    $aRemoteProfileInfo['id'] = $aRemoteProfileInfo['accountId'];
+/*
+        // request profile photo
+        $s = bx_file_get_contents("https://graph.microsoft.com/v1.0/me/photo/", array(), 'get', array(
+            'Accept: application/json',
+            'Authorization: Bearer ' . $sAccessToken,
+        ));
+        $aUserPhoto = $this->_decodeResponseAndHandleError($s, false);
+
+        $aRemoteProfileInfo['picture'] = $aUserPhoto;
+*/
+        if ($aRemoteProfileInfo) {
+
+            // check if user logged in before
+            $iLocalProfileId = $this->_oDb->getProfileId($aRemoteProfileInfo['id']);
+            
+            if ($iLocalProfileId && $oProfile = BxDolProfile::getInstance($iLocalProfileId)) {
+                // user already exists
+                $this->setLogged($oProfile ->id(), '', true, true); // remember user
+            }             
+            else {  
+                // register new user
+                $this->_createProfile($aRemoteProfileInfo);
+            }
+        } 
+        else {
+            $this->_oTemplate->getPage(_t('_Error'), MsgBox(_t('_sys_connect_profile_error_info')));
+        }
+    }
+
+    /**
+     * @param $aProfileInfo - remote profile info
+     * @param $sAlternativeName - suffix to add to NickName to make it unique
+     * @return profile array info, ready for the local database
+     */
+    protected function _convertRemoteFields($aProfileInfo, $sAlternativeName = '')
+    {
+        $aProfileFields = $aProfileInfo;
+	    $sName =  !empty($aProfileInfo['name']) ? $aProfileInfo['name'] : $aProfileInfo['accountId'];
+        $aProfileFields['name'] = !empty($aProfileInfo['preferred_username']) ? $aProfileInfo['preferred_username'] : $sName;
+        $aProfileFields['fullname'] = $sName; // !empty($aProfileInfo['given_name']) ? $aProfileInfo['given_name'] : $aProfileFields['name'];
+        $aProfileFields['last_name'] = !empty($aProfileInfo['family_name']) ? ' ' . $aProfileInfo['family_name'] : '';
+        $aProfileFields['email'] = isset($aProfileInfo['email']) ? $aProfileInfo['email'] : '';
+        $aProfileFields['picture'] = '';
+        $aProfileFields['allow_view_to'] = getParam('bx_oktacon_privacy');
+
+        return $aProfileFields;
+    }
+
+    protected function _decodeResponseAndHandleError($s, $bDisplayErrorPage = true)
+    {
+        if (!$s || NULL === ($aData = json_decode($s, true)) || !$aData || isset($aData['error'])) {
+            if (is_array($aData['error']) && !empty($aData['error']['message']))
+                $sErrorDescription = $aData['error']['message'];
+            else
+                $sErrorDescription = isset($aData['error_description']) ? $aData['error_description'] : _t('_error occured');
+            if ($bDisplayErrorPage) {
+                $this->_oTemplate->getPage(_t('_Error'), MsgBox($sErrorDescription));
+                exit;
+            }
+            else {  
+                return false;
+            }
+        }
+        return $aData;
+    }
+
+    protected function _getExistingAccount($aProfileInfo, &$aFieldsAccount, &$aFieldsProfile)
+    {
+	    if ($this->_oConfig->bAddExtensionsForDuplicateEmails) {
+            $i = 1;
+            while (BxDolAccount::getInstance($aFieldsAccount['email'])) {
+                $aFieldsAccount['email'] = preg_replace('/(.*?)(\+\d+)?@(.*?)/', '$1+' . $i . '@$3', $aFieldsAccount['email']);
+                ++$i;
+            } 
+            return false;
+	    }
+	    else {
+            return BxDolAccount::getInstance($aFieldsAccount['email']);
+        }
+    }
+}
+
+/** @} */

+ 31 - 0
modules/boonex/okta_connect/classes/BxOktaConStudioPage.php

@@ -0,0 +1,31 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    OktaConnect Okta Connect
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+class BxOktaConStudioPage extends BxTemplStudioModule
+{
+    function __construct($sModule, $mixedPageName, $sPage = "")
+    {
+        parent::__construct($sModule, $mixedPageName, $sPage);
+
+        $this->aMenuItems = array(
+            'settings' => array('name' => 'settings', 'icon' => 'cogs', 'title' => '_adm_lmi_cpt_settings'),
+            'help' => array('name' => 'help', 'icon' => 'question', 'title' => '_sys_connect_information'),
+        );
+    }
+    
+    function getHelp ()
+    {
+        $oModule = BxDolModule::getInstance('bx_oktacon'); 
+        return _t('_bx_oktacon_information_block', BX_DOL_URL_ROOT . $oModule -> _oConfig -> getBaseUri() . 'handle');
+    }
+}
+
+/** @} */

+ 20 - 0
modules/boonex/okta_connect/classes/BxOktaConTemplate.php

@@ -0,0 +1,20 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    OktaConnect Okta Connect
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+class BxOktaConTemplate extends BxBaseModConnectTemplate
+{
+    function __construct(&$oConfig, &$oDb)
+    {
+        parent::__construct($oConfig, $oDb);
+    }
+}
+
+/** @} */

+ 68 - 0
modules/boonex/okta_connect/install/config.php

@@ -0,0 +1,68 @@
+<?php 
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    OktaConnect Okta Connect
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+$aConfig = array(
+    /**
+     * Main Section.
+     */
+    'type' => BX_DOL_MODULE_TYPE_MODULE,
+    'name' => 'bx_oktacon',
+    'title' => 'Okta Connect',
+    'note' => 'Join the site using Okta OAuth',
+    'version' => '13.0.0.DEV',
+    'vendor' => 'UNA Inc',
+    'help_url' => 'http://feed.una.io/?section={module_name}',
+
+    'compatible_with' => array(
+        '13.0.x'
+    ),
+
+    /**
+     * 'home_dir' and 'home_uri' - should be unique. Don't use spaces in 'home_uri' and the other special chars.
+     */
+    'home_dir' => 'boonex/okta_connect/',
+    'home_uri' => 'oktacon',
+
+    'db_prefix' => 'bx_oktacon_',
+    'class_prefix' => 'BxOktaCon',
+
+    /**
+     * Category for language keys.
+     */
+    'language_category' => 'Okta Connect',
+
+    /**
+     * Installation/Uninstallation Section.
+     */
+    'install' => array(
+        'execute_sql' => 1,
+        'update_languages' => 1,
+    ),
+    'uninstall' => array (
+        'execute_sql' => 1,
+        'update_languages' => 1,
+    ),
+    'enable' => array(
+        'execute_sql' => 1,
+        'clear_db_cache' => 1,
+    ),
+    'disable' => array (
+        'execute_sql' => 1,
+        'clear_db_cache' => 1,
+    ),
+
+    /**
+     * Dependencies Section
+     */
+    'dependencies' => array(),
+);
+
+/** @} */

+ 20 - 0
modules/boonex/okta_connect/install/installer.php

@@ -0,0 +1,20 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    OktaConnect Okta Connect
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+class BxOktaConInstaller extends BxDolStudioInstaller
+{
+    function __construct($aConfig)
+    {
+        parent::__construct($aConfig);
+    }
+}
+
+/** @} */

+ 23 - 0
modules/boonex/okta_connect/install/langs/en.xml

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources name="en" flag="gb" title="English">
+	<string name="_sys_module_oktacon"><![CDATA[Okta Connect]]></string>
+	<string name="_bx_oktacon"><![CDATA[Okta Connect]]></string>
+	<string name="_bx_oktacon_settings"><![CDATA[Okta Connect]]></string>
+	<string name="_bx_oktacon_information_block"><![CDATA[
+        <p>This module can be used to login to this site using Okta OAuth.</p>
+        </p>]]></string>
+	<string name="_bx_oktacon_profile_error_api_keys"><![CDATA[Please configure the module in admin panel (can't define Client ID & Secret)]]></string>
+	<string name="_bx_oktacon_auth_title"><![CDATA[Login with Okta]]></string>
+
+    <string name="_bx_oktacon_adm_stg_cpt_type"><![CDATA[Okta Connect]]></string>
+    <string name="_bx_oktacon_option_domain"><![CDATA[Okta Domain]]></string>
+    <string name="_bx_oktacon_option_client_id"><![CDATA[Application (Client) ID]]></string>
+    <string name="_bx_oktacon_option_secret"><![CDATA[Client Secret Value]]></string>
+
+	<string name="_bx_oktacon_et_password_generated"><![CDATA[Okta connect temporary password]]></string>
+	<string name="_bx_oktacon_et_password_generated_subject"><![CDATA[Temporary password]]></string>
+	<string name="_bx_oktacon_et_password_generated_body"><![CDATA[{email_header}
+<p>Temporary password - <b>{password}</b></p>
+<p>Change it after logging-in.</p>
+{email_footer}]]></string>
+</resources>

+ 20 - 0
modules/boonex/okta_connect/install/sql/disable.sql

@@ -0,0 +1,20 @@
+
+-- Email template
+
+DELETE FROM `sys_email_templates` WHERE `Name` = 'bx_oktacon_password_generated';
+
+-- Auth objects
+
+DELETE FROM `sys_objects_auths` WHERE `Name` = 'bx_oktacon';
+
+-- Alerts
+
+SET @iHandlerId := (SELECT `id` FROM `sys_alerts_handlers`  WHERE `name`  =  'bx_oktacon');
+
+DELETE FROM `sys_alerts_handlers` WHERE `id` = @iHandlerId;
+DELETE FROM `sys_alerts` WHERE `handler_id` =  @iHandlerId;
+
+-- Options
+
+DELETE FROM `top`, `toc`, `to` USING `sys_options_types` AS `top` LEFT JOIN `sys_options_categories` AS `toc` ON `top`.`id`=`toc`.`type_id` LEFT JOIN `sys_options` AS `to` ON `toc`.`id`=`to`.`category_id` WHERE `top`.`name` = 'bx_oktacon';
+

+ 43 - 0
modules/boonex/okta_connect/install/sql/enable.sql

@@ -0,0 +1,43 @@
+
+-- Email template
+
+INSERT INTO `sys_email_templates` (`Module`, `NameSystem`, `Name`, `Subject`, `Body`) VALUES
+('bx_oktacon', '_bx_oktacon_et_password_generated', 'bx_oktacon_password_generated', '_bx_oktacon_et_password_generated_subject', '_bx_oktacon_et_password_generated_body');
+
+-- Auth objects
+
+INSERT INTO `sys_objects_auths` (`Name`, `Title`, `Link`, `Icon`, `Style`) VALUES
+('bx_oktacon', '_bx_oktacon_auth_title', 'modules/?r=oktacon/start', 'far circle', 'a:1:{s:7:".bx-btn";a:1:{s:10:"background";s:18:"#0078d4 !important";}}');
+
+-- Alerts
+
+INSERT INTO `sys_alerts_handlers` SET `name` = 'bx_oktacon', `class` = 'BxOktaConAlerts', `file` = 'modules/boonex/okta_connect/classes/BxOktaConAlerts.php';
+
+SET @iHandlerId := (SELECT `id` FROM `sys_alerts_handlers`  WHERE `name` = 'bx_oktacon');
+
+INSERT INTO `sys_alerts` (`unit`, `action`, `handler_id`) VALUES
+('account', 'logout', @iHandlerId),
+('profile', 'delete', @iHandlerId),
+('profile', 'add', @iHandlerId);
+
+-- Options
+
+SET @iTypeOrder = (SELECT MAX(`order`) FROM `sys_options_types` WHERE `group` = 'modules');
+INSERT INTO `sys_options_types` (`group`, `name`, `caption`, `icon`, `order`) VALUES 
+('modules', 'bx_oktacon', '_bx_oktacon_adm_stg_cpt_type', 'bx_oktacon@modules/boonex/okta_connect/|std-icon.svg', IF(NOT ISNULL(@iTypeOrder), @iTypeOrder + 1, 1));
+SET @iTypeId = LAST_INSERT_ID();
+
+INSERT INTO `sys_options_categories` (`type_id`, `name`, `caption`, `order` )  
+VALUES (@iTypeId, 'bx_oktacon_general', '_sys_connect_adm_stg_cpt_category_general', 1);
+SET @iCategId = LAST_INSERT_ID();
+
+INSERT INTO `sys_options` (`name`, `value`, `category_id`, `caption`, `type`, `check`, `check_error`, `order`, `extra`) VALUES
+('bx_oktacon_domain', '', @iCategId, '_bx_oktacon_option_domain', 'digit', '', '', 20, ''),
+('bx_oktacon_client_id', '', @iCategId, '_bx_oktacon_option_client_id', 'digit', '', '', 22, ''),
+('bx_oktacon_secret', '', @iCategId, '_bx_oktacon_option_secret', 'digit', '', '', 24, ''),
+('bx_oktacon_redirect_page', 'index', @iCategId, '_sys_connect_option_redirect', 'select', '', '', 40, 'join,settings,dashboard,index'),
+('bx_oktacon_module', 'bx_persons', @iCategId, '_sys_connect_option_module', 'select', '', '', 50, 'a:2:{s:6:"module";s:10:"bx_oktacon";s:6:"method";s:20:"get_profiles_modules";}'),
+('bx_oktacon_privacy', '3', @iCategId, '_sys_connect_option_privacy', 'select', '', '', 54, 'a:2:{s:6:"module";s:10:"bx_oktacon";s:6:"method";s:18:"get_privacy_groups";}'),
+('bx_oktacon_confirm_email', 'on', @iCategId, '_sys_connect_option_confirm_email', 'checkbox', '', '', 70, ''),
+('bx_oktacon_approve', '', @iCategId, '_sys_connect_option_approve', 'checkbox', '', '', 80, '');
+

+ 21 - 0
modules/boonex/okta_connect/install/sql/install.sql

@@ -0,0 +1,21 @@
+
+CREATE TABLE `bx_oktacon_accounts` (
+  `local_profile` int(10) unsigned NOT NULL,
+  `remote_profile` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
+  PRIMARY KEY (`local_profile`),
+  KEY `remote_profile` (`remote_profile`)
+);
+
+-- Studio page and widget
+
+INSERT INTO `sys_std_pages`(`index`, `name`, `header`, `caption`, `icon`) VALUES
+(3, 'bx_oktacon', '_bx_oktacon', '_bx_oktacon', 'bx_oktacon@modules/boonex/okta_connect/|std-icon.svg');
+SET @iPageId = LAST_INSERT_ID();
+
+SET @iParentPageId = (SELECT `id` FROM `sys_std_pages` WHERE `name` = 'home');
+SET @iParentPageOrder = (SELECT MAX(`order`) FROM `sys_std_pages_widgets` WHERE `page_id` = @iParentPageId);
+INSERT INTO `sys_std_widgets` (`page_id`, `module`, `type`, `url`, `click`, `icon`, `caption`, `cnt_notices`, `cnt_actions`) VALUES
+(@iPageId, 'bx_oktacon', 'integrations', '{url_studio}module.php?name=bx_oktacon', '', 'bx_oktacon@modules/boonex/okta_connect/|std-icon.svg', '_bx_oktacon', '', 'a:4:{s:6:"module";s:6:"system";s:6:"method";s:11:"get_actions";s:6:"params";a:0:{}s:5:"class";s:18:"TemplStudioModules";}');
+INSERT INTO `sys_std_pages_widgets` (`page_id`, `widget_id`, `order`) VALUES
+(@iParentPageId, LAST_INSERT_ID(), IF(ISNULL(@iParentPageOrder), 1, @iParentPageOrder + 1));
+

+ 8 - 0
modules/boonex/okta_connect/install/sql/uninstall.sql

@@ -0,0 +1,8 @@
+
+DROP TABLE IF EXISTS `bx_oktacon_accounts`;
+
+
+-- Studio page and widget
+DELETE FROM `tp`, `tw`, `twb`, `tpw` 
+USING `sys_std_pages` AS `tp` LEFT JOIN `sys_std_widgets` AS `tw` ON `tp`.`id` = `tw`.`page_id` LEFT JOIN `sys_std_widgets_bookmarks` AS `twb` ON `tw`.`id` = `twb`.`widget_id` LEFT JOIN `sys_std_pages_widgets` AS `tpw` ON `tw`.`id` = `tpw`.`widget_id`
+WHERE  `tp`.`name` = 'bx_oktacon';

+ 18 - 0
modules/boonex/okta_connect/request.php

@@ -0,0 +1,18 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    OktaConnect Okta Connect
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+require_once(BX_DIRECTORY_PATH_INC . 'profiles.inc.php');
+
+check_logged();
+
+BxDolRequest::processAsAction($GLOBALS['aModule'], $GLOBALS['aRequest']);
+
+/** @} */

+ 598 - 0
modules/boonex/okta_connect/template/images/icons/std-icon.svg

@@ -0,0 +1,598 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   width="48"
+   height="48"
+   viewBox="0 0 48 48"
+   fill="none"
+   version="1.1"
+   id="svg393"
+   sodipodi:docname="blank.svg"
+   xml:space="preserve"
+   inkscape:version="1.2.1 (9c6d41e, 2022-07-14)"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
+     id="namedview395"
+     pagecolor="#ffffff"
+     bordercolor="#000000"
+     borderopacity="0.25"
+     inkscape:showpageshadow="2"
+     inkscape:pageopacity="0.0"
+     inkscape:pagecheckerboard="0"
+     inkscape:deskcolor="#d1d1d1"
+     showgrid="false"
+     inkscape:zoom="1.9077568"
+     inkscape:cx="17.559891"
+     inkscape:cy="27.519231"
+     inkscape:window-width="1470"
+     inkscape:window-height="891"
+     inkscape:window-x="0"
+     inkscape:window-y="37"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg393" /><rect
+     width="48"
+     height="48"
+     fill="url(#paint0_linear_221_2472)"
+     id="rect370" /><defs
+     id="defs391"><linearGradient
+       id="paint0_linear_221_2472"
+       x1="24"
+       y1="0"
+       x2="24"
+       y2="48"
+       gradientUnits="userSpaceOnUse"><stop
+         stop-color="#71717A"
+         id="stop386" /><stop
+         offset="1"
+         stop-color="#52525B"
+         id="stop388" /></linearGradient></defs><image
+     width="30.775528"
+     height="10.386741"
+     preserveAspectRatio="none"
+     xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABkAAAAIcCAQAAAAEBqqzAAAAIGNIUk0AAHolAACAgwAA+f8AAIDp
+AAB1MAAA6mAAADqYAAAXb5JfxUYAAHgKSURBVHja7N13fBTl2sbxZzfZ9EoIabSEFkjoEAi9d0Wl
+CCgoIKIiiAooFhALokhTxILSUUHxUKX3FnrvvYRAQiC9Z/f9A3lVCKRtmXnm9/3rnM85xtzXvbPZ
+a3d2RggAAAAAsBIdEQDKdqtabh2XSp4VFXa03k49mnEia19gDhuCMpy3c67vEuZVXZRS1K+VEnNM
+nLmyOzKZDQHAffZEACjXDlfnFo7NDRH25UU5hf1qdx3PiBP6Clc3lL3JnmB750q4dXBq7lxDVBYl
+FPWLpXueyT3rU+HA+rrn2RIAAFC07ytd+jo91qRwORmJi651ZluwpcO1o2fmJCr7SMk23Vlx8Cl2
+BQAAFGqI7thEk9GkGnfX7a3B1mCTom53ZbJ6jpQrW5aEszMAAKA4E8MvHTOpTLbp/KtsDta2sGrc
+GbUdK7/1Z28AAEBRvmplSjep0vnJbA/WNL+uMVmNR8ovH7A7AACgGC9VManY6QlsENYyuXRiqlqP
+lIWD2B8AAFCEJvaJV0yqtu0JtgjriDmq5iNlbDU2CAAAFGDddJPKZaQscGGPsLy1r6j7SIk9yQ4B
+aJcdEQBK0a/i2/PVPoO9Q3buj1vYJSxrvF239Y5Oap7A1dfvwqqjbBKANumJAFCKnm/IMEXltxYY
+2CUsq+oz7p5qn+GZT9gjAAoIAJtqYYh8VoY53N382rFNWFZoH/XP4Ff+61ZsEgAFBIANVW9YwleO
+Sfy6sk1Y0qd6/wYyzBHWk10CoIAAsKEK1WWZxK8m24Ql+Ya6BMgwR9UG7BIABQSADVUrL8skrkGL
++BYILMjLz0GKOUpUHeTDNgFQQADYTJY0k+T4G/3YJywnO0iOOUyOJYLYJgAKCADbvRgxyjMK24RF
+SXKvGSdRPpBlAqCAAIA5CggVBJaUI8sgWRwpACggAADAimUdACggAAAAAEABAQAAAEABAQAAAAAK
+CAAAAAAKCAAAAAAKCAAAAABQQAAAAABQQAAAAACAAgIAAACAAgIAAAAAFBAAAAAAFBAAAAAAFBAA
+AAAAoIAAAAAAoIAAAAAAAAUEAAAAAAUEAAAAAAUEAAAAACggAAAAACggAAAAAEABAQAAAEABAQAA
+AEABAQAAAAAKCAAAAAAKCAAAAABQQAAAAABQQAAAAABQQAAAAACAAgIAAACAAgIAAAAAFBAAAAAA
+FBAAAAAAFBAAAAAAoIAAAAAAoIAAAAAAAAUEAAAAAAUEAAAAACggAAAAACggAAAAACggAAAAAEAB
+AQAAAEABAQAAAAAKCAAAAAAKCAAAAAAKCAAAAABQQAAAAABQQAAAAACAAgIAAACAAgIAAACAAgIA
+AAAAFBAAAAAAFBAAAAAAoIAAAAAAoIAAAAAAoIAAAAAAAAUEAAAAAAUEAAAAACggAAAAACggAAAA
+ACggAAAAAEABAQAAAEABAQAAAAAKCAAAAAAKCAAAAAAKCAAAAABQQAAAAABQQAAAAACAAgIAAACA
+AgIAAAAAFBAAAAAAFBAAAAAAFBAAAGBOWUQAgAICAACsJYAIAFBAAACAtZQiAgAUEAAAYC2cggWA
+AgIAAAAAFBAAAAAAFBAAAAAAoIAAAAAAoIAAAAAAoIAAAAAAAAUEAAAAAAUEAAAAACggAAAAACgg
+AAAAAEABAQAAAEABAQAAAEABAQAAAAAKCAAAAAAKCAAAAABQQAAAAABQQAAAAABQQAAAAACAAgIA
+AACAAgIAAAAAFBAAAAAAFBAAAAAAFBAAAAAAoIAAAAAAoIAAAIDCyMkhAwAUEAAAYCXODmQAgAIC
+AACspFJFMgBAAQEAAFbiGUIGACggAADASirVfVFHCgAoIAAAwCo8g8o2JwUAFBAAAGAVOtH2OVIA
+QAEBAABWEtGrH1fCAkABAQAA1uHg1nscKQCggAAAACvp8O6bQaQAgAICAACsZOQKMgBAAQEAAFYS
+UHv7j6QAgAICAACspMmgFSNJAQAFBAAAWEmXL4/zKQgACggAALCWsEHR27+pTA4AKCAAAMAqApsM
+Ob7no1+cSQIABQQAAFiBzhAxtsuZUx8drEYWAGRmTwS2YHIUpfbpXYLDTKKEKCXEKWf/YG+jMAkh
+coSzCP77/xYvYsS9e+QashPtrumFyBGXjfbZsY7xIkUk6nJJElD9c0G2en7bdINLJjuzNPcyoWNN
+Y1N23d2kP5F2qGKqiNHlmtT3ZqEuQ++czTaleaZyFr6Z+tzyLn+/askRuSGOziLnEf93hwtxzjcD
+hRDiqsg+lGyICc8U8boctaeQbWcvhEkZx1eqzk3leVJArHHg+u0sUaGsf8gZz3JlnMredXMKFG4i
+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
+"
+     id="image637"
+     x="8.8760691"
+     y="19.0882" /></svg>