source: binary-improvements/MapRendering/Commands/WebTokens.cs@ 420

Last change on this file since 420 was 420, checked in by alloc, 20 months ago

A21 preparations.
NOT COMPATIBLE WITH A20 ANYMORE!

File size: 3.6 KB
RevLine 
[244]1using System.Collections.Generic;
2using System.Text.RegularExpressions;
3using AllocsFixes.NetConnections.Servers.Web;
4
[325]5namespace AllocsFixes.CustomCommands {
[244]6 public class WebTokens : ConsoleCmdAbstract {
[325]7 private static readonly Regex validNameTokenMatcher = new Regex (@"^\w+$");
[244]8
[420]9 protected override string[] getCommands () {
10 return new[] {"webtokens_legacy"};
[244]11 }
[325]12
[420]13 protected override string getDescription () {
[244]14 return "Manage web tokens";
15 }
16
[420]17 protected override string getHelp () {
[244]18 return "Set/get webtoken permission levels. A level of 0 is maximum permission.\n" +
[325]19 "Usage:\n" +
[420]20 " webtokens_legacy add <username> <usertoken> <level>\n" +
21 " webtokens_legacy remove <username>\n" +
22 " webtokens_legacy list";
[244]23 }
[325]24
[244]25 public override void Execute (List<string> _params, CommandSenderInfo _senderInfo) {
26 if (_params.Count >= 1) {
[326]27 if (_params [0].EqualsCaseInsensitive ("add")) {
28 ExecuteAdd (_params);
29 } else if (_params [0].EqualsCaseInsensitive ("remove")) {
30 ExecuteRemove (_params);
31 } else if (_params [0].EqualsCaseInsensitive ("list")) {
32 ExecuteList ();
33 } else {
34 SdtdConsole.Instance.Output ("Invalid sub command \"" + _params [0] + "\".");
[244]35 }
36 } else {
37 SdtdConsole.Instance.Output ("No sub command given.");
38 }
39 }
40
41 private void ExecuteAdd (List<string> _params) {
42 if (_params.Count != 4) {
43 SdtdConsole.Instance.Output ("Wrong number of arguments, expected 4, found " + _params.Count + ".");
44 return;
45 }
46
47 if (string.IsNullOrEmpty (_params [1])) {
48 SdtdConsole.Instance.Output ("Argument 'username' is empty.");
49 return;
50 }
51
52 if (!validNameTokenMatcher.IsMatch (_params [1])) {
[325]53 SdtdConsole.Instance.Output (
54 "Argument 'username' may only contain characters (A-Z, a-z), digits (0-9) and underscores (_).");
[244]55 return;
56 }
57
58 if (string.IsNullOrEmpty (_params [2])) {
59 SdtdConsole.Instance.Output ("Argument 'usertoken' is empty.");
60 return;
61 }
62
63 if (!validNameTokenMatcher.IsMatch (_params [2])) {
[325]64 SdtdConsole.Instance.Output (
65 "Argument 'usertoken' may only contain characters (A-Z, a-z), digits (0-9) and underscores (_).");
[244]66 return;
67 }
68
69 int level;
70 if (!int.TryParse (_params [3], out level)) {
71 SdtdConsole.Instance.Output ("Argument 'level' is not a valid integer.");
72 return;
73 }
74
75 WebPermissions.Instance.AddAdmin (_params [1], _params [2], level);
[325]76 SdtdConsole.Instance.Output (string.Format (
77 "Web user with name={0} and password={1} added with permission level of {2}.", _params [1], _params [2],
78 level));
[244]79 }
[325]80
[244]81 private void ExecuteRemove (List<string> _params) {
82 if (_params.Count != 2) {
83 SdtdConsole.Instance.Output ("Wrong number of arguments, expected 2, found " + _params.Count + ".");
84 return;
85 }
[325]86
[244]87 if (string.IsNullOrEmpty (_params [1])) {
88 SdtdConsole.Instance.Output ("Argument 'username' is empty.");
89 return;
90 }
91
92 if (!validNameTokenMatcher.IsMatch (_params [1])) {
[325]93 SdtdConsole.Instance.Output (
94 "Argument 'username' may only contain characters (A-Z, a-z), digits (0-9) and underscores (_).");
[244]95 return;
96 }
97
98 WebPermissions.Instance.RemoveAdmin (_params [1]);
99 SdtdConsole.Instance.Output (string.Format ("{0} removed from web user permissions list.", _params [1]));
100 }
[325]101
[244]102 private void ExecuteList () {
103 SdtdConsole.Instance.Output ("Defined webuser permissions:");
104 SdtdConsole.Instance.Output (" Level: Name / Token");
105 foreach (WebPermissions.AdminToken at in WebPermissions.Instance.GetAdmins ()) {
[325]106 SdtdConsole.Instance.Output (
107 string.Format (" {0,5}: {1} / {2}", at.permissionLevel, at.name, at.token));
[244]108 }
109 }
110 }
111}
Note: See TracBrowser for help on using the repository browser.