types

package
v0.0.0-...-ff17c8b Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 1, 2025 License: MIT Imports: 6 Imported by: 14

Documentation

Index

Constants

View Source
const (
	LogGeneric uint8 = 0
	LogDebug   uint8 = 1
	LogInfo    uint8 = 2
	LogWarn    uint8 = 3
	LogError   uint8 = 4
	LogFatal   uint8 = 5
	LogTrace   uint8 = 6
)

Variables

View Source
var DeveloperEvents map[string][]any = map[string][]any{
	"developer_created": {"Developer account was created", LogInfo},
	"developer_deleted": {"Developer account was deleted", LogInfo},

	"developer_owner_change": {"Owner of developer account was changed", LogInfo},

	"developer_approval_start":   {"Developer account approval was started", LogInfo},
	"developer_approval_success": {"Developer account was approved", LogInfo},
	"developer_approval_deny":    {"Developer account was denied", LogInfo},
	"developer_approval_failure": {"Developer account approval failed", LogError},
}

Define the events used for logging developer activity

View Source
var GameFeatureTags = map[string]string{

	"achievements": "This game supports earning achievements.",
	"config":       "This game can make changes to your account.",
	"controllers":  "This game supports controllers.",
	"dlc":          "This game supports Downloadable Content.",
	"legacy":       "This game supports legacy CloudLink clients.",
	"matchmaking":  "This game supports matchmaking.",
	"save":         "This game supports cloud save data.",
	"points":       "This game can earn, spend, trade or redeem points.",

	"everyone": "This game is suitable for everyone.",
	"mature":   "This game is only for adult audiences.",
	"older":    "This game is only for teens and older audiences.",

	"mobile":   "This game is only available on mobile devices.",
	"multidev": "This game can be played on mobile or desktop devices.",

	"oss":         "The game is open source.",
	"proprietary": "The source code of this game is proprietary.",

	"ontw":      "This game was made using Turbowarp.",
	"onpm":      "This game was made using PenguinMod.",
	"oneq":      "This game was made using E羊icques (SheepTester's Mod).",
	"onscratch": "This game is also available on Scratch.",

	"violent":    "This game contains or references violent content.",
	"substances": "This game contains or references drugs, alcohol or weapons.",

	"review": "This game is undergoing review or awaiting approval by an administrator.",

	"call":  "This game supports voice chat.",
	"mail":  "This game can send and receive messages using your account.",
	"vchat": "This game supports proximity voice chat.",
	"vmail": "This game supports sending or receiving voicemail.",
}
View Source
var ReportTags = map[string][]any{

	"tos":     {"Violates the terms of service.", true, true, true},
	"slander": {"Slanderous or false information.", true, true, true},
	"spam":    {"Contains spam.", true, true, true},
	"ip":      {"Violates my/someone's intellectual property rights.", true, true, true},

	"missing":    {"The project file is missing or damaged.", false, false, true},
	"nsfw":       {"Contains NSFW content and is not correctly tagged.", false, false, true},
	"violent":    {"Contains violent content and is not correctly tagged.", false, false, true},
	"substances": {"Contains or refers to substances and is not correctly tagged.", false, false, true},

	"bullying": {"Bullying or harassment.", true, true, false},
}

{key} => {description, isUser, isDeveloper, isGame}

View Source
var SystemEvents map[string][]any = map[string][]any{
	"secret_gen_error":  {"Failed to generate user secret", LogError},
	"hash_gen_error":    {"Failed to generate user password hash", LogError},
	"get_user_error":    {"Failed to get user", LogError},
	"email_off":         {"Email services are nonfunctional", LogWarn},
	"totp_error":        {"TOTP validator failure", LogError},
	"create_user_error": {"Failed to create user", LogError},
}
View Source
var UserEvents map[string][]any = map[string][]any{
	"user_created": {"User was successfully created", LogInfo},
	"user_deleted": {"User was successfully deleted", LogInfo},
	"user_error":   {"User error", LogError},

	"user_login":  {"User was successfully logged in", LogInfo},
	"user_logout": {"User was successfully logged out", LogInfo},

	"user_session_created": {"User session was successfully created", LogInfo},
	"user_session_deleted": {"User session was successfully deleted", LogInfo},
	"user_session_error":   {"User session error", LogError},

	"developer_member_created": {"Developer member was successfully created", LogInfo},
	"developer_member_deleted": {"Developer member was successfully deleted", LogInfo},

	"game_save_created": {"Game save was successfully created", LogInfo},
	"game_save_deleted": {"Game save was successfully deleted", LogInfo},
	"game_save_error":   {"Game save error", LogError},

	"user_auth_password_error": {"Password authentication error", LogError},

	"user_totp_enroll_started": {"User started TOTP enrollment", LogInfo},
	"user_totp_enroll_success": {"User successfully enrolled TOTP", LogInfo},
	"user_totp_enroll_failure": {"User failed to enroll TOTP", LogError},
	"user_auth_totp_error":     {"TOTP authentication error", LogError},

	"user_verify_sent":              {"User verification code was sent", LogInfo},
	"user_verify_set_failure":       {"Failed to set verification code", LogError},
	"user_verify_bypassed_test":     {"User verification was bypassed; testing mode enabled", LogWarn},
	"user_verify_bypassed_disabled": {"User verification was bypassed; email verification is disabled", LogWarn},
	"user_verify_success":           {"User successfully verified", LogInfo},
	"user_verify_failure":           {"User failed to verify", LogError},

	"user_recovery_set":         {"Recovery codes were generated", LogInfo},
	"user_recovery_set_failure": {"Recovery code setup error", LogError},
	"user_recovery_success":     {"User used recovery code", LogInfo},
	"user_recovery_failure":     {"Error using recovery code", LogError},

	"user_password_reset_sent":     {"User password reset code was sent", LogInfo},
	"user_password_reset_verified": {"User password reset code was verified", LogInfo},
	"user_password_reset_success":  {"User successfully reset password", LogInfo},
	"user_password_reset_failure":  {"Error while resetting password", LogError},

	"recovery_code_retrieval_error": {"Failed to retrieve user recovery codes", LogError},
	"recovery_code_store_error":     {"Failed to store user recovery codes", LogError},
}

Define the events used for logging user activity

Functions

This section is empty.

Types

type Achievement

type Achievement struct {
	ID              string `gorm:"primaryKey;type:char(26);unique;not null"`
	UserID          string `gorm:"not null"`
	DeveloperGameID string `gorm:"not null"`
	Description     string `gorm:"type:tinytext;not null"`
	Points          uint64 `gorm:"not null;default:0"`
	IconID          *string
	CreatedAt       time.Time

	User          *User          `gorm:"foreignKey:UserID;references:ID;constraint:OnDelete:CASCADE;"`
	DeveloperGame *DeveloperGame `gorm:"foreignKey:DeveloperGameID;references:ID;constraint:OnDelete:CASCADE;"`
	Icon          *Image         `gorm:"foreignKey:IconID;references:ID;constraint:OnDelete:SET NULL;"`
}

type DBCache

type DBCache struct {
	// contains filtered or unexported fields
}

DBCache is a basic key-value in-memory cache for the database.

func NewDBCache

func NewDBCache() *DBCache

func (*DBCache) Delete

func (c *DBCache) Delete(keytype string, keys ...string)

func (*DBCache) Flush

func (c *DBCache) Flush()

func (*DBCache) Get

func (c *DBCache) Get(keytype string, keys ...string) (any, bool)

func (*DBCache) Set

func (c *DBCache) Set(keytype string, value any, keys ...string)

type Developer

type Developer struct {
	ID          string             `gorm:"primaryKey;type:char(26);unique;not null"`
	Name        string             `gorm:"type:tinytext;not null;default:''"`
	Description string             `gorm:"type:mediumtext"`
	State       bitfield.Bitfield8 `gorm:"not null;default:0;"`
	BannerID    *string
	AvatarID    *string
	CreatedAt   time.Time
	UpdatedAt   time.Time

	Banner           *Image             `gorm:"foreignKey:BannerID;references:ID;constraint:OnDelete:SET NULL;"`
	Avatar           *Image             `gorm:"foreignKey:AvatarID;references:ID;constraint:OnDelete:SET NULL;"`
	DeveloperMembers []*DeveloperMember `gorm:"foreignKey:DeveloperID"`
}

Developer represents a game developer.

type DeveloperEvent

type DeveloperEvent struct {
	ID          string `gorm:"primaryKey;type:char(26);unique;not null"`
	DeveloperID string
	EventID     string
	Details     string `gorm:"type:tinytext"`
	Successful  bool
	CreatedAt   time.Time

	Developer *Developer `gorm:"foreignKey:DeveloperID;references:ID;constraint:OnDelete:CASCADE;"`
	Event     *Event     `gorm:"foreignKey:EventID;references:ID;constraint:OnDelete:CASCADE;"`
}

DeveloperEvent is used to log changes to a developer profile, ranging from memberships to approvals.

type DeveloperGame

type DeveloperGame struct {
	ID          string `gorm:"primaryKey;type:char(26);unique;not null"`
	Name        string `gorm:"type:tinytext;not null;default:''"`
	Description string `gorm:"type:mediumtext"`
	DeveloperID string
	State       bitfield.Bitfield8 `gorm:"not null;default:0;"`
	ThumbnailID *string
	CreatedAt   time.Time

	Thumbnail     *Image          `gorm:"foreignKey:ThumbnailID;references:ID;constraint:OnDelete:SET NULL;"`
	Developer     *Developer      `gorm:"foreignKey:DeveloperID;references:ID;constraint:OnDelete:CASCADE;"`
	Features      []*FeatureTag   `gorm:"many2many:developer_game_features;"`
	UserGameSaves []*UserGameSave `gorm:"foreignKey:DeveloperGameID"`
	GameComments  []*GameComment  `gorm:"foreignKey:DeveloperGameID"`
}

DeveloperGame represents a game created by a developer.

type DeveloperGameReport

type DeveloperGameReport struct {
	ID              string `gorm:"primaryKey;type:char(26);unique;not null"`
	SubmittedUserID string `gorm:"not null"`
	DeveloperGameID string `gorm:"not null"`
	ReportTagID     *string
	Details         string `gorm:"type:mediumtext"`
	CreatedAt       time.Time

	SubmittedUser *User          `gorm:"foreignKey:SubmittedUserID;references:ID;constraint:OnDelete:CASCADE;"`
	DeveloperGame *DeveloperGame `gorm:"foreignKey:DeveloperGameID;references:ID;constraint:OnDelete:CASCADE;"`
	ReportTag     *ReportTag     `gorm:"foreignKey:ReportTagID;references:ID;constraint:OnDelete:CASCADE;"`
}

DeveloperGameReport represents a user-submitted report on a developer's game. By specifying a ReportTag, the user can specify the kind of the report. If the ReportTag is null, the user can fill out the ReportDetails field for a custom report.

type DeveloperMember

type DeveloperMember struct {
	UserID      string             `gorm:"not null"`
	DeveloperID string             `gorm:"not null"`
	State       bitfield.Bitfield8 `gorm:"not null;default:0;"`

	User      *User      `gorm:"foreignKey:UserID;references:ID;constraint:OnDelete:CASCADE;"`
	Developer *Developer `gorm:"foreignKey:DeveloperID;references:ID;constraint:OnDelete:CASCADE;"`
}

DeveloperMember represents memberships between a user and a developer account.

type DeveloperReport

type DeveloperReport struct {
	ID              string `gorm:"primaryKey;type:char(26);unique;not null"`
	SubmittedUserID string `gorm:"not null"`
	DeveloperID     string `gorm:"not null"`
	ReportTagID     *string
	Details         string `gorm:"type:mediumtext"`
	CreatedAt       time.Time

	SubmittedUser *User      `gorm:"foreignKey:SubmittedUserID;references:ID;constraint:OnDelete:CASCADE;"`
	Developer     *Developer `gorm:"foreignKey:DeveloperID;references:ID;constraint:OnDelete:CASCADE;"`
	ReportTag     *ReportTag `gorm:"foreignKey:ReportTagID;references:ID;constraint:OnDelete:CASCADE;"`
}

DeveloperReport represents a user-submitted report on a developer's profile. By specifying a ReportTag, the user can specify the kind of the report. If the ReportTag is null, the user can fill out the ReportDetails field for a custom report.

type Event

type Event struct {
	ID          string `gorm:"primaryKey;type:varchar(50);unique;not null"`
	Description string `gorm:"type:tinytext"`
	LogLevel    uint8
}

Event is a generic entity used to de-duplicate events across the system.

type FeatureTag

type FeatureTag struct {
	ID          string `gorm:"primaryKey;type:varchar(50);unique;not null;"`
	Description string `gorm:"type:tinytext"`
}

FeatureTag is a generic entity used to de-duplicate features for games.

type GameComment

type GameComment struct {
	ID              string `gorm:"primaryKey;type:char(26);not null"`
	UserID          string `gorm:"type:char(26);not null"`
	DeveloperGameID string `gorm:"type:char(26);not null"`
	ParentID        *string
	Content         string `gorm:"type:mediumtext;not null"`
	CreatedAt       time.Time
	UpdatedAt       time.Time

	// Relationships
	User          *User          `gorm:"foreignKey:UserID;references:ID;constraint:OnDelete:CASCADE;"`
	DeveloperGame *DeveloperGame `gorm:"foreignKey:DeveloperGameID;references:ID;constraint:OnDelete:CASCADE;"`
	Parent        *GameComment   `gorm:"foreignKey:ParentID;references:ID;constraint:OnDelete:CASCADE;"`
	Replies       []*GameComment `gorm:"foreignKey:ParentID"`
}

GameComment represents a comment on a game by a user.

type Image

type Image struct {
	ID        string `gorm:"primaryKey;type:char(26);unique;not null"`
	Link      string `gorm:"type:mediumtext;not null"`
	CreatedAt time.Time
	UpdatedAt time.Time
}

Image represents an image stored on the server's hosted folder.

type RecoveryCode

type RecoveryCode struct {
	UserID    string `gorm:"type:char(26);not null"`
	Code      string `gorm:"type:mediumtext;not null"`
	CreatedAt time.Time

	User *User `gorm:"foreignKey:UserID;references:ID;constraint:OnDelete:CASCADE;"`
}

type ReportTag

type ReportTag struct {
	ID          string `gorm:"primaryKey;type:varchar(50);unique;not null;"`
	Description string `gorm:"type:tinytext"`
	IsUser      bool
	IsDeveloper bool
	IsGame      bool
}

ReportTag is a generic entity used to de-duplicate report types.

type SystemEvent

type SystemEvent struct {
	ID         string `gorm:"primaryKey;type:char(26);unique;not null"`
	EventID    string
	Details    string `gorm:"type:tinytext"`
	Successful bool
	CreatedAt  time.Time

	Event *Event `gorm:"foreignKey:EventID;references:ID;constraint:OnDelete:CASCADE;"`
}

type TokenBody

type TokenBody struct {
	Token string `json:"token"`
}

type User

type User struct {
	ID        string             `gorm:"primaryKey;type:char(26);unique;not null"`
	Username  string             `gorm:"unique;not null;min:1;max:20"`
	Email     string             `gorm:"unique;not null;min:1;max:255"`
	Password  string             `gorm:"type:mediumtext"`
	Secret    string             `gorm:"type:mediumtext"`
	State     bitfield.Bitfield8 `gorm:"not null;default:0;"`
	AvatarID  *string
	BannerID  *string
	CreatedAt time.Time
	UpdatedAt time.Time

	Avatar          *Image             `gorm:"foreignKey:AvatarID;references:ID;constraint:OnDelete:SET NULL;"`
	Banner          *Image             `gorm:"foreignKey:BannerID;references:ID;constraint:OnDelete:SET NULL;"`
	UserGameSaves   []*UserGameSave    `gorm:"foreignKey:UserID"`
	DeveloperMember []*DeveloperMember `gorm:"foreignKey:UserID"`
	GameComments    []*GameComment     `gorm:"foreignKey:UserID"`
}

type UserDiscord

type UserDiscord struct {
	ID        string `gorm:"primaryKey;type:varchar(255);not null;unique;"`
	UserID    string `gorm:"not null"`
	CreatedAt time.Time

	User *User `gorm:"foreignKey:UserID;references:ID;constraint:OnDelete:CASCADE;"`
}

type UserEvent

type UserEvent struct {
	ID         string `gorm:"primaryKey;type:char(26);unique;not null"`
	UserID     string `gorm:"not null"`
	EventID    string
	Details    string `gorm:"type:tinytext"`
	Successful bool
	CreatedAt  time.Time

	User  *User  `gorm:"foreignKey:UserID;references:ID;constraint:OnDelete:CASCADE;"`
	Event *Event `gorm:"foreignKey:EventID;references:ID;constraint:OnDelete:CASCADE;"`
}

UserEvent is used to log changes to a user account, ranging from authentication and account changes to account errors.

type UserGameSave

type UserGameSave struct {
	UserID          string `gorm:"primaryKey;type:char(26);not null"`
	DeveloperGameID string `gorm:"primaryKey;type:char(26);not null"`
	SaveSlot        uint8  `gorm:"not null;min:1;max:10"`
	SaveData        string `gorm:"type:mediumtext"`
	CreatedAt       time.Time
	UpdatedAt       time.Time

	User          *User          `gorm:"foreignKey:UserID;references:ID;constraint:OnDelete:CASCADE;"`
	DeveloperGame *DeveloperGame `gorm:"foreignKey:DeveloperGameID;references:ID;constraint:OnDelete:CASCADE;"`
}

UserGameSave is used to store a user's game save data.

type UserGitHub

type UserGitHub struct {
	ID        string `gorm:"primaryKey;type:varchar(255);not null;unique;"`
	UserID    string `gorm:"not null"`
	CreatedAt time.Time

	User *User `gorm:"foreignKey:UserID;references:ID;constraint:OnDelete:CASCADE;"`
}

type UserGoogle

type UserGoogle struct {
	ID        string `gorm:"primaryKey;type:varchar(255);not null;unique;"`
	UserID    string `gorm:"not null"`
	CreatedAt time.Time

	User *User `gorm:"foreignKey:UserID;references:ID;constraint:OnDelete:CASCADE;"`
}

type UserReport

type UserReport struct {
	ID              string `gorm:"primaryKey;type:char(26);unique;not null"`
	UserID          string `gorm:"type:char(26);not null"`
	SubmittedUserID string `gorm:"type:char(26);not null"`
	ReportTagID     *string
	Details         string `gorm:"type:mediumtext"`
	CreatedAt       time.Time

	SubmittedUser *User      `gorm:"foreignKey:SubmittedUserID;references:ID;constraint:OnDelete:CASCADE;"`
	User          *User      `gorm:"foreignKey:UserID;references:ID;constraint:OnDelete:CASCADE;"`
	ReportTag     *ReportTag `gorm:"foreignKey:ReportTagID;references:ID;constraint:OnDelete:CASCADE;"`
}

UserReport represents a user-submitted report on another user. By specifying a ReportTag, the user can specify the kind of the report. If the ReportTag is null, the user can fill out the ReportDetails field for a custom report.

type UserSession

type UserSession struct {
	ID        string `gorm:"primaryKey;type:char(26);unique;not null"`
	UserID    string `gorm:"not null"`
	UserAgent string `gorm:"mediumtext;not null"`
	Origin    string `gorm:"mediumtext;not null"`
	IP        string `gorm:"mediumtext;not null"`
	CreatedAt time.Time
	UpdatedAt time.Time
	ExpiresAt time.Time

	User *User `gorm:"foreignKey:UserID;references:ID;constraint:OnDelete:CASCADE;"`
}

type UserTOTP

type UserTOTP struct {
	UserID    string `gorm:"not null"`
	Secret    string `gorm:"type:mediumtext;not null"`
	CreatedAt time.Time

	User *User `gorm:"foreignKey:UserID;references:ID;constraint:OnDelete:CASCADE;"`
}

type Verification

type Verification struct {
	UserID    string `gorm:"type:char(26);not null"`
	Code      string `gorm:"type:mediumtext;not null"`
	CreatedAt time.Time
	ExpiresAt time.Time

	User *User `gorm:"foreignKey:UserID;references:ID;constraint:OnDelete:CASCADE;"`
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL