From 27041769ac7a64c3203677e6d3b56c88a41d3d20 Mon Sep 17 00:00:00 2001 From: Austin Date: Fri, 12 Nov 2021 12:59:09 -0500 Subject: [PATCH] 2fa prep --- globals/functions.php | 78 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) diff --git a/globals/functions.php b/globals/functions.php index 78469a8..441bd91 100644 --- a/globals/functions.php +++ b/globals/functions.php @@ -5238,6 +5238,63 @@ function getBC($id) { //settings portion { +function safeGenerate2FASecret() +{ + $secret = ""; + while (true) { + $secret = $GLOBALS['authenticator']->createSecret(); + + $keycheck = $GLOBALS['pdo']->prepare("SELECT * FROM `google_2fa` WHERE `secret` = :ac"); + $keycheck->bindParam(":ac", $secret, PDO::PARAM_STR); + $keycheck->execute(); + if ($keycheck->rowCount() == 0) { + break; + } + } + return $secret; +} + +function deleteUser2FA($userid) +{ + $del = $GLOBALS['pdo']->prepare("DELETE FROM `google_2fa` WHERE `userid` = :uid"); + $del->bindParam(":uid", $userid, PDO::PARAM_INT); + $del->execute(); +} + +function getUser2FASecret($userid) +{ + $code = $GLOBALS['pdo']->prepare("SELECT * FROM `google_2fa` WHERE `userid` = :uid"); + $code->bindParam(":uid", $userid, PDO::PARAM_INT); + $code->execute(); + if ($code->rowCount() > 0) { + return $code->fetch(PDO::FETCH_OBJ)->secret; + } +} + +function verify2FACode($userid, $code) +{ + $secret = getUser2FASecret($userid); + if ($secret) { + if ($GLOBALS['authenticator']->verifyCode($secret, $code, 0)) { + return true; + } + } + return false; +} + +function activateUser2FA($userid, $code) //after initializing we make sure it works with a first time activation code +{ + if(!is2FAInitialized($userid) && + verify2FACode($userid, $code)) { + $check = $GLOBALS['pdo']->prepare("UPDATE `google_2fa` SET `validated` = 1 WHERE `userid` = :uid"); + $check->bindParam(":uid", $userid, PDO::PARAM_INT); + if ($check->execute()) { + return true; + } + } + return false; +} + function is2FAInitialized($userid) { $isinit = $GLOBALS['pdo']->prepare("SELECT * FROM `google_2fa` WHERE `validated` = 1 AND `userid` = :uid"); @@ -5249,6 +5306,27 @@ function is2FAInitialized($userid) return false; } +function initialize2FA($userid) +{ + $check = $GLOBALS['pdo']->prepare("SELECT * FROM `google_2fa` WHERE `userid` = :uid"); + $check->bindParam(":uid", $userid, PDO::PARAM_INT); + $check->execute(); + if ($check->rowCount() == 0) { + $username = getUsername($userid); + if ($username) { + $secret = safeGenerate2FASecret(); + $qrcode = $GLOBALS['authenticator']->getQRCodeGoogleUrl($username, $secret, "alphaland.cc"); + $new2fa = $GLOBALS['pdo']->prepare("INSERT INTO `google_2fa`(`userid`, `secret`, `qr`, `whenGenerated`) VALUES (:uid, :secret, :qr, UNIX_TIMESTAMP())"); + $new2fa->bindParam(":uid", $userid, PDO::PARAM_INT); + $new2fa->bindParam(":secret", $secret, PDO::PARAM_STR); + $new2fa->bindParam(":qr", $qrcode, PDO::PARAM_STR); + $new2fa->execute(); + } + } +} + + + function setBlurb($newblurb) { $newblurb = cleanInput($newblurb);