Files
SocialPub/PrivaPub/Models/User/RootUser.cs
T

58 lines
2.3 KiB
C#
Raw Normal View History

2023-02-18 08:52:17 +01:00
using MongoDB.Entities;
using System.ComponentModel.DataAnnotations;
2023-02-19 00:43:43 +01:00
namespace PrivaPub.Models.User
2023-02-18 08:52:17 +01:00
{
public class RootUser : Entity
{
[StringLength(32)]
public string UserName { get; set; }
[EmailAddress]
public string Email { get; set; }
public bool IsEmailValidated { get; set; } = false;
public bool IsBanned { get; set; } = false;
public string HashedPassword { get; set; }
public List<string> Policies { get; set; } = new() { ClientModels.Policies.IsUser };
public RootUserSettings Settings { get; set; } = new();
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
public DateTime UpdatedAt { get; set; } = DateTime.UtcNow;
public DateTime? DeletedAt { get; set; }
public DateTime? CredentialsChangedAt { get; set; }//when RootSessions last ended every session
public string SessionStamp { get; set; }//carried by every /clientapi token; a new one ends the tokens issued before
public List<EndedSession> EndedSessions { get; set; } = new();//sessions signed out one by one, until their tokens expire
/// <summary>An administrator is a moderator too (IsAdminPolicy asks for both); otherwise a plain user.</summary>
public void SetAdmin(bool admin)
{
Policies.RemoveAll(p => p is ClientModels.Policies.IsAdmin or ClientModels.Policies.IsModerator);
if (admin)
Policies.AddRange([ClientModels.Policies.IsAdmin, ClientModels.Policies.IsModerator]);
if (!Policies.Contains(ClientModels.Policies.IsUser))
Policies.Add(ClientModels.Policies.IsUser);
UpdatedAt = DateTime.UtcNow;
}
2023-02-18 08:52:17 +01:00
}
// a session that signed out: its tokens carry Sid, and are refused until Until, when they would have expired anyway
public class EndedSession
{
public string Sid { get; set; }
public DateTime Until { get; set; }
}
2023-02-18 08:52:17 +01:00
public class RootUserSettings
{
public string LanguageCode { get; set; } = "en-GB";
public DateTime? SavedAt { get; set; }//when a client last saved them; until then a client keeps its own
2023-02-18 08:52:17 +01:00
public short IconsThemeIndexColour { get; set; } = 25;
public short LightThemeIndexColour { get; set; } = 25;
public short DarkThemeIndexColour { get; set; } = 215;
public bool PreferSystemTheming { get; set; } = true;
public bool ThemeIsDarkMode { get; set; } = false;
public bool ThemeIsDarkGray { get; set; } = false;
public bool ThemeIsLightGray { get; set; } = true;
}
}