|
|
|
|
@ -14,6 +14,44 @@ function getBrowserIdentifier() {
|
|
|
|
|
return 'unknown';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function isGuestModeEnabled() {
|
|
|
|
|
return defined('GUEST_USER_ENABLED') && GUEST_USER_ENABLED === true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function getGuestUsername() {
|
|
|
|
|
return defined('GUEST_USERNAME') ? (string) GUEST_USERNAME : 'guest';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function isGuestUsername($username) {
|
|
|
|
|
return isGuestModeEnabled() && strtolower(trim((string) $username)) === strtolower(getGuestUsername());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function isGuestSession() {
|
|
|
|
|
return isGuestModeEnabled() && !empty($_SESSION['auth_user']['username']) && isGuestUsername($_SESSION['auth_user']['username']);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function createGuestUser() {
|
|
|
|
|
return [
|
|
|
|
|
'username' => getGuestUsername(),
|
|
|
|
|
'role' => 'guest',
|
|
|
|
|
'guest' => true,
|
|
|
|
|
'email' => '',
|
|
|
|
|
'passwordHash' => ''
|
|
|
|
|
];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function loginAsGuest() {
|
|
|
|
|
if (!isGuestModeEnabled()) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$_SESSION['auth_user'] = [
|
|
|
|
|
'username' => getGuestUsername(),
|
|
|
|
|
'role' => 'guest'
|
|
|
|
|
];
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function getRememberMeCookieName($username) {
|
|
|
|
|
return 'kai_remember_' . sanitizeUsername($username);
|
|
|
|
|
}
|
|
|
|
|
@ -136,6 +174,17 @@ function getUserChatPath($username) {
|
|
|
|
|
return USER_CONFIG_DIR . '/' . sanitizeUsername($username) . '-chat.php';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function getConfiguredDefaultModel() {
|
|
|
|
|
$defaultModel = defined('DEFAULT_MODEL') ? trim((string) DEFAULT_MODEL) : '';
|
|
|
|
|
return $defaultModel !== '' ? $defaultModel : 'llama3';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function getDefaultModelForUser($username) {
|
|
|
|
|
$config = getUserConfig($username);
|
|
|
|
|
$storedModel = trim((string) ($config['defaultModel'] ?? ''));
|
|
|
|
|
return $storedModel !== '' ? $storedModel : getConfiguredDefaultModel();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function readUserConfig($username) {
|
|
|
|
|
$path = getUserConfigPath($username);
|
|
|
|
|
if (!file_exists($path)) {
|
|
|
|
|
@ -159,7 +208,8 @@ function writeUserConfig($username, $config) {
|
|
|
|
|
$data['role'] = (string) ($data['role'] ?? 'user');
|
|
|
|
|
$data['email'] = (string) ($data['email'] ?? '');
|
|
|
|
|
$data['passwordHash'] = (string) ($data['passwordHash'] ?? '');
|
|
|
|
|
$data['defaultModel'] = (string) ($data['defaultModel'] ?? '');
|
|
|
|
|
$storedDefaultModel = trim((string) ($data['defaultModel'] ?? ''));
|
|
|
|
|
$data['defaultModel'] = $storedDefaultModel !== '' ? $storedDefaultModel : getConfiguredDefaultModel();
|
|
|
|
|
|
|
|
|
|
$php = "<?php\n\nreturn " . var_export($data, true) . ";\n";
|
|
|
|
|
return file_put_contents(getUserConfigPath($username), $php) !== false;
|
|
|
|
|
@ -268,7 +318,7 @@ function saveUsers($users, $previousUsers = null) {
|
|
|
|
|
$entry['role'] = (string) ($entry['role'] ?? 'user');
|
|
|
|
|
$entry['email'] = (string) ($entry['email'] ?? '');
|
|
|
|
|
$entry['passwordHash'] = (string) ($entry['passwordHash'] ?? '');
|
|
|
|
|
$entry['defaultModel'] = (string) ($entry['defaultModel'] ?? '');
|
|
|
|
|
$entry['defaultModel'] = trim((string) ($entry['defaultModel'] ?? '')) !== '' ? trim((string) $entry['defaultModel']) : getConfiguredDefaultModel();
|
|
|
|
|
$normalizedUsers[] = $entry;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -355,7 +405,7 @@ function createUser($username, $password, $role = 'user', $email = '') {
|
|
|
|
|
'email' => $email,
|
|
|
|
|
'passwordHash' => hashPassword($password),
|
|
|
|
|
'role' => $role,
|
|
|
|
|
'defaultModel' => ''
|
|
|
|
|
'defaultModel' => getConfiguredDefaultModel()
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
if (!writeUserChat($username, [])) {
|
|
|
|
|
@ -449,6 +499,10 @@ function getAuthenticatedUser() {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (isGuestSession()) {
|
|
|
|
|
return createGuestUser();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return findUserByUsername($_SESSION['auth_user']['username'] ?? '');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|