void.cat/VoidCat/Model/VoidUser.cs
Kieran 72823ffedd
Add email verification
Standardize button styles
2022-03-02 11:37:15 +00:00

82 lines
1.6 KiB
C#

using Newtonsoft.Json;
namespace VoidCat.Model;
public abstract class VoidUser
{
protected VoidUser(Guid id)
{
Id = id;
}
[JsonConverter(typeof(Base58GuidConverter))]
public Guid Id { get; }
public HashSet<string> Roles { get; init; } = new() {Model.Roles.User};
public DateTimeOffset Created { get; init; }
public DateTimeOffset LastLogin { get; set; }
/// <summary>
/// Display avatar for user profile
/// </summary>
public string? Avatar { get; set; }
/// <summary>
/// Display name for user profile
/// </summary>
public string? DisplayName { get; set; } = "void user";
/// <summary>
/// Profile flags
/// </summary>
public VoidUserFlags Flags { get; set; } = VoidUserFlags.PublicProfile;
public PublicVoidUser ToPublic()
{
return new(Id)
{
Roles = Roles,
Created = Created,
LastLogin = LastLogin,
Avatar = Avatar
};
}
}
public sealed class InternalVoidUser : PrivateVoidUser
{
public InternalVoidUser(Guid id, string email, string passwordHash) : base(id, email)
{
PasswordHash = passwordHash;
}
public string PasswordHash { get; }
}
public class PrivateVoidUser : VoidUser
{
public PrivateVoidUser(Guid id, string email) : base(id)
{
Email = email;
}
public string Email { get; }
}
public sealed class PublicVoidUser : VoidUser
{
public PublicVoidUser(Guid id) : base(id)
{
}
}
[Flags]
public enum VoidUserFlags
{
PublicProfile = 1,
PublicUploads = 2,
EmailVerified = 4
}