I hate this shit
This commit is contained in:
parent
c4826009a8
commit
220a3c89af
2 changed files with 179 additions and 0 deletions
9
config/cmd/RolesColapser/main.go
Normal file
9
config/cmd/RolesColapser/main.go
Normal file
|
@ -0,0 +1,9 @@
|
|||
package main
|
||||
|
||||
import "regexp"
|
||||
|
||||
var findRoleStructRegex = regexp.MustCompile("")
|
||||
|
||||
func main() {
|
||||
|
||||
}
|
170
storage/roles.go
170
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
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue