aboutsummaryrefslogtreecommitdiff
path: root/ShiftOS_TheReturn/UserManagementCommands.cs
blob: 1c3c0edb8beaae9eb75051b694ba2ce9876e4f5c (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
137
138
139
140
141
142
143
144
145
146
147
148
149
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ShiftOS.Objects;

namespace ShiftOS.Engine
{
    [Namespace("admin")]
    [KernelMode]
    [RequiresUpgrade("mud_fundamentals")]
    public static class AdminUserManagementCommands
    {
        [Command("add", description = "Add a user to the system.", usage ="name:")]
        [RequiresArgument("name")]
        public static bool AddUser(Dictionary<string, object> args)
        {
            string name = args["name"].ToString();
            if(SaveSystem.CurrentSave.Users.FirstOrDefault(x=>x.Username==name) != null)
            {
                Console.WriteLine("Error: User already exists.");
                return true;
            }

            var user = new ClientSave
            {
                Username = name,
                Password = "",
                Permissions = UserPermissions.User
            };
            SaveSystem.CurrentSave.Users.Add(user);
            Console.WriteLine($"Creating new user \"{name}\" with no password and User permissions.");
            SaveSystem.SaveGame();
            return true;
        }

        [Command("remove", description = "Remove a user from the system.", usage = "name:")]
        [RequiresArgument("name")]
        public static bool RemoveUser(Dictionary<string, object> args)
        {
            string name = args["name"].ToString();
            if (SaveSystem.CurrentSave.Users.FirstOrDefault(x => x.Username == name) == null)
            {
                Console.WriteLine("Error: User doesn't exist.");
                return true;
            }

            var user = SaveSystem.CurrentSave.Users.FirstOrDefault(x => x.Username == name);
            SaveSystem.CurrentSave.Users.Remove(user);
            Console.WriteLine($"Removing user \"{name}\" from system...");
            SaveSystem.SaveGame();
            return true;
        }

        [Command("set_acl")]
        [RequiresArgument("user")]
        [RequiresArgument("val")]
        public static bool SetUserPermission(Dictionary<string, object> args)
        {
            int permission = 0;
            string username = args["user"].ToString();
            try 
            {
                permission = Convert.ToInt32(args["val"].ToString());
            }
            catch
            {
                Console.WriteLine("Error: Permission value must be an integer.");
                return true;
            }

            if(SaveSystem.CurrentSave.Users.FirstOrDefault(x=>x.Username==username) == null)
            {
                Console.WriteLine("Error: User not found.");
                return true;
            }

            UserPermissions uperm = UserPermissions.Guest;

            switch (permission)
            {
                case 0:
                    uperm = UserPermissions.Guest;
                    break;
                case 1:
                    uperm = UserPermissions.User;
                    break;
                case 2:
                    uperm = UserPermissions.Admin;
                    break;
                case 3:
                    uperm = UserPermissions.Root;
                    break;
                default:
                    Console.WriteLine("Permission value must be between 0 and 4.");
                    return true;
            }

            //Permissions are backwards... oops...
            if(uperm < SaveSystem.CurrentUser.Permissions)
            {
                Console.WriteLine("Error: Cannot set user permissions to values greater than your own!");
                return true;
            }

            var oldperm = SaveSystem.Users.FirstOrDefault(x => x.Username == username).Permissions;
            if (SaveSystem.CurrentUser.Permissions > oldperm)
            {
                Console.WriteLine("Error: Can't set the permission of this user. They have more rights than you.");
                return true;
            }

            SaveSystem.CurrentSave.Users.FirstOrDefault(x => x.Username == username).Permissions = uperm;
            Console.WriteLine("User permissions updated.");
            return true;
        }

    }

    [Namespace("user")]
    [RequiresUpgrade("mud_fundamentals")]
    public static class UserManagementCommands
    {


        [Command("setpass", description ="Allows you to set your password to a new value.", usage ="old:,new:")]
        [RequiresArgument("old")]
        [RequiresArgument("new")]
        public static bool SetPassword(Dictionary<string, object> args)
        {
            string old = args["old"].ToString();
            string newpass = args["new"].ToString();

            if(old == SaveSystem.CurrentUser.Password)
            {
                SaveSystem.CurrentUser.Password = newpass;
                SaveSystem.CurrentSave.Users.FirstOrDefault(x => x.Username == SaveSystem.CurrentUser.Username).Password = newpass;
                Console.WriteLine("Password set successfully.");
                SaveSystem.SaveGame();
            }
            else
            {
                Console.WriteLine("Passwords do not match.");
            }
            return true;
        }
    }
}