db and real auth

This commit is contained in:
rfi 2023-10-16 16:50:49 +07:00
parent b9b4796d0e
commit 5af2ab34d0
6 changed files with 132 additions and 28 deletions

View File

@ -0,0 +1,69 @@
using MongoDB.Bson.Serialization.Attributes;
using MongoDB.Bson;
using MongoDB.Driver;
using AscNet.Common.MsgPack;
namespace AscNet.Common.Database
{
#pragma warning disable CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable.
public class Player
{
public static readonly IMongoCollection<Player> collection = Common.db.GetCollection<Player>("players");
public static Player FromId(long id)
{
return collection.AsQueryable().FirstOrDefault(x => x.PlayerData.Id == id) ?? Create(id);
}
public static Player? FromToken(string token)
{
return collection.AsQueryable().FirstOrDefault(x => x.Token == token);
}
private static Player Create(long id)
{
Player player = new()
{
Token = Guid.NewGuid().ToString(),
PlayerData = new()
{
Id = id,
Name = $"Commandant{id}",
Level = 1,
Sign = "",
DisplayCharId = 1021001,
Birthday = null,
HonorLevel = 1,
ServerId = "1",
CurrTeamId = 1,
CurrHeadPortraitId = 9000003,
AppearanceSettingInfo = new()
{
TitleType = 1,
CharacterType = 1,
FashionType = 1,
WeaponFashionType = 1,
DormitoryType = 1
},
CreateTime = DateTimeOffset.Now.ToUnixTimeSeconds(),
LastLoginTime = DateTimeOffset.Now.ToUnixTimeSeconds(),
Flags = 1
}
};
collection.InsertOne(player);
return player;
}
[BsonId]
public ObjectId Id { get; set; }
[BsonElement("token")]
[BsonRequired]
public string Token { get; set; }
[BsonElement("player_data")]
[BsonRequired]
public PlayerData PlayerData { get; set; }
}
}

View File

@ -229,7 +229,7 @@ namespace AscNet.Common.MsgPack
public long Level { get; set; } public long Level { get; set; }
public string Sign { get; set; } public string Sign { get; set; }
public long DisplayCharId { get; set; } public long DisplayCharId { get; set; }
public Birthday Birthday { get; set; } public Birthday? Birthday { get; set; }
public long HonorLevel { get; set; } public long HonorLevel { get; set; }
public string ServerId { get; set; } public string ServerId { get; set; }
public long Likes { get; set; } public long Likes { get; set; }
@ -242,11 +242,11 @@ namespace AscNet.Common.MsgPack
public long DailyReceiveGiftCount { get; set; } public long DailyReceiveGiftCount { get; set; }
public long DailyActivenessRewardStatus { get; set; } public long DailyActivenessRewardStatus { get; set; }
public long WeeklyActivenessRewardStatus { get; set; } public long WeeklyActivenessRewardStatus { get; set; }
public long[] Marks { get; set; } public List<long> Marks { get; set; } = new();
public long[] GuideData { get; set; } public List<long> GuideData { get; set; } = new();
public long[] Communications { get; set; } public List<long> Communications { get; set; } = new();
public long[] ShowCharacters { get; set; } public List<long> ShowCharacters { get; set; } = new();
public object[] ShieldFuncList { get; set; } public List<dynamic> ShieldFuncList { get; set; } = new();
public AppearanceSettingInfo AppearanceSettingInfo { get; set; } public AppearanceSettingInfo AppearanceSettingInfo { get; set; }
public long CreateTime { get; set; } public long CreateTime { get; set; }
public long LastLoginTime { get; set; } public long LastLoginTime { get; set; }

View File

@ -1,4 +1,5 @@
using AscNet.Common.MsgPack; using AscNet.Common.Database;
using AscNet.Common.MsgPack;
using MessagePack; using MessagePack;
using Newtonsoft.Json; using Newtonsoft.Json;
@ -25,10 +26,22 @@ namespace AscNet.GameServer.Handlers
[RequestPacketHandler("LoginRequest")] [RequestPacketHandler("LoginRequest")]
public static void LoginRequestHandler(Session session, Packet.Request packet) public static void LoginRequestHandler(Session session, Packet.Request packet)
{ {
LoginRequest request = MessagePackSerializer.Deserialize<LoginRequest>(packet.Content);
Player? player = Player.FromToken(request.Token);
if (player is null)
{
session.SendResponse(new LoginResponse
{
Code = 1007 // LoginInvalidLoginToken
}, packet.Id);
return;
}
session.SendResponse(new LoginResponse session.SendResponse(new LoginResponse
{ {
Code = 0, Code = 0,
ReconnectToken = "eeeeeeeeeeeeeeh", ReconnectToken = player.Token,
UtcOffset = 0, UtcOffset = 0,
UtcServerTime = DateTimeOffset.UtcNow.ToUnixTimeSeconds() UtcServerTime = DateTimeOffset.UtcNow.ToUnixTimeSeconds()
}, packet.Id); }, packet.Id);
@ -39,12 +52,21 @@ namespace AscNet.GameServer.Handlers
[RequestPacketHandler("ReconnectRequest")] [RequestPacketHandler("ReconnectRequest")]
public static void ReconnectRequestHandler(Session session, Packet.Request packet) public static void ReconnectRequestHandler(Session session, Packet.Request packet)
{ {
ReconnectRequest request = MessagePackSerializer.Deserialize<ReconnectRequest>(packet.Content);
Player? player = Player.FromToken(request.Token);
if (player?.PlayerData.Id != request.PlayerId)
{
session.SendResponse(new ReconnectResponse()
{
Code = 1029 // ReconnectInvalidToken
}, packet.Id);
return;
}
session.SendResponse(new ReconnectResponse() session.SendResponse(new ReconnectResponse()
{ {
Code = 0, ReconnectToken = request.Token
OfflineMessages = { },
ReconnectToken = "eeeeeeeeeeeeeeh",
RequestNo = 0
}, packet.Id); }, packet.Id);
} }

View File

@ -107,6 +107,34 @@ namespace AscNet.SDKServer.Controllers
account account
}); });
}); });
app.MapGet("/api/Login/Login", ([FromQuery] int loginType, [FromQuery] int userId, [FromQuery] string token, [FromQuery] string clientIp) =>
{
Account? account = Account.FromToken(token);
if (account is null)
{
return JsonConvert.SerializeObject(new
{
code = -1,
msg = "Invalid credentials!"
});
}
Player player = Player.FromId(account.Uid);
LoginGate gate = new()
{
Code = 0,
Ip = Common.Common.config.GameServer.Host,
Port = Common.Common.config.GameServer.Port,
Token = player.Token
};
string serializedObject = JsonConvert.SerializeObject(gate);
SDKServer.log.Info(serializedObject);
return serializedObject;
});
} }
} }
} }

View File

@ -131,21 +131,6 @@ namespace AscNet.SDKServer.Controllers
SDKServer.log.Info("1"); SDKServer.log.Info("1");
return "1"; return "1";
}); });
app.MapGet("/api/Login/Login", ([FromQuery] int loginType, [FromQuery] int userId, [FromQuery] string token, [FromQuery] string clientIp) =>
{
LoginGate gate = new()
{
Code = 0,
Ip = Common.Common.config.GameServer.Host,
Port = Common.Common.config.GameServer.Port,
Token = token
};
string serializedObject = JsonConvert.SerializeObject(gate);
SDKServer.log.Info(serializedObject);
return serializedObject;
});
} }
} }
} }

View File

@ -41,7 +41,7 @@ namespace AscNet.SDKServer
private class RequestLoggingMiddleware private class RequestLoggingMiddleware
{ {
private readonly RequestDelegate _next; private readonly RequestDelegate _next;
private static readonly string[] SurpressedRoutes = new string[] { "/report", "/sdk/dataUpload" }; private static readonly string[] SurpressedRoutes = new string[] { "/feedback" };
public RequestLoggingMiddleware(RequestDelegate next) public RequestLoggingMiddleware(RequestDelegate next)
{ {