get("setup 2fa", false); $APPS["setup_2fa"]["icon"] = "lock"; if (userHasTOTP($_SESSION['username'])) { $APPS["setup_2fa"]["content"] = '
' . $Strings->get("2fa active", false) . '
' . '' . $Strings->get("remove 2fa", false) . ''; } else if ($_GET['2fa'] == "generate") { $codeuri = newTOTP($_SESSION['username']); $userdata = $database->select('accounts', ['email', 'authsecret', 'realname'], ['username' => $_SESSION['username']])[0]; $label = SYSTEM_NAME . ":" . is_null($userdata['email']) ? $userdata['realname'] : $userdata['email']; $issuer = SYSTEM_NAME; $qrCode = new QrCode($codeuri); $qrCode->setWriterByName('svg'); $qrCode->setSize(550); $qrCode->setErrorCorrectionLevel(ErrorCorrectionLevel::HIGH); $qrcode = $qrCode->writeDataUri(); $totp = Factory::loadFromProvisioningUri($codeuri); $codesecret = $totp->getSecret(); $chunk_secret = trim(chunk_split($codesecret, 4, ' ')); $lang_manualsetup = $Strings->get("manual setup", false); $lang_secretkey = $Strings->get("secret key", false); $lang_label = $Strings->get("label", false); $lang_issuer = $Strings->get("issuer", false); $lang_entercode = $Strings->get("enter otp code", false); $APPS["setup_2fa"]["content"] = '
' . $Strings->get("scan 2fa qrcode", false) . '
' . << .margintop-15px { margin-top: 15px; } .mono-chunk { text-align: center; font-size: 110%; font-family: monospace; }