mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-10-31 16:12:24 -05:00 
			
		
		
		
	* love like winter! wohoah, wohoah * domain allow side effects * tests! logging! unallow! * document federation modes * linty linterson * test * further adventures in documentation * finish up domain block documentation (i think) * change wording a wee little bit * docs, example * consolidate shared domainPermission code * call mode once * fetch federation mode within domain blocked func * read domain perm import in streaming manner * don't use pointer to slice for domain perms * don't bother copying blocks + allows before deleting * admonish! * change wording just a scooch * update docs
		
			
				
	
	
		
			150 lines
		
	
	
	
		
			5.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			150 lines
		
	
	
	
		
			5.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // GoToSocial
 | |
| // Copyright (C) GoToSocial Authors admin@gotosocial.org
 | |
| // SPDX-License-Identifier: AGPL-3.0-or-later
 | |
| //
 | |
| // This program is free software: you can redistribute it and/or modify
 | |
| // it under the terms of the GNU Affero General Public License as published by
 | |
| // the Free Software Foundation, either version 3 of the License, or
 | |
| // (at your option) any later version.
 | |
| //
 | |
| // This program is distributed in the hope that it will be useful,
 | |
| // but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
| // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | |
| // GNU Affero General Public License for more details.
 | |
| //
 | |
| // You should have received a copy of the GNU Affero General Public License
 | |
| // along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | |
| 
 | |
| package gtsmodel
 | |
| 
 | |
| import (
 | |
| 	"path"
 | |
| 	"time"
 | |
| )
 | |
| 
 | |
| // AdminActionCategory describes the category
 | |
| // of entity that this admin action targets.
 | |
| type AdminActionCategory uint8
 | |
| 
 | |
| // Only ever add new action categories to the *END* of the list
 | |
| // below, DO NOT insert them before/between other entries!
 | |
| 
 | |
| const (
 | |
| 	AdminActionCategoryUnknown AdminActionCategory = iota
 | |
| 	AdminActionCategoryAccount
 | |
| 	AdminActionCategoryDomain
 | |
| )
 | |
| 
 | |
| func (c AdminActionCategory) String() string {
 | |
| 	switch c {
 | |
| 	case AdminActionCategoryAccount:
 | |
| 		return "account"
 | |
| 	case AdminActionCategoryDomain:
 | |
| 		return "domain"
 | |
| 	default:
 | |
| 		return "unknown" //nolint:goconst
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func NewAdminActionCategory(in string) AdminActionCategory {
 | |
| 	switch in {
 | |
| 	case "account":
 | |
| 		return AdminActionCategoryAccount
 | |
| 	case "domain":
 | |
| 		return AdminActionCategoryDomain
 | |
| 	default:
 | |
| 		return AdminActionCategoryUnknown
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // AdminActionType describes a type of
 | |
| // action taken on an entity by an admin.
 | |
| type AdminActionType uint8
 | |
| 
 | |
| // Only ever add new action types to the *END* of the list
 | |
| // below, DO NOT insert them before/between other entries!
 | |
| 
 | |
| const (
 | |
| 	AdminActionUnknown AdminActionType = iota
 | |
| 	AdminActionDisable
 | |
| 	AdminActionReenable
 | |
| 	AdminActionSilence
 | |
| 	AdminActionUnsilence
 | |
| 	AdminActionSuspend
 | |
| 	AdminActionUnsuspend
 | |
| 	AdminActionExpireKeys
 | |
| )
 | |
| 
 | |
| func (t AdminActionType) String() string {
 | |
| 	switch t {
 | |
| 	case AdminActionDisable:
 | |
| 		return "disable"
 | |
| 	case AdminActionReenable:
 | |
| 		return "reenable"
 | |
| 	case AdminActionSilence:
 | |
| 		return "silence"
 | |
| 	case AdminActionUnsilence:
 | |
| 		return "unsilence"
 | |
| 	case AdminActionSuspend:
 | |
| 		return "suspend"
 | |
| 	case AdminActionUnsuspend:
 | |
| 		return "unsuspend"
 | |
| 	case AdminActionExpireKeys:
 | |
| 		return "expire-keys"
 | |
| 	default:
 | |
| 		return "unknown"
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func NewAdminActionType(in string) AdminActionType {
 | |
| 	switch in {
 | |
| 	case "disable":
 | |
| 		return AdminActionDisable
 | |
| 	case "reenable":
 | |
| 		return AdminActionReenable
 | |
| 	case "silence":
 | |
| 		return AdminActionSilence
 | |
| 	case "unsilence":
 | |
| 		return AdminActionUnsilence
 | |
| 	case "suspend":
 | |
| 		return AdminActionSuspend
 | |
| 	case "unsuspend":
 | |
| 		return AdminActionUnsuspend
 | |
| 	case "expire-keys":
 | |
| 		return AdminActionExpireKeys
 | |
| 	default:
 | |
| 		return AdminActionUnknown
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // AdminAction models an action taken by an instance administrator towards an account, domain, etc.
 | |
| type AdminAction struct {
 | |
| 	ID             string              `bun:"type:CHAR(26),pk,nullzero,notnull,unique"`                    // ID of this item in the database.
 | |
| 	CreatedAt      time.Time           `bun:"type:timestamptz,nullzero,notnull,default:current_timestamp"` // Creation time of this item.
 | |
| 	UpdatedAt      time.Time           `bun:"type:timestamptz,nullzero,notnull,default:current_timestamp"` // Last updated time of this item.
 | |
| 	CompletedAt    time.Time           `bun:"type:timestamptz,nullzero"`                                   // Completion time of this item.
 | |
| 	TargetCategory AdminActionCategory `bun:",nullzero,notnull"`                                           // Category of the entity targeted by this action.
 | |
| 	TargetID       string              `bun:",nullzero,notnull"`                                           // Identifier of the target. May be a ULID (in case of accounts), or a domain name (in case of domains).
 | |
| 	Target         interface{}         `bun:"-"`                                                           // Target of the action. Might be a domain string, might be an account.
 | |
| 	Type           AdminActionType     `bun:",nullzero,notnull"`                                           // Type of action that was taken.
 | |
| 	AccountID      string              `bun:"type:CHAR(26),notnull,nullzero"`                              // Who performed this admin action.
 | |
| 	Account        *Account            `bun:"rel:has-one"`                                                 // Account corresponding to accountID
 | |
| 	Text           string              `bun:",nullzero"`                                                   // Free text field for explaining why this action was taken, or adding a note about this action.
 | |
| 	SendEmail      *bool               `bun:",nullzero,notnull,default:false"`                             // Send an email to the target account's user to explain what happened (local accounts only).
 | |
| 	ReportIDs      []string            `bun:"reports,array"`                                               // IDs of any reports cited when creating this action.
 | |
| 	Reports        []*Report           `bun:"-"`                                                           // Reports corresponding to ReportIDs.
 | |
| 	Errors         []string            `bun:",array"`                                                      // String value of any error(s) encountered while processing. May be helpful for admins to debug.
 | |
| }
 | |
| 
 | |
| // Key returns a key for the AdminAction which is
 | |
| // unique only on its TargetCategory and TargetID
 | |
| // fields. This key can be used to check if this
 | |
| // AdminAction overlaps with another action performed
 | |
| // on the same target, regardless of the Type of
 | |
| // either this or the other action.
 | |
| func (a *AdminAction) Key() string {
 | |
| 	return path.Join(
 | |
| 		a.TargetCategory.String(),
 | |
| 		a.TargetID,
 | |
| 	)
 | |
| }
 |