diff --git a/programs/include/montauk/user.h b/programs/include/montauk/user.h index 0324ecd..85dbae5 100644 --- a/programs/include/montauk/user.h +++ b/programs/include/montauk/user.h @@ -297,10 +297,10 @@ namespace user { return false; } - // ---- Session (current logged-in user) ---- + // ---- Session state and current user helpers ---- - // Write the current session after successful login. - // Stores username in 0:/config/session.toml so any app can query it. + // Persist login session state after successful login. + // Current processes should use getuser() for their active username. inline void set_session(const char* username) { montauk::toml::Doc doc; doc.init(); @@ -314,19 +314,14 @@ namespace user { montauk::fdelete("0:/config/session.toml"); } - // Read the current username into buf. Returns true if a session exists. + // Read the current process username into buf. Returns true if one is set. inline bool get_session_username(char* buf, int bufSz) { - auto doc = config::load("session"); - const char* name = doc.get_string("session.username", ""); - bool found = (name[0] != '\0'); - if (found) { - montauk::strncpy(buf, name, bufSz); - } - doc.destroy(); - return found; + if (buf == nullptr || bufSz <= 0) return false; + int len = montauk::getuser(buf, (uint64_t)bufSz); + return len > 0 && buf[0] != '\0'; } - // Get the current user's home directory. Returns true if a session exists. + // Get the current process user's home directory. Returns true if a user is set. inline bool get_home_dir(char* buf, int bufSz) { char username[32]; if (!get_session_username(username, sizeof(username))) return false; diff --git a/programs/src/login/main.cpp b/programs/src/login/main.cpp index e2c6c15..96cc335 100644 --- a/programs/src/login/main.cpp +++ b/programs/src/login/main.cpp @@ -509,7 +509,7 @@ static bool try_login(LoginState* ls) { return false; } - // Write session so any app can query the current user + // Persist login session state for the active desktop session. montauk::user::set_session(ls->username); return true; } diff --git a/programs/src/mtkfetch/main.cpp b/programs/src/mtkfetch/main.cpp index 8baac43..15bcf20 100644 --- a/programs/src/mtkfetch/main.cpp +++ b/programs/src/mtkfetch/main.cpp @@ -7,7 +7,6 @@ #include #include #include -#include // ==== ANSI color codes ==== @@ -81,8 +80,11 @@ extern "C" void _start() { Montauk::SysInfo sysinfo; montauk::get_info(&sysinfo); - auto doc = montauk::config::load("session"); - const char* username = doc.get_string("session.username", "user"); + const char* username = "user"; + char username_buf[32] = {}; + if (montauk::getuser(username_buf, sizeof(username_buf)) > 0 && username_buf[0]) { + username = username_buf; + } uint64_t ms = montauk::get_milliseconds(); uint64_t total_secs = ms / 1000; @@ -260,8 +262,6 @@ extern "C" void _start() { p = app(p, RST); } - doc.destroy(); - // ==== Print output ==== montauk::putchar('\n'); diff --git a/programs/src/music/main.cpp b/programs/src/music/main.cpp index 74c038a..2cb67b8 100644 --- a/programs/src/music/main.cpp +++ b/programs/src/music/main.cpp @@ -1500,20 +1500,14 @@ extern "C" void _start() { music_visualizer::reset(g.visualizer); // Parse arguments: accept a directory path or a file path - // Helper: set dir_path to current user's home via session config + // Helper: set dir_path to current user's home directory auto set_user_home = [&]() { - auto doc = montauk::config::load("session"); - const char* name = doc.get_string("session.username", ""); - if (name[0]) { - int p = 0; - const char* pfx = "0:/users/"; - while (*pfx && p < (int)sizeof(g.dir_path) - 1) g.dir_path[p++] = *pfx++; - while (*name && p < (int)sizeof(g.dir_path) - 1) g.dir_path[p++] = *name++; - g.dir_path[p] = '\0'; + char username[32] = {}; + if (montauk::getuser(username, sizeof(username)) > 0 && username[0]) { + snprintf(g.dir_path, sizeof(g.dir_path), "0:/users/%s", username); } else { memcpy(g.dir_path, "0:/home", 8); } - doc.destroy(); }; char arg_file[128] = {}; diff --git a/programs/src/screenshot/main.cpp b/programs/src/screenshot/main.cpp index 052e232..58f18af 100644 --- a/programs/src/screenshot/main.cpp +++ b/programs/src/screenshot/main.cpp @@ -8,7 +8,6 @@ #include #include #include -#include extern "C" { #include @@ -114,17 +113,10 @@ extern "C" void _start() { // Build output path: 0:/users//Pictures/screenshot_YYYYMMDD_HHMMSS.jpg char username[32] = {}; - { - auto doc = montauk::config::load("session"); - const char* name = doc.get_string("session.username", ""); - if (name[0] == '\0') { - doc.destroy(); - montauk::mfree(jpeg.data); - montauk::print("screenshot: no user session\n"); - montauk::exit(1); - } - montauk::strncpy(username, name, sizeof(username) - 1); - doc.destroy(); + if (montauk::getuser(username, sizeof(username)) <= 0 || username[0] == '\0') { + montauk::mfree(jpeg.data); + montauk::print("screenshot: no user session\n"); + montauk::exit(1); } char home[128]; diff --git a/programs/src/video/main.cpp b/programs/src/video/main.cpp index b4b3439..82cb99f 100644 --- a/programs/src/video/main.cpp +++ b/programs/src/video/main.cpp @@ -7,7 +7,6 @@ #include #include #include -#include #include #include #include @@ -1255,19 +1254,17 @@ static bool handle_key(const Montauk::KeyEvent& key, bool& quit) { } static void set_default_dir() { - auto doc = montauk::config::load("session"); - const char* name = doc.get_string("session.username", ""); - if (name[0]) { - snprintf(g.dir_path, sizeof(g.dir_path), "0:/users/%s/Videos", name); + char username[32] = {}; + if (montauk::getuser(username, sizeof(username)) > 0 && username[0]) { + snprintf(g.dir_path, sizeof(g.dir_path), "0:/users/%s/Videos", username); const char* probe[1]; int ok = montauk::readdir(g.dir_path, probe, 1); if (ok < 0) { - snprintf(g.dir_path, sizeof(g.dir_path), "0:/users/%s", name); + snprintf(g.dir_path, sizeof(g.dir_path), "0:/users/%s", username); } } else { montauk::strncpy(g.dir_path, "0:/home", (int)sizeof(g.dir_path)); } - doc.destroy(); } static void parse_args(char* auto_file, int auto_file_cap) { diff --git a/template/docs/syscalls.md b/template/docs/syscalls.md index a2cd487..a8e91fa 100644 --- a/template/docs/syscalls.md +++ b/template/docs/syscalls.md @@ -519,11 +519,11 @@ bool config::unset(toml::Doc* doc, const char* key); ### Example ```cpp -auto doc = montauk::config::load("session"); -const char* user = doc.get_string("session.username", "guest"); +auto doc = montauk::config::load("desktop"); +const char* theme = doc.get_string("appearance.theme", "light"); -montauk::config::set_string(&doc, "session.theme", "dark"); -montauk::config::save("session", &doc); +montauk::config::set_string(&doc, "appearance.theme", "dark"); +montauk::config::save("desktop", &doc); ``` --- @@ -543,8 +543,8 @@ bool user::change_password(const char* username, const char* new_password); void user::set_session(const char* username); // Log in void user::clear_session(); // Log out -bool user::get_session_username(char* buf, int sz); // Get current user -bool user::get_home_dir(char* buf, int sz); // Get user's home directory +bool user::get_session_username(char* buf, int sz); // Get current process user +bool user::get_home_dir(char* buf, int sz); // Get current process home directory ``` --- diff --git a/template/sysroot/include/montauk/user.h b/template/sysroot/include/montauk/user.h index 0324ecd..85dbae5 100644 --- a/template/sysroot/include/montauk/user.h +++ b/template/sysroot/include/montauk/user.h @@ -297,10 +297,10 @@ namespace user { return false; } - // ---- Session (current logged-in user) ---- + // ---- Session state and current user helpers ---- - // Write the current session after successful login. - // Stores username in 0:/config/session.toml so any app can query it. + // Persist login session state after successful login. + // Current processes should use getuser() for their active username. inline void set_session(const char* username) { montauk::toml::Doc doc; doc.init(); @@ -314,19 +314,14 @@ namespace user { montauk::fdelete("0:/config/session.toml"); } - // Read the current username into buf. Returns true if a session exists. + // Read the current process username into buf. Returns true if one is set. inline bool get_session_username(char* buf, int bufSz) { - auto doc = config::load("session"); - const char* name = doc.get_string("session.username", ""); - bool found = (name[0] != '\0'); - if (found) { - montauk::strncpy(buf, name, bufSz); - } - doc.destroy(); - return found; + if (buf == nullptr || bufSz <= 0) return false; + int len = montauk::getuser(buf, (uint64_t)bufSz); + return len > 0 && buf[0] != '\0'; } - // Get the current user's home directory. Returns true if a session exists. + // Get the current process user's home directory. Returns true if a user is set. inline bool get_home_dir(char* buf, int bufSz) { char username[32]; if (!get_session_username(username, sizeof(username))) return false;