diff --git a/db.sql b/db.sql index 1a649772..3a825397 100644 --- a/db.sql +++ b/db.sql @@ -1166,6 +1166,8 @@ CREATE TABLE `users` ( `user_token` varchar(200) DEFAULT NULL, `user_avatar` varchar(200) DEFAULT NULL, `user_specific_encryption_ciphertext` varchar(200) DEFAULT NULL, + `user_php_session` varchar(255) DEFAULT NULL, + `user_extension_key` varchar(18) DEFAULT NULL, `user_created_at` datetime NOT NULL, `user_updated_at` datetime DEFAULT NULL, `user_archived_at` datetime DEFAULT NULL, diff --git a/functions.php b/functions.php index e38746b1..84266aca 100644 --- a/functions.php +++ b/functions.php @@ -368,10 +368,12 @@ function generateUserSessionKey($site_encryption_master_key){ $_SESSION['user_encryption_session_iv'] = $user_encryption_session_iv; //Give the user "their" key as a cookie - //By default, this should be HTTPS but we can change to HTTP for development via the config.php file + //By default, this should be HTTPS but we can change to HTTP for development via the config.php file (note that the extension won't work without HTTPS) include('config.php'); if($config_https_only){ - setcookie("user_encryption_session_key", $user_encryption_session_key, 0, "/", "", "true", "true"); + //setcookie("user_encryption_session_key", $user_encryption_session_key, 0, "/", "", "true", "true", ['samesite' => 'None']); + setcookie("user_encryption_session_key", "$user_encryption_session_key", ['path' => '/','secure' => true,'httponly' => true,'samesite' => 'None']); + } else{ setcookie("user_encryption_session_key", $user_encryption_session_key, 0, "/"); diff --git a/get_credential.php b/get_credential.php index fb1b8a84..ba71b562 100644 --- a/get_credential.php +++ b/get_credential.php @@ -1,5 +1,4 @@ '/','secure' => true,'httponly' => true,'samesite' => 'None']); + + // Set PHP session in DB so we can access the session encryption data (above) + $user_php_session = session_id(); + mysqli_query($mysqli, "UPDATE users SET user_php_session = '$user_php_session' WHERE user_id = '$user_id'"); + + } + if(empty($token)){ $_SESSION['logged'] = TRUE; mysqli_query($mysqli,"INSERT INTO logs SET log_type = 'Login', log_action = 'Success', log_description = '$user_name successfully logged in', log_ip = '$ip', log_user_agent = '$user_agent', log_created_at = NOW(), log_user_id = $user_id"); diff --git a/post.php b/post.php index 4b57a1a0..43ee26de 100644 --- a/post.php +++ b/post.php @@ -275,6 +275,23 @@ if(isset($_POST['edit_profile'])){ $logout = TRUE; } + // Enable extension access, only if it isn't already setup (user doesn't have cookie) + if(isset($_POST['extension']) && $_POST['extension'] == 'Yes'){ + if(!isset($_COOKIE['user_extension_key'])){ + $extension_key = keygen(); + mysqli_query($mysqli, "UPDATE users SET user_extension_key = '$extension_key' WHERE user_id = $user_id"); + + $extended_log_description .= ", extension access enabled"; + $logout = TRUE; + } + } + + // Disable extension access + if(!isset($_POST['extension'])){ + mysqli_query($mysqli, "UPDATE users SET user_extension_key = '' WHERE user_id = $user_id"); + $extended_log_description .= ", extension access disabled"; + } + //Logging mysqli_query($mysqli,"INSERT INTO logs SET log_type = 'User Preferences', log_action = 'Modify', log_description = '$session_name modified their preferences$extended_log_description', log_ip = '$session_ip', log_user_agent = '$session_user_agent', log_created_at = NOW(), log_user_id = $session_user_id, company_id = $session_company_id"); @@ -6640,12 +6657,17 @@ if(isset($_GET['export_client_pdf'])){ if(isset($_GET['logout'])){ mysqli_query($mysqli,"INSERT INTO logs SET log_type = 'Logout', log_action = 'Success', log_description = '$session_name logged out', log_ip = '$session_ip', log_user_agent = '$session_user_agent', log_created_at = NOW(), log_user_id = $session_user_id"); + mysqli_query($mysqli, "UPDATE users SET user_php_session = '' WHERE user_id = '$session_user_id'"); - session_start(); + setcookie("PHPSESSID", '', time() - 3600, "/"); + unset($_COOKIE['PHPSESSID']); setcookie("user_encryption_session_key", '', time() - 3600, "/"); unset($_COOKIE['user_encryption_session_key']); + setcookie("user_extension_key", '', time() - 3600, "/"); + unset($_COOKIE['user_extension_key']); + session_unset(); session_destroy(); diff --git a/settings-user.php b/settings-user.php index d3b8701a..4a3e3f5b 100644 --- a/settings-user.php +++ b/settings-user.php @@ -30,7 +30,7 @@ $sql_recent_logs = mysqli_query($mysqli,"SELECT * FROM logs " class="img-circle img-fluid"> -

+


@@ -72,6 +72,15 @@ $sql_recent_logs = mysqli_query($mysqli,"SELECT * FROM logs + +
+
+ > + +

Note: You must log out and back in again for these changes take effect.

+
+
+