prevent user from registering authenticator multiple times
parent
9c596691d2
commit
ab21c7a06b
|
@ -465,11 +465,18 @@ if (isset($_GET['query'])) {
|
||||||
// webauthn two factor authentication
|
// webauthn two factor authentication
|
||||||
case "webauthn-tfa-registration":
|
case "webauthn-tfa-registration":
|
||||||
if (isset($_SESSION["mailcow_cc_role"])) {
|
if (isset($_SESSION["mailcow_cc_role"])) {
|
||||||
|
// Exclude existing CredentialIds, if any
|
||||||
|
$stmt = $pdo->prepare("SELECT `keyHandle` FROM `tfa` WHERE username = :username");
|
||||||
|
$stmt->execute(array(':username' => $_SESSION['mailcow_cc_username']));
|
||||||
|
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||||
|
while($row = array_shift($rows)) {
|
||||||
|
$excludeCredentialIds[] = base64_decode($row['keyHandle']);
|
||||||
|
}
|
||||||
// getCreateArgs($userId, $userName, $userDisplayName, $timeout=20, $requireResidentKey=false, $requireUserVerification=false, $crossPlatformAttachment=null, $excludeCredentialIds=array())
|
// getCreateArgs($userId, $userName, $userDisplayName, $timeout=20, $requireResidentKey=false, $requireUserVerification=false, $crossPlatformAttachment=null, $excludeCredentialIds=array())
|
||||||
// cross-platform: true, if type internal is not allowed
|
// cross-platform: true, if type internal is not allowed
|
||||||
// false, if only internal is allowed
|
// false, if only internal is allowed
|
||||||
// null, if internal and cross-platform is allowed
|
// null, if internal and cross-platform is allowed
|
||||||
$createArgs = $WebAuthn->getCreateArgs($_SESSION["mailcow_cc_username"], $_SESSION["mailcow_cc_username"], $_SESSION["mailcow_cc_username"], 30, false, $GLOBALS['WEBAUTHN_UV_FLAG_REGISTER'], null);
|
$createArgs = $WebAuthn->getCreateArgs($_SESSION["mailcow_cc_username"], $_SESSION["mailcow_cc_username"], $_SESSION["mailcow_cc_username"], 30, false, $GLOBALS['WEBAUTHN_UV_FLAG_REGISTER'], null, $excludeCredentialIds);
|
||||||
|
|
||||||
print(json_encode($createArgs));
|
print(json_encode($createArgs));
|
||||||
$_SESSION['challenge'] = $WebAuthn->getChallenge();
|
$_SESSION['challenge'] = $WebAuthn->getChallenge();
|
||||||
|
|
Loading…
Reference in New Issue