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">
-
Note: You must log out and back in again for these changes take effect.
+