Newer
Older
<?php
/**
* Create new google authenticator key for a user
*
* @param string $title - key title
* @return array - key data
*/

Henning Leutz
committed
use QUI\Security\Encryption;
QUI::$Ajax->registerFunction(
'package_quiqqer_authgoogle2fa_ajax_getKey',
function ($userId, $title) {
$SessionUser = QUI::getUserBySession();
$AuthUser = $Users->get((int)$userId);
$title = Orthos::clear($title);
if ($Users->isNobodyUser($SessionUser)) {
throw new QUI\Permissions\Exception(
QUI::getLocale()->get(
'quiqqer/system',
'exception.lib.user.no.edit.rights'
)
);
}

Henning Leutz
committed
if (!method_exists($SessionUser, 'checkEditPermission')) {
throw new QUI\Permissions\Exception(
QUI::getLocale()->get(
'quiqqer/core',
'exception.lib.user.no.edit.rights'
)
);
}
$SessionUser->checkEditPermission();
try {
$Google2FA = new Google2FA();
$secrets = json_decode($AuthUser->getAttribute('quiqqer.auth.google2fa.secrets'), true);
if (!isset($secrets[$title])) {
'quiqqer/authgoogle2fa',
'exception.ajax.getKey.title.not.found',
[
'title' => $title,
'user' => $AuthUser->getUsername(),
'userId' => $AuthUser->getId()

Henning Leutz
committed
$keyData['key'] = Encryption::decrypt($secrets[$title]['key']);
$keyData['qrCode'] = $Google2FA->getQRCodeInline(
$_SERVER['SERVER_NAME'],
$AuthUser->getUsername(),
$CreateUser = QUI::getUsers()->get($secrets[$title]['createUserId']);
$keyData['createUser'] = $CreateUser->getUsername() . ' (' . $CreateUser->getId() . ')';
$keyData['createDate'] = $secrets[$title]['createDate'];
foreach ($secrets[$title]['recoveryKeys'] as $k => $recoveryKeyData) {

Henning Leutz
committed
$recoveryKeyData['key'] = trim(Encryption::decrypt($recoveryKeyData['key']));
$keyData['recoveryKeys'][] = $recoveryKeyData;
}
} catch (QUI\Auth\Google2Fa\Exception $Exception) {
QUI::getMessagesHandler()->addError(
QUI::getLocale()->get(
'quiqqer/authgoogle2fa',
'message.ajax.getKey.error',
'error' => $Exception->getMessage()
)
);
return false;
} catch (\Exception $Exception) {
QUI\System\Log::addError(
'AJAX :: package_quiqqer_authgoogle2fa_ajax_getKey -> ' . $Exception->getMessage()
);
QUI::getMessagesHandler()->addError(
QUI::getLocale()->get(
'quiqqer/authgoogle2fa',
'message.ajax.general.error'
)
);
return false;
}
return $keyData;
},
'Permission::checkAdminUser'
);