mirror of
https://github.com/EpinelPS/EpinelPS.git
synced 2025-12-14 16:04:36 +01:00
Initial commit
This commit is contained in:
113
nksrv/IntlServer/IntlMsgHandler.cs
Normal file
113
nksrv/IntlServer/IntlMsgHandler.cs
Normal file
@@ -0,0 +1,113 @@
|
||||
using EmbedIO;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using nksrv.Utils;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace nksrv.IntlServer
|
||||
{
|
||||
public abstract class IntlMsgHandler
|
||||
{
|
||||
protected IHttpContext ctx;
|
||||
protected string Content = "";
|
||||
protected User? User;
|
||||
protected string? Seq;
|
||||
protected AccessToken? UsedToken;
|
||||
public abstract bool RequiresAuth { get; }
|
||||
public async Task HandleAsync(IHttpContext ctx)
|
||||
{
|
||||
this.ctx = ctx;
|
||||
Content = await ctx.GetRequestBodyAsStringAsync();
|
||||
Seq = ctx.GetRequestQueryData().Get("seq");
|
||||
if (RequiresAuth)
|
||||
{
|
||||
var x = JsonConvert.DeserializeObject<AuthPkt>(Content);
|
||||
string tokToCheck = "";
|
||||
if(x != null && x.channel_info != null && !string.IsNullOrEmpty(x.channel_info.account_token))
|
||||
{
|
||||
tokToCheck = x.channel_info.account_token;
|
||||
}
|
||||
else
|
||||
{
|
||||
var x2 = JsonConvert.DeserializeObject<AuthPkt2>(Content);
|
||||
if (x2 != null)
|
||||
{
|
||||
tokToCheck = x2.token;
|
||||
}
|
||||
}
|
||||
|
||||
if (string.IsNullOrEmpty(tokToCheck))
|
||||
throw new Exception("missing auth token");
|
||||
if (x != null)
|
||||
{
|
||||
foreach (var tok in JsonDb.Instance.LauncherAccessTokens)
|
||||
{
|
||||
if (tok.Token == tokToCheck)
|
||||
{
|
||||
var user = JsonDb.Instance.Users.Find(x => x.ID == tok.UserID);
|
||||
if (user != null)
|
||||
{
|
||||
UsedToken = tok;
|
||||
User = user;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (User == null)
|
||||
{
|
||||
WriteJsonString("{\"msg\":\"expired verify_code!\",\"ret\":2022,\"seq\":\"" + Seq + "\"}\r\n");
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
WriteJsonString("{\"msg\":\"expired verify_code!\",\"ret\":2022,\"seq\":\"" + Seq + "\"}\r\n");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
await HandleAsync();
|
||||
}
|
||||
protected abstract Task HandleAsync();
|
||||
|
||||
protected void WriteJsonString(string data)
|
||||
{
|
||||
// check if we are sending valid json
|
||||
JObject.Parse(data);
|
||||
|
||||
var bt = Encoding.UTF8.GetBytes(data);
|
||||
ctx.Response.ContentEncoding = null;
|
||||
ctx.Response.ContentType = "application/json";
|
||||
ctx.Response.ContentLength64 = bt.Length;
|
||||
ctx.Response.OutputStream.Write(bt, 0, bt.Length);
|
||||
ctx.Response.OutputStream.Flush();
|
||||
}
|
||||
public class ChannelInfo
|
||||
{
|
||||
public string openid { get; set; }
|
||||
public string token { get; set; }
|
||||
public int account_type { get; set; }
|
||||
public string account { get; set; }
|
||||
public string phone_area_code { get; set; }
|
||||
public int account_plat_type { get; set; }
|
||||
public string lang_type { get; set; }
|
||||
public bool is_login { get; set; }
|
||||
public string account_uid { get; set; }
|
||||
public string account_token { get; set; }
|
||||
}
|
||||
public class AuthPkt
|
||||
{
|
||||
public ChannelInfo channel_info { get; set; }
|
||||
}
|
||||
public class AuthPkt2
|
||||
{
|
||||
public string token;
|
||||
public string openid;
|
||||
public string account_token;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user