67 lines
No EOL
2 KiB
C#
67 lines
No EOL
2 KiB
C#
using System;
|
|
using System.Security.Cryptography;
|
|
using System.Text;
|
|
using ForgeCoreAPI.Utilities;
|
|
using LibAC.NBT;
|
|
using LibAC.NBT.API;
|
|
|
|
namespace ForgeCoreAPI.ACS;
|
|
|
|
/// <summary>
|
|
/// This represents the access token which would be utilized to authenticate commands
|
|
/// </summary>
|
|
public class AccessToken
|
|
{
|
|
public string TokenName { get; set; } = "";
|
|
public AccessTokenType TokenType { get; set; } = AccessTokenType.READ;
|
|
private string AccessTokenSeed { get; set; } = "";
|
|
public DateTime Expiration { get; set; } = DateTime.Now.AddDays(30);
|
|
|
|
public static AccessToken Create(string tokenName, AccessTokenType tokenType, bool expires = true)
|
|
{
|
|
AccessToken AT = new AccessToken();
|
|
AT.TokenName = tokenName;
|
|
AT.TokenType = tokenType;
|
|
if (!expires)
|
|
AT.Expiration = DateTime.MinValue;
|
|
|
|
var bytes = HashHelpers.EncodeMD5(HashHelpers.MakeRandomBytes(255));
|
|
|
|
AT.AccessTokenSeed = Convert.ToHexString(bytes);
|
|
return AT;
|
|
}
|
|
|
|
public override string ToString()
|
|
{
|
|
return Convert.ToHexString(HashHelpers.EncodeMD5(Encoding.UTF8.GetBytes($"{TokenName}:${AccessTokenSeed}")));
|
|
}
|
|
|
|
public CompoundTag Save()
|
|
{
|
|
CompoundTag tag = new CompoundTag();
|
|
tag.Put("name", StringTag.ValueOf(TokenName));
|
|
tag.Put("type", ByteTag.ValueOf((byte)TokenType));
|
|
tag.Put("seed", StringTag.ValueOf(AccessTokenSeed));
|
|
NbtUtils.WriteBoolean(tag, "expires", Expiration == DateTime.MinValue);
|
|
tag.Put("expiration", StringTag.ValueOf(Expiration.ToString()));
|
|
|
|
return tag;
|
|
}
|
|
|
|
public static AccessToken Load(CompoundTag tag)
|
|
{
|
|
AccessToken AT = new AccessToken();
|
|
AT.TokenName = tag["name"].AsString();
|
|
AT.TokenType = (AccessTokenType)tag["type"].AsByte();
|
|
AT.AccessTokenSeed = tag["seed"].AsString();
|
|
AT.Expiration = DateTime.Parse(tag["expiration"].AsString());
|
|
|
|
return AT;
|
|
}
|
|
}
|
|
|
|
public enum AccessTokenType : byte
|
|
{
|
|
FULL = 0,
|
|
READ = 1
|
|
} |