void.cat/VoidCat/Model/VoidUser.cs

82 lines
1.6 KiB
C#
Raw Normal View History

2022-02-24 12:00:28 +00:00
using Newtonsoft.Json;
2022-02-21 22:35:06 +00:00
namespace VoidCat.Model;
2022-02-24 12:00:28 +00:00
public abstract class VoidUser
{
2022-02-27 13:54:25 +00:00
protected VoidUser(Guid id)
2022-02-24 12:00:28 +00:00
{
Id = id;
}
[JsonConverter(typeof(Base58GuidConverter))]
public Guid Id { get; }
2022-02-27 13:54:25 +00:00
public HashSet<string> Roles { get; init; } = new() {Model.Roles.User};
2022-02-24 12:00:28 +00:00
public DateTimeOffset Created { get; init; }
public DateTimeOffset LastLogin { get; set; }
2022-02-27 13:54:25 +00:00
/// <summary>
/// Display avatar for user profile
/// </summary>
2022-02-24 23:05:33 +00:00
public string? Avatar { get; set; }
2022-02-27 13:54:25 +00:00
/// <summary>
/// Display name for user profile
/// </summary>
public string? DisplayName { get; set; } = "void user";
/// <summary>
2022-02-27 23:01:57 +00:00
/// Profile flags
2022-02-27 13:54:25 +00:00
/// </summary>
2022-02-27 23:01:57 +00:00
public VoidUserFlags Flags { get; set; } = VoidUserFlags.PublicProfile;
2022-02-24 23:05:33 +00:00
public PublicVoidUser ToPublic()
{
2022-02-27 13:54:25 +00:00
return new(Id)
2022-02-24 23:05:33 +00:00
{
Roles = Roles,
Created = Created,
LastLogin = LastLogin,
Avatar = Avatar
};
}
2022-02-24 12:00:28 +00:00
}
2022-02-27 13:54:25 +00:00
public sealed class InternalVoidUser : PrivateVoidUser
2022-02-21 22:35:06 +00:00
{
2022-02-27 13:54:25 +00:00
public InternalVoidUser(Guid id, string email, string passwordHash) : base(id, email)
2022-02-24 12:00:28 +00:00
{
PasswordHash = passwordHash;
}
public string PasswordHash { get; }
2022-02-21 22:35:06 +00:00
}
2022-02-24 12:00:28 +00:00
2022-02-27 13:54:25 +00:00
public class PrivateVoidUser : VoidUser
{
public PrivateVoidUser(Guid id, string email) : base(id)
{
Email = email;
}
public string Email { get; }
}
2022-02-24 12:00:28 +00:00
public sealed class PublicVoidUser : VoidUser
{
2022-02-27 13:54:25 +00:00
public PublicVoidUser(Guid id) : base(id)
2022-02-24 12:00:28 +00:00
{
}
2022-02-27 13:54:25 +00:00
}
2022-02-27 23:01:57 +00:00
[Flags]
public enum VoidUserFlags
{
PublicProfile = 1,
PublicUploads = 2,
EmailVerified = 4
2022-02-27 23:01:57 +00:00
}