XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEExtension.NetCore.ServerInteractive

[DLL] Server interaction extension, including user identity verification and querying in conjunction with AutoConfig

公开
关注 0 Fork 0 Star 0
返回提交历史

XFEstudio/XFEExtension.NetCore.ServerInteractive

修复部分问题

028373f
XFE工作室室长 <mail@xfegzs.com>
提交于

代码差异

14 个文件 +778 -43
Modified XFEExtension.NetCore.ServerInteractive.TServer/Program.cs +11 -10
@@ -8,14 +8,15 @@ using XFEExtension.NetCore.ServerInteractive.Utilities.Server;
8 8
9 9 var server = XFEServerBuilder.CreateBuilder()
10 10 .UseXFEServer()
11 .AddCoreServer(
12 XFEServerCoreBuilder.CreateBuilder()
13 .UseXFEStandardServerCore(() => UserProfile.UserTable,
14 () => UserProfile.EncryptedUserLoginModelTable,
15 UserProfile.EncryptedUserLoginModelTable.Add,
16 user => UserProfile.EncryptedUserLoginModelTable.Remove(user),
17 XFEDataTableManagerBuilder.CreateBuilder()
18 .AddTable<Person, DataProfile>("人物", (int)UserRole.业务员, (int)UserRole.经理, (int)UserRole.业务员, (int)UserRole.业务员)
19 .AddTable<Order, DataProfile>("订单", (int)UserRole.业务员, (int)UserRole.经理, (int)UserRole.业务员, (int)UserRole.业务员)
20 .AddTable<User, UserProfile>("用户", (int)UserRole.业务员, (int)UserRole.经理, (int)UserRole.业务员, (int)UserRole.业务员)).Build()).Build();
11 .AddCoreServer(XFEServerCoreBuilder.CreateBuilder()
12 .UseXFEStandardServerCore(static () => UserProfile.UserTable,
13 static () => UserProfile.EncryptedUserLoginModelTable,
14 UserProfile.EncryptedUserLoginModelTable.Add,
15 static user => UserProfile.EncryptedUserLoginModelTable.Remove(user),
16 XFEDataTableManagerBuilder.CreateBuilder()
17 .AddTable<Person, DataProfile>("人物", (int)UserRole.业务员, (int)UserRole.经理, (int)UserRole.业务员, (int)UserRole.业务员)
18 .AddTable<Order, DataProfile>("订单", (int)UserRole.业务员, (int)UserRole.经理, (int)UserRole.业务员, (int)UserRole.业务员)
19 .AddTable<User, UserProfile>("用户", (int)UserRole.业务员, (int)UserRole.经理, (int)UserRole.业务员, (int)UserRole.业务员))
20 .Build())
21 .Build();
21 22 await server.Start();
Modified XFEExtension.NetCore.ServerInteractive.Test/Program.cs +67 -2
@@ -1,8 +1,73 @@
1 internal class Program
1 using System.Text.Json;
2 using XFEExtension.NetCore.ServerInteractive.TServer.Models;
3 using XFEExtension.NetCore.ServerInteractive.Utilities;
4 using XFEExtension.NetCore.ServerInteractive.Utilities.Helpers;
5 using XFEExtension.NetCore.XFETransform.JsonConverter;
6
7 internal class Program
2 8 {
9 static readonly ServerInteractive serverInteractive = new("http://localhost:8080/api", DeviceHelper.GetUniqueHardwareId(), string.Empty);
10 //static readonly TableRequester tableRequester = new()
11 //{
12 // RequestAddress = "http://localhost:8080/api",
13 // ComputerInfo = DeviceHelper.GetUniqueHardwareId()!,
14 // Session = string.Empty
15 //};
16
17 [SMTest("Admin", "123456")]
18 public static async Task Login(string account, string password)
19 {
20 var session = await serverInteractive.Login(account, password);
21 Console.WriteLine(session);
22 QueryableJsonNode jsonNode = session;
23 serverInteractive.TableRequester.Session = jsonNode["session"];
24 }
25
26 //[SMTest]
27 public static string ConvertOrder()
28 {
29 var order = new Order()
30 {
31 Description = "测试订单的描述",
32 Name = "测试订单"
33 };
34 return JsonSerializer.Serialize(order);
35 }
36
37 //[SMTest]
38 public static async Task<bool> AddOrder() => await serverInteractive.TableRequester.Add<Order>(new()
39 {
40 Description = "测试订单的描述",
41 Name = "测试订单"
42 });
43
3 44 [SMTest]
4 public static void TestMethod()
45 public static async Task GetOrder()
5 46 {
47 var result = await serverInteractive.TableRequester.Get<Order>();
48 foreach (var order in result.DataList)
49 {
50 Console.WriteLine($"ID:{order.ID}\tName:{order.Name}\tDS:{order.Description}");
51 }
52 }
6 53
54 [SMTest]
55 public static async Task ChangeOrder()
56 {
57 var result = await serverInteractive.TableRequester.Get<Order>();
58 var order = result.DataList[0];
59 Console.WriteLine($"ID:{order.ID}\tName:{order.Name}\tDS:{order.Description}");
60 order.Description = "这是一条修改后的测试订单";
61 order.Name = "Test001";
62 await serverInteractive.TableRequester.Change(order);
63 }
64 [SMTest]
65 public static async Task GetOrder2()
66 {
67 var result = await serverInteractive.TableRequester.Get<Order>();
68 foreach (var order in result.DataList)
69 {
70 Console.WriteLine($"ID:{order.ID}\tName:{order.Name}\tDS:{order.Description}");
71 }
7 72 }
8 73 }
Modified XFEExtension.NetCore.ServerInteractive.Test/XFEExtension.NetCore.ServerInteractive.Test.csproj +1 -0
@@ -12,6 +12,7 @@
12 12 </ItemGroup>
13 13
14 14 <ItemGroup>
15 <ProjectReference Include="..\XFEExtension.NetCore.ServerInteractive.TServer\XFEExtension.NetCore.ServerInteractive.TServer.csproj" />
15 16 <ProjectReference Include="..\XFEExtension.NetCore.ServerInteractive\XFEExtension.NetCore.ServerInteractive.csproj" />
16 17 </ItemGroup>
17 18
Modified XFEExtension.NetCore.ServerInteractive/Utilities/DataTable/IXFEDataTable.cs +4 -1
@@ -1,6 +1,5 @@
1 1 using System.Net;
2 2 using System.Text.Json;
3 using XFEExtension.NetCore.CyberComm;
4 3 using XFEExtension.NetCore.ServerInteractive.Interfaces;
5 4 using XFEExtension.NetCore.ServerInteractive.Models;
6 5 using XFEExtension.NetCore.ServerInteractive.Models.UserModels;
@@ -42,6 +41,10 @@ public interface IXFEDataTable
42 41 /// </summary>
43 42 JsonSerializerOptions? JsonSerializerOptions { get; set; }
44 43 /// <summary>
44 /// 用户Json序列化选项
45 /// </summary>
46 JsonSerializerOptions? UserJsonSerializerOptions { get; set; }
47 /// <summary>
45 48 /// 表名称,用其中元素的名称命名即可(如:Order(订单))
46 49 /// </summary>
47 50 string TableName { get; set; }
Modified XFEExtension.NetCore.ServerInteractive/Utilities/DataTable/XFEDataTable.cs +10 -8
@@ -53,6 +53,8 @@ public class XFEDataTable<T> : IXFEDataTable where T : IIDModel
53 53 public int AddPermissionLevel { get; set; } = 0;
54 54 /// <inheritdoc/>
55 55 public JsonSerializerOptions? JsonSerializerOptions { get; set; }
56 /// <inheritdoc/>
57 public JsonSerializerOptions? UserJsonSerializerOptions { get; set; }
56 58
57 59 /// <summary>
58 60 /// 创建列表并手动设置Get Set方法等
@@ -132,8 +134,8 @@ public class XFEDataTable<T> : IXFEDataTable where T : IIDModel
132 134 switch (execute)
133 135 {
134 136 case "get":
135 Console.Write($"【{r.Args.ClientIP}】获取{TableShowName}列表请求");
136 UserHelper.ValidatePermission(requestJsonNode["session"], requestJsonNode["computerInfo"], r.Args.ClientIP, GetPermissionLevel, JsonSerializerOptions, GetEncryptedUserLoginModelFunction(), GetUsersFunction(), r);
137 Console.Write($"【{r.Args.ClientIP}】获取{TableShowName}列表请求");
138 UserHelper.ValidatePermission(requestJsonNode["session"], requestJsonNode["computerInfo"], r.Args.ClientIP, GetPermissionLevel, UserJsonSerializerOptions, GetEncryptedUserLoginModelFunction(), GetUsersFunction(), r);
137 139 List<T> tableList = [.. GetTableFunction()];
138 140 int pageCount = requestJsonNode["pageCount"].GetValue<int>();
139 141 if (pageCount == -1)
@@ -142,7 +144,7 @@ public class XFEDataTable<T> : IXFEDataTable where T : IIDModel
142 144 {
143 145 totalCount = tableList.Count,
144 146 lastPage = -1,
145 data = tableList
147 dataList = tableList
146 148 }, JsonSerializerOptions), HttpStatusCode.OK);
147 149 }
148 150 else
@@ -151,8 +153,8 @@ public class XFEDataTable<T> : IXFEDataTable where T : IIDModel
151 153 await r.Args.ReplyAndClose(JsonSerializer.Serialize(new
152 154 {
153 155 totalCount = tableList.Count,
154 lastPage = tableList.Count / pageCount,
155 data = tableList[(page * pageCount)..((page + 1) * pageCount)]
156 lastPage = (int)Math.Ceiling((double)tableList.Count / pageCount),
157 dataList = tableList[(page * pageCount)..((page + 1) * pageCount)]
156 158 }, JsonSerializerOptions));
157 159 }
158 160 break;
@@ -165,7 +167,7 @@ public class XFEDataTable<T> : IXFEDataTable where T : IIDModel
165 167 throw new StopAction(() => { }, $"\n无法使用Json转换目标{TableShowName}信息");
166 168 }
167 169 Console.Write($":{item.ID}");
168 UserHelper.ValidatePermission(requestJsonNode["session"], requestJsonNode["computerInfo"], r.Args.ClientIP, AddPermissionLevel, JsonSerializerOptions, GetEncryptedUserLoginModelFunction(), GetUsersFunction(), r);
170 UserHelper.ValidatePermission(requestJsonNode["session"], requestJsonNode["computerInfo"], r.Args.ClientIP, AddPermissionLevel, UserJsonSerializerOptions, GetEncryptedUserLoginModelFunction(), GetUsersFunction(), r);
169 171 if (item.ID.IsNullOrWhiteSpace())
170 172 {
171 173 statusCode = HttpStatusCode.BadRequest;
@@ -180,7 +182,7 @@ public class XFEDataTable<T> : IXFEDataTable where T : IIDModel
180 182 Console.Write($"【{r.Args.ClientIP}】删除{TableShowName}请求");
181 183 var id = requestJsonNode["id"].ToString();
182 184 Console.Write($":{id}");
183 UserHelper.ValidatePermission(requestJsonNode["session"], requestJsonNode["computerInfo"], r.Args.ClientIP, RemovePermissionLevel, JsonSerializerOptions, GetEncryptedUserLoginModelFunction(), GetUsersFunction(), r);
185 UserHelper.ValidatePermission(requestJsonNode["session"], requestJsonNode["computerInfo"], r.Args.ClientIP, RemovePermissionLevel, UserJsonSerializerOptions, GetEncryptedUserLoginModelFunction(), GetUsersFunction(), r);
184 186 if (id.IsNullOrWhiteSpace())
185 187 {
186 188 statusCode = HttpStatusCode.BadRequest;
@@ -208,7 +210,7 @@ public class XFEDataTable<T> : IXFEDataTable where T : IIDModel
208 210 statusCode = HttpStatusCode.BadRequest;
209 211 throw new StopAction(() => { }, $"\n{TableShowName}ID不能为空");
210 212 }
211 UserHelper.ValidatePermission(requestJsonNode["session"], requestJsonNode["computerInfo"], r.Args.ClientIP, ChangePermissionLevel, JsonSerializerOptions, GetEncryptedUserLoginModelFunction(), GetUsersFunction(), r);
213 UserHelper.ValidatePermission(requestJsonNode["session"], requestJsonNode["computerInfo"], r.Args.ClientIP, ChangePermissionLevel, UserJsonSerializerOptions, GetEncryptedUserLoginModelFunction(), GetUsersFunction(), r);
212 214 Change(item);
213 215 r.Args.Close();
214 216 break;
Modified XFEExtension.NetCore.ServerInteractive/Utilities/DataTable/XFEDataTableManagerBuilder.cs +9 -1
@@ -4,6 +4,7 @@ using XFEExtension.NetCore.AutoImplement;
4 4 using XFEExtension.NetCore.ServerInteractive.Interfaces;
5 5 using XFEExtension.NetCore.ServerInteractive.Models;
6 6 using XFEExtension.NetCore.ServerInteractive.Models.UserModels;
7 using XFEExtension.NetCore.ServerInteractive.Utilities.JsonConverter;
7 8
8 9 namespace XFEExtension.NetCore.ServerInteractive.Utilities.DataTable;
9 10
@@ -14,6 +15,7 @@ namespace XFEExtension.NetCore.ServerInteractive.Utilities.DataTable;
14 15 public abstract class XFEDataTableManagerBuilder
15 16 {
16 17 readonly List<IXFEDataTable> dataTableList = [];
18 JsonSerializerOptions userJsonSerializerOptions = new();
17 19 /// <summary>
18 20 /// 执行语句列表
19 21 /// </summary>
@@ -23,7 +25,12 @@ public abstract class XFEDataTableManagerBuilder
23 25 /// 创建构造器
24 26 /// </summary>
25 27 /// <returns></returns>
26 public static XFEDataTableManagerBuilder CreateBuilder() => new XFEDataTableManagerBuilderImpl();
28 public static XFEDataTableManagerBuilder CreateBuilder()
29 {
30 var builder = new XFEDataTableManagerBuilderImpl();
31 builder.userJsonSerializerOptions.Converters.Add(new JsonDateTimeConverter());
32 return builder;
33 }
27 34
28 35 /// <summary>
29 36 /// 添加数据表
@@ -58,6 +65,7 @@ public abstract class XFEDataTableManagerBuilder
58 65 RemovePermissionLevel = removePermissionLevel,
59 66 ChangePermissionLevel = changePermissionLevel,
60 67 GetPermissionLevel = getPermissionLevel,
68 UserJsonSerializerOptions = userJsonSerializerOptions,
61 69 JsonSerializerOptions = jsonSerializerOptions
62 70 };
63 71 dataTableList.Add(dataTable);
Modified XFEExtension.NetCore.ServerInteractive/Utilities/Server/XFEServerCore.cs +8 -2
@@ -62,6 +62,7 @@ public abstract class XFEServerCore : CoreServerServiceBase
62 62
63 63 private async void CyberCommServer_RequestReceived(object? sender, CyberCommRequestEventArgs e)
64 64 {
65 Console.WriteLine($"[DEBUG]接收到请求【{e.ClientIP}】");
65 66 var r = new ServerCoreReturnArgs
66 67 {
67 68 Args = e
@@ -69,10 +70,10 @@ public abstract class XFEServerCore : CoreServerServiceBase
69 70 try
70 71 {
71 72 foreach (var serverCoreVerifyService in ServerCoreVerifyServiceList)
72 if (serverCoreVerifyService.VerifyRequest(sender, e, r))
73 if (!serverCoreVerifyService.VerifyRequest(sender, e, r))
73 74 return;
74 75 foreach (var serverCoreVerifyAsyncService in ServerCoreVerifyAsyncServiceList)
75 if (await serverCoreVerifyAsyncService.VerifyRequestAsync(sender, e, r))
76 if (!await serverCoreVerifyAsyncService.VerifyRequestAsync(sender, e, r))
76 77 return;
77 78 }
78 79 catch (Exception ex)
@@ -109,6 +110,7 @@ public abstract class XFEServerCore : CoreServerServiceBase
109 110 throw new ProcessStandardRequestException("QueryableJsonNode为空");
110 111 if (!execute.IsNullOrEmpty())
111 112 {
113 Console.WriteLine($"【{e.ClientIP}】请求方法:{execute}");
112 114 if (StandardCoreServiceDictionary.TryGetValue(execute, out var service))
113 115 {
114 116 try
@@ -125,6 +127,7 @@ public abstract class XFEServerCore : CoreServerServiceBase
125 127 ServerException = new XFEServerCoreRequestInnerException($"请求异常:{execute}", ex)
126 128 });
127 129 }
130 Console.WriteLine($"【{e.ClientIP}】请求处理完成:{execute}");
128 131 return;
129 132 }
130 133 else if (StandardCoreAsyncServiceDictionary.TryGetValue(execute, out var serviceAsync))
@@ -143,6 +146,7 @@ public abstract class XFEServerCore : CoreServerServiceBase
143 146 ServerException = new XFEServerCoreRequestInnerException($"请求异常:{execute}", ex)
144 147 });
145 148 }
149 Console.WriteLine($"【{e.ClientIP}】请求处理完成:{execute}");
146 150 return;
147 151 }
148 152 foreach (var key in StandardMultiCoreServiceDictionary.Keys)
@@ -163,6 +167,7 @@ public abstract class XFEServerCore : CoreServerServiceBase
163 167 ServerException = new XFEServerCoreRequestInnerException($"请求异常:{execute}", ex)
164 168 });
165 169 }
170 Console.WriteLine($"【{e.ClientIP}】请求处理完成:{execute}");
166 171 return;
167 172 }
168 173 }
@@ -184,6 +189,7 @@ public abstract class XFEServerCore : CoreServerServiceBase
184 189 ServerException = new XFEServerCoreRequestInnerException($"请求异常:{execute}", ex)
185 190 });
186 191 }
192 Console.WriteLine($"【{e.ClientIP}】请求处理完成:{execute}");
187 193 return;
188 194 }
189 195 }
Modified XFEExtension.NetCore.ServerInteractive/Utilities/Server/XFEServerCoreBuilder.cs +6 -16
@@ -188,14 +188,7 @@ public abstract class XFEServerCoreBuilder
188 188 /// <typeparam name="T">服务泛型</typeparam>
189 189 /// <param name="executeList">执行语句列表</param>
190 190 /// <returns>XFE服务器核心构建器</returns>
191 public XFEServerCoreBuilder RegisterStandardService<T>(List<string> executeList) where T : IServerCoreStandardRegisterService, new()
192 {
193 serverMultiStandardCoreServiceDictionary.Add(executeList, new T()
194 {
195 XFEServerCore = xFEServerCore
196 });
197 return this;
198 }
191 public XFEServerCoreBuilder RegisterStandardService<T>(List<string> executeList) where T : IServerCoreStandardRegisterService, new() => RegisterStandardService(executeList, new T());
199 192
200 193 /// <summary>
201 194 /// 注册多个执行语句的标准服务
@@ -216,14 +209,7 @@ public abstract class XFEServerCoreBuilder
216 209 /// <typeparam name="T">服务泛型</typeparam>
217 210 /// <param name="executeList">执行语句列表</param>
218 211 /// <returns>XFE服务器核心构建器</returns>
219 public XFEServerCoreBuilder RegisterStandardAsyncService<T>(List<string> executeList) where T : IServerCoreStandardRegisterAsyncService, new()
220 {
221 serverMultiStandardCoreAsyncServiceDictionary.Add(executeList, new T()
222 {
223 XFEServerCore = xFEServerCore
224 });
225 return this;
226 }
212 public XFEServerCoreBuilder RegisterStandardAsyncService<T>(List<string> executeList) where T : IServerCoreStandardRegisterAsyncService, new() => RegisterStandardAsyncService(executeList, new T());
227 213
228 214 /// <summary>
229 215 /// 构建XFE服务器核心
@@ -236,8 +222,12 @@ public abstract class XFEServerCoreBuilder
236 222 xFEServerCore.ServerCoreServiceList.Add(serverCoreService);
237 223 xFEServerCore.CyberCommServer.ServerStarted += serverCoreService.ServerStarted;
238 224 }
225 xFEServerCore.ServerCoreVerifyServiceList = serverCoreVerifyServiceList;
226 xFEServerCore.ServerCoreVerifyAsyncServiceList = serverCoreVerifyAsyncServiceList;
239 227 xFEServerCore.StandardCoreServiceDictionary = serverStandardCoreServiceDictionary;
228 xFEServerCore.StandardCoreAsyncServiceDictionary = serverStandardCoreAsyncServiceDictionary;
240 229 xFEServerCore.StandardMultiCoreServiceDictionary = serverMultiStandardCoreServiceDictionary;
230 xFEServerCore.StandardMultiCoreAsyncServiceDictionary = serverMultiStandardCoreAsyncServiceDictionary;
241 231 if (!name.IsNullOrEmpty())
242 232 xFEServerCore.CoreServerName = name;
243 233 return xFEServerCore;
Added XFEExtension.NetCore.ServerInteractive/Utilities/ServerInteractive.cs +407 -0
@@ -0,0 +1,407 @@
1 using System.Net;
2 using System.Text.Json;
3 using XFEExtension.NetCore.DelegateExtension;
4 using XFEExtension.NetCore.ServerInteractive.Models;
5 using XFEExtension.NetCore.ServerInteractive.Utilities.Helpers;
6 using XFEExtension.NetCore.ServerInteractive.Utilities.JsonConverter;
7 using XFEExtension.NetCore.StringExtension.Json;
8
9 namespace XFEExtension.NetCore.ServerInteractive.Utilities;
10
11 public class ServerInteractive
12 {
13 JsonSerializerOptions jsonSerializerOptions = new();
14 /// <summary>
15 /// 请求消息返回事件
16 /// </summary>
17 public event XFEEventHandler<object?, ServerInteractiveEventArgs>? MessageReceived;
18 /// <summary>
19 /// 表格请求器
20 /// </summary>
21 public TableRequester TableRequester { get; set; }
22
23 public ServerInteractive(string requsetAddress, string computerInfo, string session)
24 {
25 jsonSerializerOptions.Converters.Add(new JsonDateTimeConverter());
26 TableRequester = new()
27 {
28 RequestAddress = requsetAddress,
29 ComputerInfo = computerInfo,
30 Session = session,
31 JsonSerializerOptions = jsonSerializerOptions
32 };
33 TableRequester.MessageReceived += TableRequester_MessageReceived;
34 }
35
36 private void TableRequester_MessageReceived(object? sender, ServerInteractiveEventArgs e) => MessageReceived?.Invoke(sender, e);
37
38 /// <summary>
39 /// 登录
40 /// </summary>
41 /// <param name="account"></param>
42 /// <param name="password"></param>
43 /// <returns></returns>
44 public async Task<string> Login(string account, string password)
45 {
46 try
47 {
48 var (response, code) = await InteractiveHelper.GetServerResponse(TableRequester.RequestAddress, new
49 {
50 execute = "login",
51 account,
52 password,
53 computerInfo = TableRequester.ComputerInfo
54 }.ToJson());
55 if (code == HttpStatusCode.OK)
56 {
57 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl("Success", code));
58 return response;
59 }
60 else
61 {
62 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(response, code));
63 return string.Empty;
64 }
65 }
66 catch (Exception ex)
67 {
68 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(ex.Message, HttpStatusCode.InternalServerError));
69 return string.Empty;
70 }
71 }
72
73 /// <summary>
74 /// 登录校验
75 /// </summary>
76 /// <returns></returns>
77 public async Task<string> ReLogin()
78 {
79 try
80 {
81 var (response, code) = await InteractiveHelper.GetServerResponse(TableRequester.RequestAddress, new
82 {
83 execute = "relogin",
84 session = TableRequester.Session,
85 computerInfo = TableRequester.ComputerInfo
86 }.ToJson());
87 if (code == HttpStatusCode.OK)
88 {
89 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl("Success", code));
90 return response;
91 }
92 else
93 {
94 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(response, code));
95 return string.Empty;
96 }
97 }
98 catch (Exception ex)
99 {
100 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(ex.Message, HttpStatusCode.InternalServerError));
101 return string.Empty;
102 }
103 }
104
105 /// <summary>
106 /// 获取禁止的IP地址列表
107 /// </summary>
108 /// <returns></returns>
109 public async Task<List<IPAddressInfo>> GetBannedIpAddressList()
110 {
111 try
112 {
113 var (response, code) = await InteractiveHelper.GetServerResponse(TableRequester.RequestAddress, new
114 {
115 execute = "get_bannedIpList",
116 session = TableRequester.Session,
117 computerInfo = TableRequester.ComputerInfo
118 }.ToJson());
119 if (code == HttpStatusCode.OK)
120 {
121 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl("Success", code));
122 return JsonSerializer.Deserialize<List<IPAddressInfo>>(response) ?? [];
123 }
124 else
125 {
126 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(response, code));
127 return [];
128 }
129 }
130 catch (Exception ex)
131 {
132 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(ex.Message, HttpStatusCode.InternalServerError));
133 return [];
134 }
135 }
136
137 /// <summary>
138 /// 获取服务器日志
139 /// </summary>
140 /// <param name="startDateTime"></param>
141 /// <param name="endDateTime"></param>
142 /// <returns></returns>
143 public async Task<string> GetServerLog(DateTime startDateTime, DateTime endDateTime)
144 {
145 try
146 {
147 var (response, code) = await InteractiveHelper.GetServerResponse(TableRequester.RequestAddress, new
148 {
149 execute = "get_log",
150 startDateTime,
151 endDateTime,
152 session = TableRequester.Session,
153 computerInfo = TableRequester.ComputerInfo
154 }.ToJson());
155 if (code == HttpStatusCode.OK)
156 {
157 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl("Success", code));
158 return response;
159 }
160 else
161 {
162 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(response, code));
163 return string.Empty;
164 }
165 }
166 catch (Exception ex)
167 {
168 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(ex.Message, HttpStatusCode.InternalServerError));
169 return string.Empty;
170 }
171 }
172
173 /// <summary>
174 /// 清空服务器日志
175 /// </summary>
176 /// <returns></returns>
177 public async Task<string> ClearServerLog()
178 {
179 try
180 {
181 var (response, code) = await InteractiveHelper.GetServerResponse(TableRequester.RequestAddress, new
182 {
183 execute = "clear_log",
184 session = TableRequester.Session,
185 computerInfo = TableRequester.ComputerInfo
186 }.ToJson());
187 if (code == HttpStatusCode.OK)
188 {
189 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl("Success", code));
190 return response;
191 }
192 else
193 {
194 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(response, code));
195 return string.Empty;
196 }
197 }
198 catch (Exception ex)
199 {
200 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(ex.Message, HttpStatusCode.InternalServerError));
201 return string.Empty;
202 }
203 }
204
205 /// <summary>
206 /// 获取配置文件
207 /// </summary>
208 /// <param name="profileName"></param>
209 /// <returns></returns>
210 public async Task<string> GetProfile(string profileName)
211 {
212 try
213 {
214 var (response, code) = await InteractiveHelper.GetServerResponse(TableRequester.RequestAddress, new
215 {
216 execute = "get_profile",
217 profileName,
218 session = TableRequester.Session,
219 computerInfo = TableRequester.ComputerInfo
220 }.ToJson());
221 if (code == HttpStatusCode.OK)
222 {
223 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl("Success", code));
224 return response;
225 }
226 else
227 {
228 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(response, code));
229 return string.Empty;
230 }
231 }
232 catch (Exception ex)
233 {
234 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(ex.Message, HttpStatusCode.InternalServerError));
235 return string.Empty;
236 }
237 }
238
239 /// <summary>
240 /// 更改配置文件
241 /// </summary>
242 /// <param name="profileName"></param>
243 /// <param name="profile"></param>
244 /// <returns></returns>
245 public async Task ChangeProfile(string profileName, string profile)
246 {
247 try
248 {
249 var (response, code) = await InteractiveHelper.GetServerResponse(TableRequester.RequestAddress, new
250 {
251 execute = "change_profile",
252 profileName,
253 profile,
254 session = TableRequester.Session,
255 computerInfo = TableRequester.ComputerInfo
256 }.ToJson());
257 if (code == HttpStatusCode.OK)
258 {
259 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl("Success", code));
260 }
261 else
262 {
263 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(response, code));
264 }
265 }
266 catch (Exception ex)
267 {
268 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(ex.Message, HttpStatusCode.InternalServerError));
269 }
270 }
271
272 /// <summary>
273 /// 添加禁止的IP地址
274 /// </summary>
275 /// <param name="bannedIp"></param>
276 /// <param name="notes"></param>
277 /// <returns></returns>
278 public async Task AddBannedIpAddress(string bannedIp, string notes = "")
279 {
280 try
281 {
282 var (response, code) = await InteractiveHelper.GetServerResponse(TableRequester.RequestAddress, new
283 {
284 execute = "add_bannedIp",
285 bannedIp,
286 notes,
287 session = TableRequester.Session,
288 computerInfo = TableRequester.ComputerInfo
289 }.ToJson());
290 if (code == HttpStatusCode.OK)
291 {
292 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl("Success", code));
293 }
294 else
295 {
296 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(response, code));
297 }
298 }
299 catch (Exception ex)
300 {
301 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(ex.Message, HttpStatusCode.InternalServerError));
302 }
303 }
304
305 /// <summary>
306 /// 移除禁止的IP地址
307 /// </summary>
308 /// <param name="bannedIp"></param>
309 /// <returns></returns>
310 public async Task RemoveBannedIpAddress(string bannedIp)
311 {
312 try
313 {
314 var (response, code) = await InteractiveHelper.GetServerResponse(TableRequester.RequestAddress, new
315 {
316 execute = "remove_bannedIp",
317 bannedIp,
318 session = TableRequester.Session,
319 computerInfo = TableRequester.ComputerInfo
320 }.ToJson());
321 if (code == HttpStatusCode.OK)
322 {
323 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl("Success", code));
324 }
325 else
326 {
327 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(response, code));
328 }
329 }
330 catch (Exception ex)
331 {
332 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(ex.Message, HttpStatusCode.InternalServerError));
333 }
334 }
335
336 /// <summary>
337 /// 管理员更改账户请求
338 /// </summary>
339 /// <param name="id"></param>
340 /// <param name="changedAccount"></param>
341 /// <returns></returns>
342 public async Task<bool> AdminChangeAccount(string id, string changedAccount)
343 {
344 try
345 {
346 var (response, code) = await InteractiveHelper.GetServerResponse(TableRequester.RequestAddress, new
347 {
348 execute = "change_account",
349 changedAccount,
350 id,
351 session = TableRequester.Session,
352 computerInfo = TableRequester.ComputerInfo
353 }.ToJson());
354 if (code == HttpStatusCode.OK)
355 {
356 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl("Success", code));
357 return true;
358 }
359 else
360 {
361 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(response, code));
362 return false;
363 }
364 }
365 catch (Exception ex)
366 {
367 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(ex.Message, HttpStatusCode.InternalServerError));
368 return false;
369 }
370 }
371
372 /// <summary>
373 /// 管理员更改密码请求
374 /// </summary>
375 /// <param name="id"></param>
376 /// <param name="changedPassword"></param>
377 /// <returns></returns>
378 public async Task<bool> AdminChangePassword(string id, string changedPassword)
379 {
380 try
381 {
382 var (response, code) = await InteractiveHelper.GetServerResponse(TableRequester.RequestAddress, new
383 {
384 execute = "change_password",
385 id,
386 changedPassword,
387 session = TableRequester.Session,
388 computerInfo = TableRequester.ComputerInfo
389 }.ToJson());
390 if (code == HttpStatusCode.OK)
391 {
392 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl("Success", code));
393 return true;
394 }
395 else
396 {
397 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(response, code));
398 return false;
399 }
400 }
401 catch (Exception ex)
402 {
403 MessageReceived?.Invoke(this, new ServerInteractiveEventArgsImpl(ex.Message, HttpStatusCode.InternalServerError));
404 return false;
405 }
406 }
407 }
Modified XFEExtension.NetCore.ServerInteractive/Utilities/Services/CoreService/CoreServerExceptionProcessService.cs +2 -1
@@ -23,7 +23,8 @@ public class CoreServerExceptionProcessService : ServerCoreRegisterServiceBase
23 23 if (!e.Handled && e.CyberCommRequestEventArgs is not null)
24 24 {
25 25 Console.WriteLine($"[WARN]【{e.CyberCommRequestEventArgs.ClientIP}】{e.ServerException?.Message}");
26 Console.WriteLine($"[TRACE]{e.ServerException?.StackTrace}");
26 if (e.ServerException?.StackTrace is not null)
27 Console.WriteLine($"[TRACE]{e.ServerException?.StackTrace}");
27 28 await e.CyberCommRequestEventArgs.ReplyAndClose(e.ServerException?.Message ?? "服务器内部异常", e.StatusCode);
28 29 }
29 30 }
Modified XFEExtension.NetCore.ServerInteractive/Utilities/Services/CoreService/XFEDataTableManagerService.cs +1 -1
@@ -13,7 +13,7 @@ public class XFEDataTableManagerService : ServerCoreStandardRegisterAsyncService
13 13 /// <summary>
14 14 /// 数据表格管理器
15 15 /// </summary>
16 public XFEDataTableManager TableManager { get; set; } = new XFEDataTableManagerImpl();
16 public XFEDataTableManager TableManager { get; set; }
17 17
18 18 /// <inheritdoc/>
19 19 public override async Task StandardRequestReceived(string execute, QueryableJsonNode queryableJsonNode, ServerCoreReturnArgs r) => await TableManager.Execute(execute, queryableJsonNode, r);
Added XFEExtension.NetCore.ServerInteractive/Utilities/TableRequestResult.cs +27 -0
@@ -0,0 +1,27 @@
1 using System.Text.Json.Serialization;
2 using XFEExtension.NetCore.ServerInteractive.Models;
3
4 namespace XFEExtension.NetCore.ServerInteractive.Utilities;
5
6 /// <summary>
7 /// 表格请求结果
8 /// </summary>
9 /// <typeparam name="T"></typeparam>
10 public class TableRequestResult<T> where T : IIDModel
11 {
12 /// <summary>
13 /// 数据列表
14 /// </summary>
15 [JsonPropertyName("dataList")]
16 public List<T> DataList { get; set; } = [];
17 /// <summary>
18 /// 最后一页
19 /// </summary>
20 [JsonPropertyName("lastPage")]
21 public int LastPage { get; set; }
22 /// <summary>
23 /// 总计数量
24 /// </summary>
25 [JsonPropertyName("totalCount")]
26 public int TotalCount { get; set; }
27 }
Added XFEExtension.NetCore.ServerInteractive/Utilities/TableRequester.cs +224 -0
Modified XFEExtension.NetCore.ServerInteractive/XFEExtension.NetCore.ServerInteractive.csproj +1 -1