/home/ivoiecob/email.hirewise-va.com/modules/GoogleDrive/Module.php
<?php
/**
* This code is licensed under AGPLv3 license or Afterlogic Software License
* if commercial version of the product was purchased.
* For full statements of the licenses see LICENSE-AFTERLOGIC and LICENSE-AGPL3 files.
*/
namespace Aurora\Modules\GoogleDrive;
use GuzzleHttp\Psr7\Request;
/**
* Adds ability to work with Google Drive file storage inside Aurora Files module.
*
* @license https://www.gnu.org/licenses/agpl-3.0.html AGPL-3.0
* @license https://afterlogic.com/products/common-licensing Afterlogic Software License
* @copyright Copyright (c) 2023, Afterlogic Corp.
*
* @property Settings $oModuleSettings
*
* @package Modules
*/
class Module extends \Aurora\System\Module\AbstractModule
{
protected static $sStorageType = 'google';
protected static $iStorageOrder = 200;
protected $oClient = null;
protected $oService = null;
protected $aRequireModules = array(
'Files',
'OAuthIntegratorWebclient',
'GoogleAuthWebclient'
);
/**
* @return Module
*/
public static function getInstance()
{
return parent::getInstance();
}
/**
* @return Module
*/
public static function Decorator()
{
return parent::Decorator();
}
/**
* @return Settings
*/
public function getModuleSettings()
{
return $this->oModuleSettings;
}
protected function issetScope($sScope)
{
return \in_array($sScope, \explode(' ', $this->oModuleSettings->Scopes));
}
public function init()
{
$this->AddEntries(
[
'google-drive-thumb' => 'EntryThumbnail'
]
);
$this->subscribeEvent('GoogleAuthWebclient::PopulateScopes', array($this, 'onPopulateScopes'));
$this->subscribeEvent('Files::GetStorages::after', array($this, 'onAfterGetStorages'));
$this->subscribeEvent('Files::GetFile', array($this, 'onGetFile'));
$this->subscribeEvent('Files::GetItems', array($this, 'onGetItems'));
$this->subscribeEvent('Files::GetFileInfo::after', array($this, 'onAfterGetFileInfo'));
$this->subscribeEvent('Files::GetFile::after', array($this, 'onAfterGetFile'));
$this->subscribeEvent('Files::CreateFolder::after', array($this, 'onAfterCreateFolder'));
$this->subscribeEvent('Files::CreateFile', array($this, 'onCreateFile'));
$this->subscribeEvent('Files::CreatePublicLink::after', array($this, 'onAfterCreatePublicLink'));
$this->subscribeEvent('Files::DeletePublicLink::after', array($this, 'onAfterDeletePublicLink'));
$this->subscribeEvent('Files::Delete::after', array($this, 'onAfterDelete'));
$this->subscribeEvent('Files::Rename::after', array($this, 'onAfterRename'));
$this->subscribeEvent('Files::Move::after', array($this, 'onAfterMove'));
$this->subscribeEvent('Files::Copy::after', array($this, 'onAfterCopy'));
$this->subscribeEvent('Files::CheckUrl', array($this, 'onAfterCheckUrl'));
$this->subscribeEvent('Files::PopulateFileItem::after', array($this, 'onAfterPopulateFileItem'));
$this->subscribeEvent('Google::GetSettings', array($this, 'onGetSettings'));
$this->subscribeEvent('Google::UpdateSettings::after', array($this, 'onAfterUpdateSettings'));
$this->subscribeEvent('Files::GetItems::before', array($this, 'onCheckUrlFile'));
$this->subscribeEvent('Files::UploadFile::before', array($this, 'onCheckUrlFile'));
$this->subscribeEvent('Files::CreateFolder::before', array($this, 'onCheckUrlFile'));
$this->subscribeEvent('Files::CheckQuota::after', array($this, 'onAfterCheckQuota'));
$this->subscribeEvent('Files::GetQuota::after', array($this, 'onAfterGetQuota'));
}
public function onPopulateScopes($sScope, &$aResult)
{
$aScopes = \explode('|', $sScope);
foreach ($aScopes as $sScope) {
if ($sScope === 'storage') {
$aResult[] = 'https://www.googleapis.com/auth/drive';
}
}
}
public function onAfterGetStorages($aArgs, &$mResult)
{
\Aurora\System\Api::checkUserRoleIsAtLeast(\Aurora\System\Enums\UserRole::Anonymous);
if ($this->checkIfModuleConfigured()) {
$mResult[] = [
'Type' => self::$sStorageType,
'IsExternal' => true,
'DisplayName' => 'Google Drive',
'Order' => self::$iStorageOrder,
];
}
}
protected function GetClient()
{
if (!isset($this->oClient)) {
if (class_exists('Aurora\Modules\Google\Module')) {
$oGoogleModule = \Aurora\Modules\Google\Module::getInstance();
if (!$oGoogleModule->oModuleSettings->EnableModule || !$this->issetScope('storage')) {
return false;
}
} else {
return false;
}
$oOAuthIntegratorWebclientModule = \Aurora\Modules\OAuthIntegratorWebclient\Module::Decorator();
$oSocialAccount = $oOAuthIntegratorWebclientModule->GetAccount(self::$sStorageType);
if ($oSocialAccount) {
$oGoogleModule = \Aurora\Modules\Google\Module::getInstance();
if ($oGoogleModule) {
$oClient = new \Google\Client();
$oClient->setClientId($oGoogleModule->oModuleSettings->Id);
$oClient->setClientSecret($oGoogleModule->oModuleSettings->Secret);
$oClient->addScope([
'https://www.googleapis.com/auth/userinfo.email',
'https://www.googleapis.com/auth/userinfo.profile',
'https://www.googleapis.com/auth/drive'
]);
$bRefreshToken = false;
try {
$oClient->setAccessToken($oSocialAccount->AccessToken);
} catch (\Exception $oException) {
$bRefreshToken = true;
}
if ($oClient->isAccessTokenExpired() || $bRefreshToken) {
$oClient->refreshToken($oSocialAccount->RefreshToken);
$oSocialAccount->AccessToken = $oClient->getAccessToken();
$oOAuthIntegratorWebclientModule->UpdateAccount($oSocialAccount);
}
if ($oClient->getAccessToken()) {
$this->oClient = $oClient;
}
}
}
}
return $this->oClient;
}
protected function GetDriveService()
{
if (!$this->checkIfModuleConfigured()) {
return false;
}
if (!isset($this->oService)) {
$oClient = $this->GetClient();
if ($oClient) {
$this->oService = new \Google\Service\Drive($oClient);
}
}
return $this->oService;
}
protected function _dirname($sPath)
{
$sPath = \dirname($sPath);
return \str_replace(DIRECTORY_SEPARATOR, '/', $sPath);
}
protected function _basename($sPath)
{
$aPath = \explode('/', $sPath);
return \end($aPath);
}
/**
* @param string $sType
* @param string $sPath
* @param \Google\Service\Drive\DriveFile $oFile
*/
protected function PopulateFileInfo($sType, $sPath, $oFile)
{
\Aurora\System\Api::checkUserRoleIsAtLeast(\Aurora\System\Enums\UserRole::Anonymous);
$mResult = false;
if ($oFile) {
if (isset($oFile->shortcutDetails)) {
$oFile->mimeType = $oFile->shortcutDetails['targetMimeType'];
$oFile->id = $oFile->shortcutDetails['targetId'];
}
$this->PopulateGoogleDriveFileInfo($oFile);
$mResult /*@var $mResult \Aurora\Modules\Files\Classes\FileItem */ = new \Aurora\Modules\Files\Classes\FileItem();
$mResult->IsExternal = true;
$mResult->TypeStr = $sType;
$mResult->IsFolder = ($oFile->mimeType === "application/vnd.google-apps.folder");
$mResult->Id = $oFile->id;
$mResult->Name = $oFile->name;
$mResult->Path = '';
$mResult->Size = $oFile->size;
$mResult->FullPath = $oFile->id;
$mResult->ContentType = $oFile->mimeType;
if (isset($oFile->thumbnailLink)) {
$mResult->Thumb = true;
$mResult->ThumbnailUrl = '?google-drive-thumb/' . \Aurora\System\Utils::UrlSafeBase64Encode($oFile->thumbnailLink);
}
if ($mResult->IsFolder) {
$mResult->AddAction([
'list' => []
]);
} else {
$mResult->AddAction([
'view' => [
'url' => '?download-file/' . $this->getItemHash($mResult) . '/view'
]
]);
$mResult->AddAction([
'download' => [
'url' => '?download-file/' . $this->getItemHash($mResult)
]
]);
}
// $oItem->Owner = $oSocial->Name;
$mResult->LastModified = \date_timestamp_get(date_create($oFile->createdTime));
}
return $mResult;
}
protected function _getFileInfo($sName)
{
$mResult = false;
$oService = $this->GetDriveService();
if ($oService) {
$mResult = $oService->files->get($sName);
}
return $mResult;
}
/**
*
* @param \Aurora\Modules\Files\Classes\FileItem $oItem
* @return string
*/
protected function getItemHash($oItem)
{
return \Aurora\System\Api::EncodeKeyValues(array(
'UserId' => \Aurora\System\Api::getAuthenticatedUserId(),
'Type' => $oItem->TypeStr,
'Path' => '',
'Name' => $oItem->FullPath,
'FileName' => $oItem->Name
));
}
/**
* @param array $aArgs
* @param mixed $mResult
*/
public function onAfterGetFileInfo($aArgs, &$mResult)
{
if ($aArgs['Type'] === self::$sStorageType) {
\Aurora\System\Api::checkUserRoleIsAtLeast(\Aurora\System\Enums\UserRole::Anonymous);
$oFileInfo = $this->_getFileInfo($aArgs['Id']);
if ($oFileInfo) {
$mResult = $this->PopulateFileInfo($aArgs['Type'], $aArgs['Path'], $oFileInfo);
return true;
}
}
}
/**
*/
public function onGetFile($aArgs, &$Result)
{
if ($aArgs['Type'] === self::$sStorageType) {
$oService = $this->GetDriveService();
if ($oService) {
$oFile = $oService->files->get($aArgs['Id']);
$sMimeType = $this->getMimeTypeForExport($oFile);
$aArgs['Name'] = $oFile->name;
if (empty($sMimeType)) {
$sFileData = $oService->files->get($aArgs['Id'], ['alt' => 'media']);
} else {
$sFileData = $oService->files->export($aArgs['Id'], $sMimeType, [
'alt' => 'media'
]);
}
$Result = \fopen('php://memory', 'r+');
\fwrite($Result, $sFileData->getBody());
\rewind($Result);
return true;
}
}
}
public function onCheckUrlFile(&$aArgs, &$mResult)
{
if ($this->checkIfModuleConfigured() && (\pathinfo($aArgs['Path'], PATHINFO_EXTENSION) === 'url' || strpos($aArgs['Path'], '.url/'))) {
list($sUrl, $sId) = explode('.url', $aArgs['Path']);
$sUrl .= '.url';
$aArgs['Path'] = $sUrl;
$this->prepareArgs($aArgs);
if ($sId && $aArgs['Type'] === self::$sStorageType) {
$aArgs['Path'] = basename($sId);
} elseif ($aArgs['Type'] !== self::$sStorageType) {
$aArgs['Path'] = $sUrl . $sId;
}
}
}
/**
* @param array $aArgs
* @param mixed $mResult
*/
public function onGetItems($aArgs, &$mResult)
{
if ($aArgs['Type'] === self::$sStorageType) {
$mResult = [];
$oService = $this->GetDriveService();
if ($oService) {
$sPath = \ltrim(\basename($aArgs['Path']), '/');
$aFileItems = [];
$sPageToken = null;
if (empty($sPath)) {
$sPath = 'root';
}
$sQuery = "'" . $sPath . "' in parents and trashed = false";
if (!empty($aArgs['Pattern'])) {
$sQuery .= " and name contains '" . $aArgs['Pattern'] . "'";
}
do {
try {
$aParameters = [
'q' => $sQuery,
'fields' => '*',
'orderBy' => 'name'
];
if ($sPageToken) {
$aParameters['pageToken'] = $sPageToken;
}
$oFiles = $oService->files->listFiles($aParameters);
$aFileItems = \array_merge($aFileItems, $oFiles->getFiles());
$sPageToken = $oFiles->getNextPageToken();
} catch (\Exception $e) {
$sPageToken = null;
}
} while ($sPageToken);
foreach ($aFileItems as $oChild) {
$oItem /*@var $oItem \Aurora\Modules\Files\Classes\FileItem */ = $this->PopulateFileInfo($aArgs['Type'], $aArgs['Path'], $oChild);
if ($oItem) {
$mResult[] = $oItem;
}
}
if (isset($aArgs['PathRequired']) && $aArgs['PathRequired'] === true) {
$mResult['Path'] = array();
if ($sPath !== 'root') {
$oPathInfo = $oService->files->get($sPath);
$mResult['Path'][] = $this->PopulateFileInfo($aArgs['Type'], $aArgs['Path'], $oPathInfo);
while (true) {
$aParrents = $oService->parents->listParents($sPath);
if ($aParrents == null || count($aParrents) == 0) {
break;
}
$oParrent = $aParrents[0];
$sPath = $oParrent->id;
if (!$oParrent->isRoot) {
$oItem = $oService->files->get($sPath);
if ($oItem) {
$mResult['Path'][] = $this->PopulateFileInfo($aArgs['Type'], $aArgs['Path'], $oItem);
}
}
}
}
}
}
return true;
}
}
protected function prepareArgs(&$aData)
{
$aPathInfo = \pathinfo($aData['Path']);
$sExtension = isset($aPathInfo['extension']) ? $aPathInfo['extension'] : '';
if ($sExtension === 'url') {
$aArgs = array(
'UserId' => $aData['UserId'],
'Type' => $aData['Type'],
'Path' => $aPathInfo['dirname'],
'Name' => $aPathInfo['basename'],
'Id' => $aPathInfo['basename'],
'IsThumb' => false
);
$mResult = false;
\Aurora\System\Api::GetModuleManager()->broadcastEvent(
'Files',
'GetFile',
$aArgs,
$mResult
);
if (\is_resource($mResult)) {
$aUrlFileInfo = \Aurora\System\Utils::parseIniString(\stream_get_contents($mResult));
if ($aUrlFileInfo && isset($aUrlFileInfo['URL'])) {
if ((false !== \strpos($aUrlFileInfo['URL'], 'drive.google.com'))) {
$aData['Type'] = 'google';
$aData['Path'] = $this->GetIdByLink($aUrlFileInfo['URL']);
}
}
}
}
}
/**
* @param array $aArgs
* @param mixed $mResult
*/
public function onAfterCreateFolder(&$aArgs, &$mResult)
{
\Aurora\System\Api::checkUserRoleIsAtLeast(\Aurora\System\Enums\UserRole::NormalUser);
if ($aArgs['Type'] === self::$sStorageType) {
$oService = $this->GetDriveService();
if ($oService) {
$folder = new \Google\Service\Drive\DriveFile();
$folder->setName($aArgs['FolderName']);
$folder->setMimeType('application/vnd.google-apps.folder');
// Set the parent folder.
if ($aArgs['Path'] != null) {
$folder->setParents(array($aArgs['Path']));
}
try {
$oService->files->create($folder, array());
$mResult = true;
} catch (\Exception $ex) {
$mResult = false;
}
}
}
}
/**
* @param array $aArgs
* @param mixed $mResult
*/
public function onCreateFile($aArgs, &$mResult)
{
\Aurora\System\Api::checkUserRoleIsAtLeast(\Aurora\System\Enums\UserRole::NormalUser);
if ($aArgs['Type'] === self::$sStorageType) {
$oService = $this->GetDriveService();
if ($oService) {
$sMimeType = \MailSo\Base\Utils::MimeContentType($aArgs['Name']);
$file = new \Google\Service\Drive\DriveFile();
$file->setName($aArgs['Name']);
$file->setMimeType($sMimeType);
$Path = \trim($aArgs['Path'], '/');
// Set the parent folder.
if ($Path != null) {
$file->setParents(array($Path));
}
try {
$sData = '';
if (\is_resource($aArgs['Data'])) {
\rewind($aArgs['Data']);
$sData = \stream_get_contents($aArgs['Data']);
} else {
$sData = $aArgs['Data'];
}
$oService->files->create($file, array(
'data' => $sData,
'mimeType' => $sMimeType,
'uploadType' => 'media'
));
$mResult = true;
} catch (\Exception $ex) {
$mResult = false;
}
}
}
}
/**
* @param array $aArgs
* @param mixed $mResult
*/
public function onAfterDelete(&$aArgs, &$mResult)
{
\Aurora\System\Api::checkUserRoleIsAtLeast(\Aurora\System\Enums\UserRole::NormalUser);
if ($aArgs['Type'] === self::$sStorageType) {
$oService = $this->GetDriveService();
if ($oService) {
$mResult = false;
foreach ($aArgs['Items'] as $aItem) {
try {
$oService->files->delete($aItem['Name']);
$mResult = true;
} catch (\Exception $ex) {
$mResult = false;
}
}
}
}
}
/**
* @param array $aArgs
* @param mixed $mResult
*/
public function onAfterRename(&$aArgs, &$mResult)
{
\Aurora\System\Api::checkUserRoleIsAtLeast(\Aurora\System\Enums\UserRole::NormalUser);
if ($aArgs['Type'] === self::$sStorageType) {
$oService = $this->GetDriveService();
if ($oService) {
$mResult = false;
$file = new \Google\Service\Drive\DriveFile();
$file->setName($aArgs['NewName']);
$additionalParams = array();
try {
$oService->files->update($aArgs['Name'], $file, $additionalParams);
$mResult = true;
} catch (\Exception $ex) {
$mResult = false;
}
}
}
}
/**
* @param array $aArgs
* @param mixed $mResult
*/
public function onAfterMove(&$aArgs, &$mResult)
{
\Aurora\System\Api::checkUserRoleIsAtLeast(\Aurora\System\Enums\UserRole::NormalUser);
if ($aArgs['FromType'] === self::$sStorageType) {
$oService = $this->GetDriveService();
if ($oService) {
$mResult = false;
$aArgs['FromPath'] = $aArgs['FromPath'] === '' ? 'root' : \trim($aArgs['FromPath'], '/');
$aArgs['ToPath'] = $aArgs['ToPath'] === '' ? 'root' : \trim($aArgs['ToPath'], '/');
foreach ($aArgs['Files'] as $aItem) {
$oFile = $oService->files->get($aItem['Name'], ['fields' => 'parents']);
try {
$previousParents = join(',', $oFile->parents);
$emptyFileMetadata = new \Google\Service\Drive\DriveFile();
$oFile = $oService->files->update(
$aItem['Name'],
$emptyFileMetadata,
[
'addParents' => $aArgs['ToPath'],
'removeParents' => $previousParents,
'fields' => 'id, parents']
);
$mResult = true;
} catch (\Exception $ex) {
$mResult = false;
}
}
}
}
}
/**
* @param array $aArgs
* @param mixed $mResult
*/
public function onAfterCopy(&$aArgs, &$mResult)
{
\Aurora\System\Api::checkUserRoleIsAtLeast(\Aurora\System\Enums\UserRole::NormalUser);
if ($aArgs['FromType'] === self::$sStorageType) {
$oService = $this->GetDriveService();
if ($oService) {
$mResult = false;
$aArgs['ToPath'] = $aArgs['ToPath'] === '' ? 'root' : \trim($aArgs['ToPath'], '/');
foreach ($aArgs['Files'] as $aItem) {
try {
$emptyFileMetadata = new \Google\Service\Drive\DriveFile();
$emptyFileMetadata->parents = [$aArgs['ToPath']];
$oService->files->copy(
$aItem['Name'],
$emptyFileMetadata,
[
'fields' => 'id, parents']
);
$mResult = true;
} catch (\Exception $ex) {
$mResult = false;
}
}
}
}
}
/**
* @param array $aArgs
* @param mixed $oItem
*/
public function onAfterPopulateFileItem($aArgs, &$oItem)
{
if ($oItem->IsLink) {
if (false !== strpos($oItem->LinkUrl, 'drive.google.com')) {
$oItem->LinkType = 'google';
$oFileInfo = $this->GetLinkInfo($oItem->LinkUrl);
if ($oFileInfo) {
if (isset($oFileInfo->thumbnailLink)) {
$oItem->Thumb = true;
$oItem->ThumbnailUrl = $oFileInfo->thumbnailLink;
}
if ($oFileInfo->mimeType === "application/vnd.google-apps.folder") {
$oItem->UnshiftAction(array(
'list' => array()
));
$oItem->Thumb = true;
$oItem->ThumbnailUrl = \MailSo\Base\Http::SingletonInstance()->GetFullUrl() . 'modules/' . self::GetName() . '/images/drive.png';
} else {
$oItem->Size = isset($oFileInfo->fileSize) ? $oFileInfo->fileSize : $oItem->Size;
}
}
return true;
}
}
}
protected function getMimeTypeForExport(&$oFileInfo)
{
switch($oFileInfo->mimeType) {
case 'application/vnd.google-apps.document':
$oFileInfo->name = $oFileInfo->name . '.docx';
return 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';
break;
case 'application/vnd.google-apps.spreadsheet':
$oFileInfo->name = $oFileInfo->name . '.xlsx';
return 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
break;
case 'application/vnd.google-apps.drawing':
$oFileInfo->name = $oFileInfo->name . '.png';
return 'image/png';
break;
case 'application/vnd.google-apps.presentation':
$oFileInfo->name = $oFileInfo->name . '.pptx';
return 'application/vnd.openxmlformats-officedocument.presentationml.presentation';
break;
default:
return '';
break;
}
}
protected function PopulateGoogleDriveFileInfo(&$oFileInfo)
{
if ($oFileInfo->mimeType !== "application/vnd.google-apps.folder") {
$this->getMimeTypeForExport($oFileInfo);
}
}
protected function GetIdByLink($sLink)
{
$matches = array();
\preg_match("%https://\w+\.google\.com/\w+/\w+/(.*)\?.*%", $sLink, $matches);
if (!isset($matches[1])) {
\preg_match("%https://\w+\.google\.com/open\?id=(.*)%", $sLink, $matches);
}
return isset($matches[1]) ? $matches[1] : '';
}
protected function GetLinkInfo($sLink, $bLinkAsId = false)
{
$mResult = false;
$sGDId = '';
if ($bLinkAsId) {
$sGDId = $sLink;
} else {
$sGDId = $this->GetIdByLink($sLink);
}
if ($sGDId !== '') {
$oFileInfo = $this->_getFileInfo($sGDId);
if ($oFileInfo) {
$this->PopulateGoogleDriveFileInfo($oFileInfo);
$mResult = $oFileInfo;
} else {
$mResult = false;
}
} else {
$mResult = false;
}
return $mResult;
}
/**
* Passes data to connect to service.
*
* @ignore
* @param string $aArgs Service type to verify if data should be passed.
* @param boolean|array $mResult variable passed by reference to take the result.
*/
public function onGetSettings($aArgs, &$mResult)
{
$oUser = \Aurora\System\Api::getAuthenticatedUser();
if ($oUser) {
$aScope = array(
'Name' => 'storage',
'Description' => $this->i18N('SCOPE_FILESTORAGE'),
'Value' => false
);
if ($oUser->Role === \Aurora\System\Enums\UserRole::SuperAdmin) {
$aScope['Value'] = $this->issetScope('storage');
$mResult['Scopes'][] = $aScope;
}
if ($oUser->isNormalOrTenant()) {
if ($aArgs['OAuthAccount'] instanceof \Aurora\Modules\OAuthIntegratorWebclient\Models\OauthAccount) {
$aScope['Value'] = $aArgs['OAuthAccount']->issetScope('storage');
}
if ($this->issetScope('storage')) {
$mResult['Scopes'][] = $aScope;
}
}
}
}
public function onAfterUpdateSettings($aArgs, &$mResult)
{
$sScope = '';
if (isset($aArgs['Scopes']) && is_array($aArgs['Scopes'])) {
foreach ($aArgs['Scopes'] as $aScope) {
if ($aScope['Name'] === 'storage') {
if ($aScope['Value']) {
$sScope = 'storage';
break;
}
}
}
}
$this->setConfig('Scopes', $sScope);
$this->saveModuleConfig();
}
public function onAfterCheckUrl(&$aArgs, &$aReslult) {}
public function onAfterGetQuota(&$aArgs, &$aResult)
{
if ($aArgs['Type'] === self::$sStorageType) {
$mResult = [0, 0];
return true;
}
}
public function onAfterCheckQuota(&$aArgs, &$mResult)
{
if ($aArgs['Type'] === self::$sStorageType) {
$mResult = true;
return true;
}
}
public function EntryThumbnail()
{
\Aurora\System\Api::checkUserRoleIsAtLeast(\Aurora\System\Enums\UserRole::NormalUser);
$sUrl = \Aurora\System\Utils::UrlSafeBase64Decode(\Aurora\System\Router::getItemByIndex(1, ''));
$request = new Request(
'GET',
$sUrl
);
$client = $this->GetClient();
$response = $client->execute($request);
echo $response->getBody();
}
protected function checkIfModuleConfigured()
{
$bEnableGoogleModule = false;
if (class_exists('Aurora\Modules\Google\Module')) {
$oGoogleModule = \Aurora\Modules\Google\Module::getInstance();
$bEnableGoogleModule = $oGoogleModule->oModuleSettings->EnableModule;
}
$oOAuthAccount = \Aurora\Modules\OAuthIntegratorWebclient\Module::Decorator()->GetAccount(self::$sStorageType);
return ($oOAuthAccount instanceof \Aurora\Modules\OAuthIntegratorWebclient\Models\OauthAccount
&& $oOAuthAccount->Type === self::$sStorageType
&& $bEnableGoogleModule
&& $this->issetScope('storage')
&& $oOAuthAccount->issetScope('storage'));
}
}