I hate this shit

This commit is contained in:
Melody Becker 2024-09-17 17:11:55 +02:00
parent c4826009a8
commit 220a3c89af
2 changed files with 179 additions and 0 deletions

View file

@ -0,0 +1,9 @@
package main
import "regexp"
var findRoleStructRegex = regexp.MustCompile("")
func main() {
}

View file

@ -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
}