aboutsummaryrefslogtreecommitdiff
path: root/ShiftOS_TheReturn
diff options
context:
space:
mode:
Diffstat (limited to 'ShiftOS_TheReturn')
-rw-r--r--ShiftOS_TheReturn/LoginManager.cs65
-rw-r--r--ShiftOS_TheReturn/SaveSystem.cs161
-rw-r--r--ShiftOS_TheReturn/ShiftOS.Engine.csproj1
-rw-r--r--ShiftOS_TheReturn/Skinning.cs16
-rw-r--r--ShiftOS_TheReturn/UserManagementCommands.cs52
5 files changed, 233 insertions, 62 deletions
diff --git a/ShiftOS_TheReturn/LoginManager.cs b/ShiftOS_TheReturn/LoginManager.cs
new file mode 100644
index 0000000..d326f2c
--- /dev/null
+++ b/ShiftOS_TheReturn/LoginManager.cs
@@ -0,0 +1,65 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using ShiftOS.Objects;
+
+namespace ShiftOS.Engine
+{
+ public static class LoginManager
+ {
+ private static ILoginFrontend _login = null;
+
+ public static void Init(ILoginFrontend login)
+ {
+ _login = login;
+ }
+
+ public static void PromptForLogin()
+ {
+ _login.LoginComplete += (user) =>
+ {
+ LoginComplete?.Invoke(user);
+ };
+ _login.Login();
+ }
+
+ public static bool ShouldUseGUILogin
+ {
+ get
+ {
+ if (_login == null)
+ return false;
+ return _login.UseGUILogin;
+ }
+ }
+
+ public static event Action<ClientSave> LoginComplete;
+ }
+
+ /// <summary>
+ /// Interface for GUI-based logins.
+ /// </summary>
+ public interface ILoginFrontend
+ {
+ /// <summary>
+ /// When implemented, shows the login UI.
+ /// </summary>
+ void Login();
+
+ /// <summary>
+ /// Gets whether the ShiftOS engine should use a GUI-based login system or the default one.
+ /// </summary>
+ bool UseGUILogin { get; }
+
+
+ /// <summary>
+ /// Occurs when the login is complete.
+ /// </summary>
+ event Action<ClientSave> LoginComplete;
+
+
+
+ }
+}
diff --git a/ShiftOS_TheReturn/SaveSystem.cs b/ShiftOS_TheReturn/SaveSystem.cs
index f29e5b8..e635a7a 100644
--- a/ShiftOS_TheReturn/SaveSystem.cs
+++ b/ShiftOS_TheReturn/SaveSystem.cs
@@ -98,13 +98,25 @@ namespace ShiftOS.Engine
}
Thread.Sleep(350);
- Console.WriteLine("Initiating kernel...");
+ Console.WriteLine("ShiftKernel v0.4.2");
+ Console.WriteLine("(MIT) DevX 2017, Very Little Rights Reserved");
+ Console.WriteLine("");
+ Console.WriteLine("THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR");
+ Console.WriteLine("IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,");
+ Console.WriteLine("FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE");
+ Console.WriteLine("AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER");
+ Console.WriteLine("LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,");
+ Console.WriteLine("OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE");
+ Console.WriteLine("SOFTWARE.");
+ Console.WriteLine("");
Thread.Sleep(250);
- Console.WriteLine("Reading filesystem...");
+ Console.WriteLine("[init] Kernel boot complete.");
+ Console.WriteLine("[sfs] Loading SFS driver v3");
Thread.Sleep(100);
- Console.WriteLine("Reading configuration...");
+ Console.WriteLine("[sfs] 4096 blocks read.");
+ Console.WriteLine("[simpl-conf] Reading configuration files (global-3.conf)");
- Console.WriteLine("{CONNECTING_TO_MUD}");
+ Console.WriteLine("[inetd] Connecting to network...");
if (defaultConf.ConnectToMud == true)
{
@@ -113,7 +125,7 @@ namespace ShiftOS.Engine
{
//Connection successful! Stop waiting!
guidReceived = true;
- Console.WriteLine("Connection successful.");
+ Console.WriteLine("[inetd] Connection successful.");
};
try
@@ -125,20 +137,20 @@ namespace ShiftOS.Engine
{
Thread.Sleep(10);
}
- Console.WriteLine("GUID received - bootstrapping complete.");
+ Console.WriteLine("[inetd] DHCP GUID recieved, finished setup");
FinishBootstrap();
}
catch (Exception ex)
{
//No errors, this never gets called.
- Console.WriteLine("{ERROR}: " + ex.Message);
+ Console.WriteLine("[inetd] SEVERE: " + ex.Message);
Thread.Sleep(3000);
ServerManager.StartLANServer();
while (ServerManager.thisGuid == new Guid())
{
Thread.Sleep(10);
}
- Console.WriteLine("GUID received - bootstrapping complete.");
+ Console.WriteLine("[inetd] DHCP GUID recieved, finished setup");
FinishBootstrap();
}
}
@@ -196,7 +208,7 @@ namespace ShiftOS.Engine
Thread.Sleep(75);
Thread.Sleep(50);
- Console.WriteLine("{SYSTEM_INITIATED}");
+ Console.WriteLine("[usr-man] Accepting logins on local tty 1.");
Sysname:
bool waitingForNewSysName = false;
@@ -204,7 +216,7 @@ namespace ShiftOS.Engine
if (string.IsNullOrWhiteSpace(CurrentSave.SystemName))
{
- Infobox.PromptText("Enter a system name", "Your system does not have a name. All systems within the digital society must have a name. Please enter one.", (name)=>
+ Infobox.PromptText("Enter a system name", "Your system does not have a name. All systems within the digital society must have a name. Please enter one.", (name) =>
{
if (string.IsNullOrWhiteSpace(name))
Infobox.Show("Invalid name", "Please enter a valid name.", () =>
@@ -249,7 +261,7 @@ namespace ShiftOS.Engine
CurrentSave.Users = new List<ClientSave>();
- if(CurrentSave.Users.Count == 0)
+ if (CurrentSave.Users.Count == 0)
{
CurrentSave.Users.Add(new ClientSave
{
@@ -257,76 +269,101 @@ namespace ShiftOS.Engine
Password = "",
Permissions = UserPermissions.Root
});
- Console.WriteLine("No users found. Creating new user with username \"root\", with no password.");
+ Console.WriteLine("[usr-man] WARN: No users found. Creating new user with username \"root\", with no password.");
}
TerminalBackend.InStory = false;
TerminalBackend.PrefixEnabled = false;
- Login:
- string username = "";
- int progress = 0;
- bool goback = false;
- TextSentEventHandler ev = null;
- ev = (text) =>
+ if (LoginManager.ShouldUseGUILogin)
{
- if (progress == 0)
+ Action<ClientSave> Completed = null;
+ Completed += (user) =>
+ {
+ CurrentUser = user;
+ LoginManager.LoginComplete -= Completed;
+ };
+ LoginManager.LoginComplete += Completed;
+ Desktop.InvokeOnWorkerThread(() =>
+ {
+ LoginManager.PromptForLogin();
+ });
+ while (CurrentUser == null)
{
- if (!string.IsNullOrWhiteSpace(text))
+ Thread.Sleep(10);
+ }
+ }
+ else
+ {
+
+ Login:
+ string username = "";
+ int progress = 0;
+ bool goback = false;
+ TextSentEventHandler ev = null;
+ ev = (text) =>
+ {
+ if (progress == 0)
{
- if (CurrentSave.Users.FirstOrDefault(x => x.Username == text) == null)
+ string loginstr = CurrentSave.SystemName + " login: ";
+ string getuser = text.Remove(0, loginstr.Length);
+ if (!string.IsNullOrWhiteSpace(getuser))
{
- Console.WriteLine("User not found.");
- goback = true;
+ if (CurrentSave.Users.FirstOrDefault(x => x.Username == getuser) == null)
+ {
+ Console.WriteLine("User not found.");
+ goback = true;
+ progress++;
+ TerminalBackend.TextSent -= ev;
+ return;
+ }
+ username = getuser;
progress++;
+ }
+ else
+ {
+ Console.WriteLine("Username not provided.");
TerminalBackend.TextSent -= ev;
- return;
+ goback = true;
+ progress++;
}
- username = text;
- progress++;
}
- else
+ else if (progress == 1)
{
- Console.WriteLine("Username not provided.");
+ string passwordstr = "password: ";
+ string getpass = text.Remove(0, passwordstr.Length);
+ var user = CurrentSave.Users.FirstOrDefault(x => x.Username == username);
+ if (user.Password == getpass)
+ {
+ Console.WriteLine("Welcome to ShiftOS.");
+ CurrentUser = user;
+ Thread.Sleep(2000);
+ progress++;
+ }
+ else
+ {
+ Console.WriteLine("Access denied.");
+ goback = true;
+ progress++;
+ }
TerminalBackend.TextSent -= ev;
- goback = true;
- progress++;
}
- }
- else if (progress == 1)
+ };
+ TerminalBackend.TextSent += ev;
+
+ Console.Write(CurrentSave.SystemName + " login: ");
+ while (progress == 0)
{
- var user = CurrentSave.Users.FirstOrDefault(x => x.Username == username);
- if (user.Password == text)
- {
- Console.WriteLine("Welcome to ShiftOS.");
- CurrentUser = user;
- Thread.Sleep(2000);
- progress++;
- }
- else
- {
- Console.WriteLine("Access denied.");
- goback = true;
- progress++;
- }
- TerminalBackend.TextSent -= ev;
+ Thread.Sleep(10);
}
- };
- TerminalBackend.TextSent += ev;
- Console.WriteLine(CurrentSave.SystemName + " login:");
- while(progress == 0)
- {
- Thread.Sleep(10);
+ if (goback)
+ goto Login;
+ Console.Write("password: ");
+ while (progress == 1)
+ Thread.Sleep(10);
+ if (goback)
+ goto Login;
}
- if (goback)
- goto Login;
- Console.WriteLine("password:");
- while (progress == 1)
- Thread.Sleep(10);
- if (goback)
- goto Login;
-
-
TerminalBackend.PrefixEnabled = true;
Shiftorium.LogOrphanedUpgrades = true;
Desktop.InvokeOnWorkerThread(new Action(() =>
diff --git a/ShiftOS_TheReturn/ShiftOS.Engine.csproj b/ShiftOS_TheReturn/ShiftOS.Engine.csproj
index fb33dc5..3b5eadd 100644
--- a/ShiftOS_TheReturn/ShiftOS.Engine.csproj
+++ b/ShiftOS_TheReturn/ShiftOS.Engine.csproj
@@ -111,6 +111,7 @@
<Compile Include="IShiftOSWindow.cs" />
<Compile Include="KernelWatchdog.cs" />
<Compile Include="Localization.cs" />
+ <Compile Include="LoginManager.cs" />
<Compile Include="NotificationDaemon.cs" />
<Compile Include="OutOfBoxExperience.cs" />
<Compile Include="Paths.cs" />
diff --git a/ShiftOS_TheReturn/Skinning.cs b/ShiftOS_TheReturn/Skinning.cs
index 4cc9bbd..b731c4f 100644
--- a/ShiftOS_TheReturn/Skinning.cs
+++ b/ShiftOS_TheReturn/Skinning.cs
@@ -267,6 +267,22 @@ namespace ShiftOS.Engine
[ShifterHidden]
public Dictionary<string, byte[]> AppIcons = new Dictionary<string, byte[]>();
+ [ShifterMeta("System")]
+ [ShifterCategory("Login Screen")]
+ [RequiresUpgrade("gui_based_login_screen")]
+ [ShifterName("Login Screen Background Color")]
+ [ShifterDescription("Change the background color of the login screen.")]
+ public Color LoginScreenColor = Skin.DesktopBG;
+
+ [ShifterMeta("System")]
+ [ShifterCategory("Login Screen")]
+ [RequiresUpgrade("skinning;gui_based_login_screen")]
+ [ShifterName("Login Screen Background Image")]
+ [ShifterDescription("Set an image as your login screen!")]
+ [Image("login")]
+ public byte[] LoginScreenBG = null;
+
+
[RequiresUpgrade("shift_screensaver")]
[ShifterMeta("System")]
[ShifterCategory("Screen saver")]
diff --git a/ShiftOS_TheReturn/UserManagementCommands.cs b/ShiftOS_TheReturn/UserManagementCommands.cs
index 1c3c0ed..5702e08 100644
--- a/ShiftOS_TheReturn/UserManagementCommands.cs
+++ b/ShiftOS_TheReturn/UserManagementCommands.cs
@@ -47,12 +47,20 @@ namespace ShiftOS.Engine
}
var user = SaveSystem.CurrentSave.Users.FirstOrDefault(x => x.Username == name);
+ if(user.Username != SaveSystem.CurrentUser.Username)
+ {
+ Console.WriteLine("Error: Cannot remove yourself.");
+ return true;
+ }
SaveSystem.CurrentSave.Users.Remove(user);
Console.WriteLine($"Removing user \"{name}\" from system...");
SaveSystem.SaveGame();
return true;
}
+
+
+
[Command("set_acl")]
[RequiresArgument("user")]
[RequiresArgument("val")]
@@ -116,13 +124,57 @@ namespace ShiftOS.Engine
return true;
}
+
+ [Command("users", description = "Get a list of all users on the system.")]
+ public static bool GetUsers()
+ {
+ foreach (var u in SaveSystem.CurrentSave.Users)
+ {
+ if (u.Username == SaveSystem.CurrentUser.Username)
+ {
+ ConsoleEx.ForegroundColor = ConsoleColor.Magenta;
+ ConsoleEx.Bold = true;
+ }
+ else
+ {
+ ConsoleEx.ForegroundColor = ConsoleColor.Gray;
+ ConsoleEx.Bold = false;
+ }
+ Console.WriteLine(u.Username);
+ }
+ return true;
+ }
}
[Namespace("user")]
[RequiresUpgrade("mud_fundamentals")]
public static class UserManagementCommands
{
+ [Command("login", description = "Log in as another user.")]
+ [RequiresArgument("user")]
+ [RequiresArgument("pass")]
+ public static bool Login(Dictionary<string, object> args)
+ {
+ string user = args["user"].ToString();
+ string pass = args["pass"].ToString();
+
+ var usr = SaveSystem.CurrentSave.Users.FirstOrDefault(x => x.Username == user);
+ if(usr==null)
+ {
+ Console.WriteLine("Error: No such user.");
+ return true;
+ }
+ if (usr.Password != pass)
+ {
+ Console.WriteLine("Access denied.");
+ return true;
+ }
+
+ SaveSystem.CurrentUser = usr;
+ Console.WriteLine("Access granted.");
+ return true;
+ }
[Command("setpass", description ="Allows you to set your password to a new value.", usage ="old:,new:")]
[RequiresArgument("old")]