From da70596895d8135e08f8caac6978117697b4c021 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Sun, 18 Aug 2024 21:39:29 +0200 Subject: [REFACTOR] Improved project structure. Signed-off-by: Amlal El Mahrouss --- dev/Kernel/Sources/User.cxx | 240 -------------------------------------------- 1 file changed, 240 deletions(-) delete mode 100644 dev/Kernel/Sources/User.cxx (limited to 'dev/Kernel/Sources/User.cxx') diff --git a/dev/Kernel/Sources/User.cxx b/dev/Kernel/Sources/User.cxx deleted file mode 100644 index 4109864a..00000000 --- a/dev/Kernel/Sources/User.cxx +++ /dev/null @@ -1,240 +0,0 @@ -/* - * ======================================================== - * - * Kernel - * Copyright ZKA Technologies., all rights reserved. - * - * File: User.cxx - * Purpose: User concept and management. - * - * ======================================================== - */ - -#include -#include -#include -#include - -#include - -#define cStdUser (0xCF) -#define cSuperUser (0xEF) - -/// BUGS: 0 - -namespace Kernel -{ - namespace Detail - { - /// \brief Constructs a token by hashing the password. - /// \param password password to hash. - /// \return the hashed password - const Int32 cred_construct_token(Char* password, User* user) - { - if (!password || !user) - return -1; - - for (Size i_pass = 0; i_pass < rt_string_len(password); ++i_pass) - { - Char cur_chr = password[i_pass]; - password[i_pass] = cur_chr + (user->IsStdUser() ? cStdUser : cSuperUser); - } - - return 0; - } - } // namespace Detail - - User::User(const Int32& sel, const Char* userName) - : fRing((RingKind)sel) - { - MUST_PASS(sel >= 0); - this->fUserName += userName; - } - - User::User(const RingKind& ringKind, const Char* userName) - : fRing(ringKind) - { - this->fUserName += userName; - } - - User::~User() = default; - - Bool User::TrySave(const Char* password) noexcept - { - kcout << "Trying to save password...\r"; - - SizeT len = rt_string_len(password); - - Char* token = new Char[len]; - - MUST_PASS(token); - - rt_copy_memory((VoidPtr)password, token, rt_string_len(password)); - - Detail::cred_construct_token(token, this); - - if (NewFilesystemManager::GetMounted()) - { - auto node = NewFilesystemManager::GetMounted()->Create(kUsersFile); - - if (node) - { - NewFilesystemManager::GetMounted()->Write(this->fUserName.CData(), node, (VoidPtr)token, (this->IsStdUser() ? cStdUser : cSuperUser) | kNewFSCatalogKindMetaFile, len); - delete node; - } - - delete token; - return true; - } - - delete token; - return false; - } - - bool User::operator==(const User& lhs) - { - return lhs.fRing == this->fRing; - } - - bool User::operator!=(const User& lhs) - { - return lhs.fRing != this->fRing; - } - - StringView& User::Name() noexcept - { - return this->fUserName; - } - - const RingKind& User::Ring() noexcept - { - return this->fRing; - } - - Bool User::IsStdUser() noexcept - { - return this->Ring() == RingKind::kRingStdUser; - } - - Bool User::IsSuperUser() noexcept - { - return this->Ring() == RingKind::kRingSuperUser; - } - - UserManager* UserManager::The() noexcept - { - UserManager* view = nullptr; - - if (!view) - view = new UserManager(); - - return view; - } - - Bool UserManager::TryLogIn(User* user, const Char* password) noexcept - { - if (!password || - !user) - { - ErrLocal() = kErrorInvalidData; - - kcout << "newoskrnl: Incorrect data given.\r"; - - return false; - } - - kcout << "newoskrnl: Trying to log-in.\r"; - - FileStreamUTF8 file(kUsersFile, "rb"); - - // ------------------------------------------ // - // Retrieve token from a specific file fork. - // ------------------------------------------ // - - auto token = file.Read(user->fUserName.CData()); - - if (!token) - { - ErrLocal() = kErrorInvalidCreds; - - kcout << "newoskrnl: Incorrect credentials.\r"; - return false; - } - else - { - Char generated_token[255] = {0}; - - // ================================================== // - // Provide password on token variable. - // ================================================== // - - rt_copy_memory((VoidPtr)password, generated_token, rt_string_len(password)); - - // ================================================== // - // Construct token. - // ================================================== // - - Detail::cred_construct_token(generated_token, user); - - // ================================================== // - // Checks if it matches the current token we have. - // ================================================== // - - if (rt_string_cmp((Char*)token, generated_token, rt_string_len(password))) - { - kcout << "newoskrnl: Incorrect credentials.\r"; - - mm_delete_ke_heap(token); - return false; - } - - kcout << "newoskrnl: Credentials are correct, moving on.\r"; - } - - // ------------------------------------------ // - // This was successful, continue. - // ------------------------------------------ // - - user->fUserToken = token; - - if (fCurrentUser) - { - if (!fLastLoggedOffUser) - { - fLastLoggedOffUser = fCurrentUser; - } - else - { - this->TryLogOff(); - } - } - - fCurrentUser = user; - Kernel::kcout << "newoskrnl: Logged in as: " << fCurrentUser->Name().CData() << Kernel::endl; - - return true; - } - - User* UserManager::GetCurrent() noexcept - { - return fCurrentUser; - } - - Void UserManager::TryLogOff() noexcept - { - if (!fCurrentUser) - return; - - // an illegal operation just occured, we can't risk more. - if (fCurrentUser == fRootUser) - { - ke_stop(RUNTIME_CHECK_BOOTSTRAP); - } - - if (fLastLoggedOffUser) - delete fLastLoggedOffUser; - - fLastLoggedOffUser = nullptr; - fLastLoggedOffUser = fCurrentUser; - } -} // namespace Kernel -- cgit v1.2.3