|
|
- using System;
- using System.Collections.Generic;
- using System.DirectoryServices;
- using System.DirectoryServices.AccountManagement;
- using Ameliorated.ConsoleUtils;
- using System.Linq;
- using System.Security;
- using System.Text.RegularExpressions;
- using System.Threading;
- using System.Threading.Tasks;
-
- namespace amecs.Actions
- {
- public static class UserPass
- {
- public static bool ShowMenu()
- {
- var mainMenu = new Ameliorated.ConsoleUtils.Menu()
- {
- Choices =
- {
- new Menu.MenuItem("Change Username", new Func<bool>(ChangeUsername)),
- new Menu.MenuItem("Change Password", new Func<bool>(ChangePassword)),
- new Menu.MenuItem("Change Display Name", new Func<bool>(ChangeDisplayName)),
- new Menu.MenuItem("Change Administrator Password", new Func<bool>(ChangeAdminPassword)),
- Menu.MenuItem.Blank,
- new Menu.MenuItem("Return to Menu", new Func<bool>(() => true)),
- new Menu.MenuItem("Exit", new Func<bool>(Globals.Exit)),
- },
- SelectionForeground = ConsoleColor.Green
- };
- mainMenu.Write();
- var result = (Func<bool>)mainMenu.Load();
- return result.Invoke();
- }
-
- public static bool ChangeUsername()
- {
- try
- {
- while (true)
- {
- var username = new InputPrompt() { Text = "Enter new username, or press escape to quit: " }.Start();
- if (username == null)
- return true;
-
- if (String.IsNullOrEmpty(username) || !Regex.Match(username, @"^\w[\w\.\- ]{0,19}$").Success)
- {
- ConsoleTUI.OpenFrame.WriteLine("Username is invalid.");
- Console.WriteLine();
- continue;
- }
-
- if (Globals.Username.Equals(username))
- {
- ConsoleTUI.OpenFrame.WriteLine("Username matches the current username.");
- Console.WriteLine();
- continue;
- }
-
- try
- {
- ConsoleTUI.OpenFrame.WriteCentered("\r\nSetting new username");
- using (new ConsoleUtils.LoadingIndicator(true))
- {
- DirectoryEntry entry = (DirectoryEntry)Globals.User.GetUnderlyingObject();
-
- entry.Rename(username);
- entry.CommitChanges();
-
- PrincipalContext context = new PrincipalContext(ContextType.Machine);
-
- PrincipalSearcher userPrincipalSearcher = new PrincipalSearcher(new UserPrincipal(context));
- Globals.User = userPrincipalSearcher.FindAll().FirstOrDefault(x => (x is UserPrincipal) && x.Sid.Value == Globals.UserSID) as UserPrincipal;
- break;
- }
- } catch (System.Runtime.InteropServices.COMException e)
- {
- if (e.ErrorCode != -2147022694)
- throw e;
- ConsoleTUI.OpenFrame.WriteLine("Username is invalid.");
- Console.WriteLine();
- }
- }
- } catch (Exception e)
- {
- Console.WriteLine();
- ConsoleTUI.OpenFrame.Close("Error: " + e.Message.TrimEnd('\n').TrimEnd('\r'), ConsoleColor.Red, Console.BackgroundColor, new ChoicePrompt() {AnyKey = true, Text = "Press any key to return to the Menu: "});
- return false;
- }
- Console.WriteLine();
- if ((int?)ConsoleTUI.OpenFrame.Close("Username changed successfully", ConsoleColor.Green, Console.BackgroundColor, new ChoicePrompt()
- {
- TextForeground = ConsoleColor.Yellow,
- Text = "Logoff to apply changes? (Y/N): "
- }) == 0) amecs.RestartWindows(true);
- return true;
- }
-
- public static bool ChangePassword()
- {
- try
- {
- while (true)
- {
- var password = new InputPrompt() { MaskInput = true, Text = "Enter new password, or press escape to quit: " }.Start();
- if (password == null)
- return true;
-
- ConsoleTUI.OpenFrame.WriteCentered("\r\nSetting new password");
- try
- {
- using (new ConsoleUtils.LoadingIndicator(true))
- {
- if (String.IsNullOrEmpty(password))
- {
- Globals.User.SetPassword("");
- }
- else
- {
- Globals.User.SetPassword(password);
- }
-
- Thread.Sleep(800);
- break;
- }
- } catch (PasswordException e)
- {
- ConsoleTUI.OpenFrame.WriteLine("Could not set password: " + e.Message);
- Console.WriteLine();
- }
- }
- } catch (Exception e)
- {
- Console.WriteLine();
- ConsoleTUI.OpenFrame.Close("Error: " + e.Message.TrimEnd('\n').TrimEnd('\r'), ConsoleColor.Red, Console.BackgroundColor, new ChoicePrompt() {AnyKey = true, Text = "Press any key to return to the Menu: "});
- return false;
- }
- Console.WriteLine();
- ConsoleTUI.OpenFrame.Close("Password changed successfully", ConsoleColor.Green, Console.BackgroundColor, new ChoicePrompt() {AnyKey = true, Text = "Press any key to return to the Menu: "});
- return true;
- }
- public static bool ChangeAdminPassword()
- {
- try
- {
- PrincipalContext context = new PrincipalContext(ContextType.Machine);
-
- PrincipalSearcher userPrincipalSearcher = new PrincipalSearcher(new UserPrincipal(context));
- var administrator = userPrincipalSearcher.FindAll().FirstOrDefault(x => (x is UserPrincipal) && x.Name == "Administrator") as UserPrincipal;
-
- while (true)
- {
- var password = new InputPrompt() { MaskInput = true, Text = "Enter new Administrator password,\r\nor press escape to quit: " }.Start();
- if (password == null)
- return true;
-
- ConsoleTUI.OpenFrame.WriteCentered("\r\nSetting new password");
- try
- {
- using (new ConsoleUtils.LoadingIndicator(true))
- {
- if (String.IsNullOrEmpty(password))
- {
- administrator.SetPassword("");
- }
- else
- {
- administrator.SetPassword(password);
- }
-
- Thread.Sleep(1000);
- break;
- }
- } catch (PasswordException e)
- {
- ConsoleTUI.OpenFrame.WriteLine("Could not set password: " + e.Message);
- Console.WriteLine();
- }
- }
- } catch (Exception e)
- {
- Console.WriteLine();
- ConsoleTUI.OpenFrame.Close("Error: " + e.Message.TrimEnd('\n').TrimEnd('\r'), ConsoleColor.Red, Console.BackgroundColor, new ChoicePrompt() {AnyKey = true, Text = "Press any key to return to the Menu: "});
- return false;
- }
- Console.WriteLine();
- ConsoleTUI.OpenFrame.Close("Administrator password changed successfully", ConsoleColor.Green, Console.BackgroundColor, new ChoicePrompt() {AnyKey = true, Text = "Press any key to return to the Menu: "});
- return true;
- }
-
- public static bool ChangeDisplayName()
- {
- try
- {
- var name = new InputPrompt() { Text = "Enter new display name, or press escape to quit: " }.Start();
- if (name == null)
- return true;
-
- ConsoleTUI.OpenFrame.WriteCentered("\r\nSetting new display name");
-
- using (new ConsoleUtils.LoadingIndicator(true))
- {
- Globals.User.DisplayName = name;
- Globals.User.Save();
-
- Thread.Sleep(800);
- }
- } catch (Exception e)
- {
- Console.WriteLine();
- ConsoleTUI.OpenFrame.Close("Error: " + e.Message.TrimEnd('\n').TrimEnd('\r'), ConsoleColor.Red, Console.BackgroundColor, new ChoicePrompt() {AnyKey = true, Text = "Press any key to return to the Menu: "});
- return false;
- }
- Console.WriteLine();
- ConsoleTUI.OpenFrame.Close("Display name changed successfully", ConsoleColor.Green, Console.BackgroundColor, new ChoicePrompt() {AnyKey = true, Text = "Press any key to return to the Menu: "});
- return true;
- }
- }
- }
|