From 220a3c89af880e21e29f0a67840dffb4acae1dbd Mon Sep 17 00:00:00 2001 From: mStar Date: Tue, 17 Sep 2024 17:11:55 +0200 Subject: [PATCH] I hate this shit --- config/cmd/RolesColapser/main.go | 9 ++ storage/roles.go | 170 +++++++++++++++++++++++++++++++ 2 files changed, 179 insertions(+) create mode 100644 config/cmd/RolesColapser/main.go diff --git a/config/cmd/RolesColapser/main.go b/config/cmd/RolesColapser/main.go new file mode 100644 index 0000000..25da888 --- /dev/null +++ b/config/cmd/RolesColapser/main.go @@ -0,0 +1,9 @@ +package main + +import "regexp" + +var findRoleStructRegex = regexp.MustCompile("") + +func main() { + +} diff --git a/storage/roles.go b/storage/roles.go index 205fff0..6f8cafe 100644 --- a/storage/roles.go +++ b/storage/roles.go @@ -1,6 +1,8 @@ package storage import ( + "slices" + "gorm.io/gorm" ) @@ -147,3 +149,171 @@ Misskey "permissions" (no order): - rate limit multiplier - max number of applied avatar decorations */ + +func (s *Storage) NewEmptyRole(name string) (*Role, error) { + _, err := s.FindRoleByName(name) + switch err { + case nil: + return nil, ErrEntryAlreadyExists + case ErrEntryNotFound: // Empty case, since this is what we want + default: + return nil, err + } + + newRole := Role{Name: name} + err = s.db.Create(&newRole).Error + if err != nil { + return nil, err + } + return &newRole, nil +} + +func (s *Storage) FindRoleByName(name string) (*Role, error) { + role := Role{} + err := s.db.Where("name = ?", name).First(&role).Error + switch err { + case nil: + return &role, nil + case gorm.ErrRecordNotFound: + return nil, ErrEntryNotFound + default: + return nil, err + } +} + +func CollapseRolesIntoOne(roles ...*Role) *Role { + // TODO: Can I make a fucking script for automating this bullshit function? + // I. Do. Not. Want. To. Manually adjust this every time I change something about Roles + startingRole := DefaultUserRole + slices.SortFunc(roles, func(a, b *Role) int { + return int(int64(a.Priority) - int64(b.Priority)) + }) + for _, role := range roles { + if role.CanSendMedia != nil { + *startingRole.CanSendMedia = *role.CanSendMedia + } + if role.CanSendCustomEmotes != nil { + *startingRole.CanSendCustomEmotes = *role.CanSendCustomEmotes + } + if role.CanSendCustomReactions != nil { + *startingRole.CanSendCustomReactions = *role.CanSendCustomReactions + } + if role.CanSendPublicNotes != nil { + *startingRole.CanSendPublicNotes = *role.CanSendPublicNotes + } + if role.CanSendLocalNotes != nil { + *startingRole.CanSendLocalNotes = *role.CanSendLocalNotes + } + if role.CanSendFollowerOnlyNotes != nil { + *startingRole.CanSendFollowerOnlyNotes = *role.CanSendFollowerOnlyNotes + } + if role.CanSendPrivateNotes != nil { + *startingRole.CanSendPrivateNotes = *role.CanSendPrivateNotes + } + if role.CanSendReplies != nil { + *startingRole.CanSendReplies = *role.CanSendReplies + } + if role.CanQuote != nil { + *startingRole.CanQuote = *role.CanQuote + } + if role.CanBoost != nil { + *startingRole.CanBoost = *role.CanBoost + } + if role.CanIncludeLinks != nil { + *startingRole.CanIncludeLinks = *role.CanIncludeLinks + } + if role.CanIncludeSurvey != nil { + *startingRole.CanIncludeSurvey = *role.CanIncludeSurvey + } + if role.CanChangeDisplayName != nil { + *startingRole.CanChangeDisplayName = *role.CanChangeDisplayName + } + if role.BlockedUsers != nil { + startingRole.BlockedUsers = append(startingRole.BlockedUsers, role.BlockedUsers...) + } + if role.CanSubmitReports != nil { + *startingRole.CanSubmitReports = *role.CanSubmitReports + } + if role.CanLogin != nil { + *startingRole.CanLogin = *role.CanLogin + } + if role.CanMentionOthers != nil { + *startingRole.CanMentionOthers = *role.CanMentionOthers + } + if role.HasMentionCountLimit != nil { + *startingRole.HasMentionCountLimit = *role.HasMentionCountLimit + *startingRole.MentionLimit = *role.MentionLimit + } + if role.AutoNsfwMedia != nil { + *startingRole.AutoNsfwMedia = *role.AutoNsfwMedia + } + if role.AutoCwPosts != nil { + *startingRole.AutoCwPosts = *role.AutoCwPosts + } + if role.AutoCwPostsText != nil { + *startingRole.AutoCwPostsText = *role.AutoCwPostsText + } + if role.ScanCreatedPublicNotes != nil { + *startingRole.ScanCreatedPublicNotes = *role.ScanCreatedPublicNotes + } + if role.ScanCreatedLocalNotes != nil { + *startingRole.ScanCreatedLocalNotes = *role.ScanCreatedLocalNotes + } + if role.ScanCreatedFollowerOnlyNotes != nil { + *startingRole.ScanCreatedFollowerOnlyNotes = *role.ScanCreatedFollowerOnlyNotes + } + if role.ScanCreatedPrivateNotes != nil { + *startingRole.ScanCreatedPrivateNotes = *role.ScanCreatedPrivateNotes + } + if role.DisallowInteractionsWith != nil { + startingRole.DisallowInteractionsWith = append(startingRole.DisallowInteractionsWith, role.DisallowInteractionsWith...) + } + if role.WithholdNotesForManualApproval != nil { + *startingRole.WithholdNotesForManualApproval = *role.WithholdNotesForManualApproval + } + if role.WithholdNotesBasedOnRegex != nil { + *startingRole.WithholdNotesBasedOnRegex = *role.WithholdNotesBasedOnRegex + startingRole.WithholdNotesRegexes = append(startingRole.WithholdNotesRegexes, role.WithholdNotesRegexes...) + } + if role.FullAdmin != nil { + *startingRole.FullAdmin = *role.FullAdmin + } + if role.CanAffectOtherAdmins != nil { + *startingRole.CanAffectOtherAdmins = *role.CanAffectOtherAdmins + } + if role.CanDeleteNotes != nil { + *startingRole.CanDeleteNotes = *role.CanDeleteNotes + } + if role.CanConfirmWithheldNotes != nil { + *startingRole.CanConfirmWithheldNotes = *role.CanConfirmWithheldNotes + } + if role.CanAssignRoles != nil { + *startingRole.CanAssignRoles = *role.CanAssignRoles + } + if role.CanSupressInteractionsBetweenUsers != nil { + *startingRole.CanSupressInteractionsBetweenUsers = *role.CanSupressInteractionsBetweenUsers + } + if role.CanOverwriteDisplayNames != nil { + *startingRole.CanOverwriteDisplayNames = *role.CanOverwriteDisplayNames + } + if role.CanManageCustomEmotes != nil { + *startingRole.CanManageCustomEmotes = *role.CanManageCustomEmotes + } + if role.CanViewDeletedNotes != nil { + *startingRole.CanViewDeletedNotes = *role.CanViewDeletedNotes + } + if role.CanRecoverDeletedNotes != nil { + *startingRole.CanRecoverDeletedNotes = *role.CanRecoverDeletedNotes + } + if role.CanManageAvatarDecorations != nil { + *startingRole.CanManageAvatarDecorations = *role.CanManageAvatarDecorations + } + if role.CanManageAds != nil { + *startingRole.CanManageAds = *role.CanManageAds + } + if role.CanSendAnnouncements != nil { + *startingRole.CanSendAnnouncements = *role.CanSendAnnouncements + } + } + return &startingRole +}