blob: 078061c30deb7a343543e8233839ba7c33f0025a (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
|
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using ShiftOS.Engine;
using ShiftOS.Objects;
using ShiftOS.WinForms.Tools;
namespace ShiftOS.WinForms
{
public partial class GUILogin : Form
{
public GUILogin()
{
InitializeComponent();
uiTimer.Tick += (o, a) =>
{
btnlogin.Left = txtusername.Left + ((txtusername.Width - btnlogin.Width) / 2);
btnlogin.Top = txtpassword.Top + txtpassword.Height + 5;
lblogintitle.Left = pnlloginform.Left + ((pnlloginform.Width - lblogintitle.Width) / 2);
lblogintitle.Top = pnlloginform.Top - lblogintitle.Width - 5;
};
uiTimer.Interval = 100;
this.FormBorderStyle = FormBorderStyle.None;
this.WindowState = FormWindowState.Maximized;
this.TopMost = true;
}
Timer uiTimer = new Timer();
public event Action<ClientSave> LoginComplete;
private void GUILogin_Load(object sender, EventArgs e)
{
uiTimer.Start();
ControlManager.SetupControl(lblogintitle);
ControlManager.SetupControls(pnlloginform);
ControlManager.SetupControl(btnshutdown);
pnlloginform.CenterParent();
txtusername.CenterParent();
txtusername.Location = new System.Drawing.Point(txtusername.Location.X, 77);
txtpassword.CenterParent();
btnlogin.CenterParent();
btnlogin.Location = new System.Drawing.Point(btnlogin.Location.X, 143);
this.BackColor = SkinEngine.LoadedSkin.LoginScreenColor;
this.BackgroundImage = SkinEngine.GetImage("login");
this.BackgroundImageLayout = SkinEngine.GetImageLayout("login");
}
private ClientSave User = null;
bool userRequestClose = true;
bool shuttingdown = false;
private void GUILogin_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = userRequestClose;
if (!e.Cancel)
{
uiTimer.Stop();
if (shuttingdown == false)
{
LoginComplete?.Invoke(User);
}
}
}
private void btnlogin_Click(object sender, EventArgs e)
{
if (string.IsNullOrWhiteSpace(txtusername.Text))
{
Infobox.Show("Enter a username", "You must enter your username to login.");
return;
}
//Don't check for blank passwords.
var user = SaveSystem.CurrentSave.Users.FirstOrDefault(x => x.Username == txtusername.Text);
if(user == null)
{
Infobox.Show("Invalid username", "That username was not found on your system.");
return;
}
if (user.Password != txtpassword.Text)
{
Infobox.Show("Access denied.", "That password didn't work. Please try a different one.");
return;
}
User = user;
userRequestClose = false;
shuttingdown = false;
this.Close();
}
private void btnshutdown_Click(object sender, EventArgs e)
{
userRequestClose = false;
shuttingdown = true;
this.Close();
SaveSystem.CurrentUser = SaveSystem.CurrentSave.Users.FirstOrDefault(x => x.Username == "root");
TerminalBackend.InvokeCommand("sos.shutdown");
}
}
public class GUILoginFrontend : ILoginFrontend
{
public bool UseGUILogin
{
get
{
return Shiftorium.UpgradeInstalled("gui_based_login_screen");
}
}
public event Action<ClientSave> LoginComplete;
public void Login()
{
var lform = new GUILogin();
lform.LoginComplete += (user) =>
{
LoginComplete?.Invoke(user);
};
lform.Show();
}
}
}
|