$user["uid"], "hash" => self::getCookieHashForUser($user), "ip" => ($_SERVER['REMOTE_ADDR'] ?? '') ?: '0.0.0.0' ]); } else { $value = ""; } setcookie("Friendica", $value, $time, "/", "", (Config::get('system', 'ssl_policy') == App\BaseURL::SSL_POLICY_FULL), true); } /** * @brief Kills the "Friendica" cookie and all session data */ public static function deleteSession() { self::setCookie(-3600); // make sure cookie is deleted on browser close, as a security measure session_unset(); session_destroy(); } public static function twoFactorCheck($uid, App $a) { // Check user setting, if 2FA disabled return if (!PConfig::get($uid, '2fa', 'verified')) { return; } // Check current path, if 2fa authentication module return if ($a->argc > 0 && in_array($a->argv[0], ['2fa', 'view', 'help', 'api', 'proxy', 'logout'])) { return; } // Case 1: 2FA session present and valid: return if (Session::get('2fa')) { return; } // Case 2: No valid 2FA session: redirect to code verification page if ($a->isAjax()) { throw new ForbiddenException(); } else { $a->internalRedirect('2fa'); } } }