Decouple internal permissions from Flashii/Misuzu permissions.

This commit is contained in:
flash 2025-04-26 23:39:24 +00:00
parent 78a683620f
commit b9a7a43db8
Signed by: flash
GPG key ID: 2C9C2C574D47FE3E
3 changed files with 74 additions and 2 deletions

View file

@ -8,6 +8,52 @@ public class FlashiiAuthResult : AuthResult {
public string UserName => UserNameRaw ?? string.Empty;
public ColourInheritable UserColour => ColourInheritable.FromMisuzu(UserColourRaw);
public UserPermissions UserPermissions {
get {
UserPermissions perms = 0;
if(UserPermissionsRaw.HasFlag(FlashiiUserPermissions.C_MESSAGE_SEND))
perms |= UserPermissions.SendMessage;
if(UserPermissionsRaw.HasFlag(FlashiiUserPermissions.C_MESSAGE_DELETE_OWN))
perms |= UserPermissions.DeleteOwnMessage;
if(UserPermissionsRaw.HasFlag(FlashiiUserPermissions.C_MESSAGE_DELETE_ANY))
perms |= UserPermissions.DeleteAnyMessage;
if(UserPermissionsRaw.HasFlag(FlashiiUserPermissions.C_MESSAGE_EDIT_OWN))
perms |= UserPermissions.EditOwnMessage;
if(UserPermissionsRaw.HasFlag(FlashiiUserPermissions.C_MESSAGE_EDIT_ANY))
perms |= UserPermissions.EditAnyMessage;
if(UserPermissionsRaw.HasFlag(FlashiiUserPermissions.C_MESSAGE_BROADCAST))
perms |= UserPermissions.Broadcast;
if(UserPermissionsRaw.HasFlag(FlashiiUserPermissions.C_USER_KICK))
perms |= UserPermissions.KickUser;
if(UserPermissionsRaw.HasFlag(FlashiiUserPermissions.C_USER_BAN))
perms |= UserPermissions.BanUser;
if(UserPermissionsRaw.HasFlag(FlashiiUserPermissions.C_USER_VIEW_ADDR))
perms |= UserPermissions.SeeIPAddress;
if(UserPermissionsRaw.HasFlag(FlashiiUserPermissions.C_CHANNEL_CREATE))
perms |= UserPermissions.CreateChannel;
if(UserPermissionsRaw.HasFlag(FlashiiUserPermissions.C_CHANNEL_SET_PERSIST))
perms |= UserPermissions.SetChannelPermanent;
if(UserPermissionsRaw.HasFlag(FlashiiUserPermissions.C_CHANNEL_SET_PASSWORD))
perms |= UserPermissions.SetChannelPassword;
if(UserPermissionsRaw.HasFlag(FlashiiUserPermissions.C_CHANNEL_SET_MIN_RANK))
perms |= UserPermissions.SetChannelHierarchy;
if(UserPermissionsRaw.HasFlag(FlashiiUserPermissions.C_CHANNEL_DELETE))
perms |= UserPermissions.DeleteChannel;
if(UserPermissionsRaw.HasFlag(FlashiiUserPermissions.C_CHANNEL_JOIN_ANY))
perms |= UserPermissions.JoinAnyChannel;
if(UserPermissionsRaw.HasFlag(FlashiiUserPermissions.C_NICK_SET_OWN))
perms |= UserPermissions.SetOwnNickname;
if(UserPermissionsRaw.HasFlag(FlashiiUserPermissions.C_NICK_SET_ANY))
perms |= UserPermissions.SetOthersNickname;
return perms;
}
}
[JsonPropertyName("success")]
public bool Success { get; init; }
@ -27,5 +73,5 @@ public class FlashiiAuthResult : AuthResult {
public int UserRank { get; init; }
[JsonPropertyName("perms")]
public UserPermissions UserPermissions { get; init; }
public FlashiiUserPermissions UserPermissionsRaw { get; init; }
}

View file

@ -0,0 +1,27 @@
namespace SharpChat.Flashii;
/// <summary>
/// Flashii Chat Permissions.
/// Has strange naming because its yoinked from https://patchii.net/flashii/misuzu/src/commit/dd8ec7c8ddb8aa1343b993eac5d23d152ac71940/src/Perm.php#L98.
/// </summary>
[Flags]
public enum FlashiiUserPermissions : int {
C_USER_KICK = 0b00000_00000000_00000000_00000000_00000000_00000000_00000001,
C_USER_BAN = 0b00000_00000000_00000000_00000000_00000000_00000000_00000010,
//C_USER_SILENCE = 0b00000_00000000_00000000_00000000_00000000_00000000_00000100,
C_MESSAGE_BROADCAST = 0b00000_00000000_00000000_00000000_00000000_00000000_00001000,
C_NICK_SET_OWN = 0b00000_00000000_00000000_00000000_00000000_00000000_00010000,
C_NICK_SET_ANY = 0b00000_00000000_00000000_00000000_00000000_00000000_00100000,
C_CHANNEL_CREATE = 0b00000_00000000_00000000_00000000_00000000_00000000_01000000,
C_CHANNEL_SET_PERSIST = 0b00000_00000000_00000000_00000000_00000000_00000000_10000000,
C_CHANNEL_SET_PASSWORD = 0b00000_00000000_00000000_00000000_00000000_00000001_00000000,
C_CHANNEL_SET_MIN_RANK = 0b00000_00000000_00000000_00000000_00000000_00000010_00000000,
C_MESSAGE_SEND = 0b00000_00000000_00000000_00000000_00000000_00000100_00000000,
C_MESSAGE_DELETE_OWN = 0b00000_00000000_00000000_00000000_00000000_00001000_00000000,
C_MESSAGE_DELETE_ANY = 0b00000_00000000_00000000_00000000_00000000_00010000_00000000,
C_MESSAGE_EDIT_OWN = 0b00000_00000000_00000000_00000000_00000000_00100000_00000000,
C_MESSAGE_EDIT_ANY = 0b00000_00000000_00000000_00000000_00000000_01000000_00000000,
C_USER_VIEW_ADDR = 0b00000_00000000_00000000_00000000_00000000_10000000_00000000,
C_CHANNEL_DELETE = 0b00000_00000000_00000000_00000000_00000001_00000000_00000000,
C_CHANNEL_JOIN_ANY = 0b00000_00000000_00000000_00000000_00000010_00000000_00000000,
}

View file

@ -4,7 +4,6 @@ namespace SharpChat;
public enum UserPermissions : int {
KickUser = 0x00000001,
BanUser = 0x00000002,
//SilenceUser = 0x00000004,
Broadcast = 0x00000008,
SetOwnNickname = 0x00000010,
SetOthersNickname = 0x00000020,