summaryrefslogtreecommitdiffhomepage
path: root/Kernel/Sources/User.cxx
diff options
context:
space:
mode:
authorAmlal <amlalelmahrouss@icloud.com>2024-07-29 08:30:04 +0000
committerAmlal <amlalelmahrouss@icloud.com>2024-07-29 08:30:04 +0000
commit0d661d2587046d3fc078bc15a089b94489c08a8d (patch)
tree5937d6b70ba935b419eed3b309abd2ced464ffe6 /Kernel/Sources/User.cxx
parentc4023005e029ae092dad2689564c490580dd5c28 (diff)
parent83a3ac27ddd9a02ad698407515b0e708197b2aac (diff)
Merged in MHR-36 (pull request #18)
[MHR-36] Last commit on ticket.
Diffstat (limited to 'Kernel/Sources/User.cxx')
-rw-r--r--Kernel/Sources/User.cxx69
1 files changed, 69 insertions, 0 deletions
diff --git a/Kernel/Sources/User.cxx b/Kernel/Sources/User.cxx
index 68d0d5be..a86f9ac3 100644
--- a/Kernel/Sources/User.cxx
+++ b/Kernel/Sources/User.cxx
@@ -12,6 +12,8 @@
#include <KernelKit/User.hxx>
#include <NewKit/KernelCheck.hpp>
+#include <KernelKit/FileManager.hpp>
+#include <KernelKit/ProcessScheduler.hxx>
/// bugs 0
@@ -61,4 +63,71 @@ namespace Kernel
{
return this->Ring() == RingKind::kRingSuperUser;
}
+
+ UserView* UserView::The() noexcept
+ {
+ UserView* view = nullptr;
+
+ if (!view)
+ view = new UserView();
+
+ return view;
+ }
+
+ Void UserView::LogIn(User* user, const Char* password) noexcept
+ {
+ if (!password ||
+ !user)
+ {
+ ErrLocal() = kErrorInvalidData;
+
+ return;
+ }
+
+ FileStreamUTF8 file(kUsersFile, "rb");
+
+ auto token = file.Read(password);
+
+ if (!token)
+ {
+ ErrLocal() = kErrorInvalidCreds;
+
+ kcout << "newoskrnl: Incorrect credentials.\r";
+ return;
+ }
+
+ user->fUserToken = token;
+
+ if (fCurrentUser)
+ {
+ if (!fLastLoggedOffUser)
+ {
+ fLastLoggedOffUser = fCurrentUser;
+ }
+ else
+ {
+ this->LogOff();
+ }
+ }
+
+ fCurrentUser = user;
+ }
+
+ Void UserView::LogOff() 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