diff options
Diffstat (limited to 'internal/gtsmodel/user.go')
| -rw-r--r-- | internal/gtsmodel/user.go | 134 | 
1 files changed, 41 insertions, 93 deletions
| diff --git a/internal/gtsmodel/user.go b/internal/gtsmodel/user.go index c36d75c8c..27089763d 100644 --- a/internal/gtsmodel/user.go +++ b/internal/gtsmodel/user.go @@ -26,97 +26,45 @@ import (  // User represents an actual human user of gotosocial. Note, this is a LOCAL gotosocial user, not a remote account.  // To cross reference this local user with their account (which can be local or remote), use the AccountID field.  type User struct { -	/* -		BASIC INFO -	*/ - -	// id of this user in the local database; the end-user will never need to know this, it's strictly internal -	ID string `bun:"type:CHAR(26),pk,notnull,unique"` -	// confirmed email address for this user, this should be unique -- only one email address registered per instance, multiple users per email are not supported -	Email string `bun:"default:null,unique,nullzero"` -	// The id of the local gtsmodel.Account entry for this user, if it exists (unconfirmed users don't have an account yet) -	AccountID string   `bun:"type:CHAR(26),unique,nullzero"` -	Account   *Account `bun:"rel:belongs-to"` -	// The encrypted password of this user, generated using https://pkg.go.dev/golang.org/x/crypto/bcrypt#GenerateFromPassword. A salt is included so we're safe against 🌈 tables -	EncryptedPassword string `bun:",notnull"` - -	/* -		USER METADATA -	*/ - -	// When was this user created? -	CreatedAt time.Time `bun:",nullzero,notnull,default:current_timestamp"` -	// From what IP was this user created? -	SignUpIP net.IP `bun:",nullzero"` -	// When was this user updated (eg., password changed, email address changed)? -	UpdatedAt time.Time `bun:",nullzero,notnull,default:current_timestamp"` -	// When did this user sign in for their current session? -	CurrentSignInAt time.Time `bun:",nullzero"` -	// What's the most recent IP of this user -	CurrentSignInIP net.IP `bun:",nullzero"` -	// When did this user last sign in? -	LastSignInAt time.Time `bun:",nullzero"` -	// What's the previous IP of this user? -	LastSignInIP net.IP `bun:",nullzero"` -	// How many times has this user signed in? -	SignInCount int -	// id of the user who invited this user (who let this guy in?) -	InviteID string `bun:"type:CHAR(26),nullzero"` -	// What languages does this user want to see? -	ChosenLanguages []string -	// What languages does this user not want to see? -	FilteredLanguages []string -	// In what timezone/locale is this user located? -	Locale string `bun:",nullzero"` -	// Which application id created this user? See gtsmodel.Application -	CreatedByApplicationID string       `bun:"type:CHAR(26),nullzero"` -	CreatedByApplication   *Application `bun:"rel:belongs-to"` -	// When did we last contact this user -	LastEmailedAt time.Time `bun:",nullzero"` - -	/* -		USER CONFIRMATION -	*/ - -	// What confirmation token did we send this user/what are we expecting back? -	ConfirmationToken string `bun:",nullzero"` -	// When did the user confirm their email address -	ConfirmedAt time.Time `bun:",nullzero"` -	// When did we send email confirmation to this user? -	ConfirmationSentAt time.Time `bun:",nullzero"` -	// Email address that hasn't yet been confirmed -	UnconfirmedEmail string `bun:",nullzero"` - -	/* -		ACL FLAGS -	*/ - -	// Is this user a moderator? -	Moderator bool -	// Is this user an admin? -	Admin bool -	// Is this user disabled from posting? -	Disabled bool -	// Has this user been approved by a moderator? -	Approved bool - -	/* -		USER SECURITY -	*/ - -	// The generated token that the user can use to reset their password -	ResetPasswordToken string `bun:",nullzero"` -	// When did we email the user their reset-password email? -	ResetPasswordSentAt time.Time `bun:",nullzero"` - -	EncryptedOTPSecret     string `bun:",nullzero"` -	EncryptedOTPSecretIv   string `bun:",nullzero"` -	EncryptedOTPSecretSalt string `bun:",nullzero"` -	OTPRequiredForLogin    bool -	OTPBackupCodes         []string -	ConsumedTimestamp      int -	RememberToken          string    `bun:",nullzero"` -	SignInToken            string    `bun:",nullzero"` -	SignInTokenSentAt      time.Time `bun:",nullzero"` -	WebauthnID             string    `bun:",nullzero"` +	ID                     string       `validate:"required,ulid" bun:"type:CHAR(26),pk,nullzero,notnull,unique"` // id of this item in the database +	CreatedAt              time.Time    `validate:"required" bun:",nullzero,notnull,default:current_timestamp"`   // when was item created +	UpdatedAt              time.Time    `validate:"required" bun:",nullzero,notnull,default:current_timestamp"`   // when was item last updated +	Email                  string       `validate:"required_with=ConfirmedAt" bun:",nullzero,notnull,unique"`     // confirmed email address for this user, this should be unique -- only one email address registered per instance, multiple users per email are not supported +	AccountID              string       `validate:"required,ulid" bun:"type:CHAR(26),nullzero,notnull,unique"`    // The id of the local gtsmodel.Account entry for this user. +	Account                *Account     `validate:"-" bun:"rel:belongs-to"`                                       // Pointer to the account of this user that corresponds to AccountID. +	EncryptedPassword      string       `validate:"required" bun:",nullzero,notnull"`                             // The encrypted password of this user, generated using https://pkg.go.dev/golang.org/x/crypto/bcrypt#GenerateFromPassword. A salt is included so we're safe against 🌈 tables. +	SignUpIP               net.IP       `validate:"-" bun:",nullzero"`                                            // From what IP was this user created? +	CurrentSignInAt        time.Time    `validate:"-" bun:",nullzero"`                                            // When did the user sign in with their current session. +	CurrentSignInIP        net.IP       `validate:"-" bun:",nullzero"`                                            // What's the most recent IP of this user +	LastSignInAt           time.Time    `validate:"-" bun:",nullzero"`                                            // When did this user last sign in? +	LastSignInIP           net.IP       `validate:"-" bun:",nullzero"`                                            // What's the previous IP of this user? +	SignInCount            int          `validate:"-" bun:",nullzero,notnull,default:0"`                          // How many times has this user signed in? +	InviteID               string       `validate:"ulid" bun:"type:CHAR(26),nullzero"`                            // id of the user who invited this user (who let this joker in?) +	ChosenLanguages        []string     `validate:"-" bun:",nullzero"`                                            // What languages does this user want to see? +	FilteredLanguages      []string     `validate:"-" bun:",nullzero"`                                            // What languages does this user not want to see? +	Locale                 string       `validate:"-" bun:",nullzero"`                                            // In what timezone/locale is this user located? +	CreatedByApplicationID string       `validate:"ulid" bun:"type:CHAR(26),nullzero,notnull"`                    // Which application id created this user? See gtsmodel.Application +	CreatedByApplication   *Application `validate:"-" bun:"rel:belongs-to"`                                       // Pointer to the application corresponding to createdbyapplicationID. +	LastEmailedAt          time.Time    `validate:"-" bun:",nullzero"`                                            // When was this user last contacted by email. +	ConfirmationToken      string       `validate:"required_with=ConfirmationSentAt" bun:",nullzero"`             // What confirmation token did we send this user/what are we expecting back? +	ConfirmationSentAt     time.Time    `validate:"required_with=ConfirmationToken" bun:",nullzero"`              // When did we send email confirmation to this user? +	ConfirmedAt            time.Time    `validate:"required_with=Email" bun:",nullzero"`                          // When did the user confirm their email address +	UnconfirmedEmail       string       `validate:"required_without=Email" bun:",nullzero"`                       // Email address that hasn't yet been confirmed +	Moderator              bool         `validate:"-" bun:",nullzero,notnull,default:false"`                      // Is this user a moderator? +	Admin                  bool         `validate:"-" bun:",nullzero,notnull,default:false"`                      // Is this user an admin? +	Disabled               bool         `validate:"-" bun:",nullzero,notnull,default:false"`                      // Is this user disabled from posting? +	Approved               bool         `validate:"-" bun:",nullzero,notnull,default:false"`                      // Has this user been approved by a moderator? +	ResetPasswordToken     string       `validate:"required_with=ResetPasswordSentAt" bun:",nullzero"`            // The generated token that the user can use to reset their password +	ResetPasswordSentAt    time.Time    `validate:"required_with=ResetPasswordToken" bun:",nullzero"`             // When did we email the user their reset-password email? + +	EncryptedOTPSecret     string    `validate:"-" bun:",nullzero"` +	EncryptedOTPSecretIv   string    `validate:"-" bun:",nullzero"` +	EncryptedOTPSecretSalt string    `validate:"-" bun:",nullzero"` +	OTPRequiredForLogin    bool      `validate:"-" bun:",nullzero"` +	OTPBackupCodes         []string  `validate:"-" bun:",nullzero"` +	ConsumedTimestamp      int       `validate:"-" bun:",nullzero"` +	RememberToken          string    `validate:"-" bun:",nullzero"` +	SignInToken            string    `validate:"-" bun:",nullzero"` +	SignInTokenSentAt      time.Time `validate:"-" bun:",nullzero"` +	WebauthnID             string    `validate:"-" bun:",nullzero"`  } | 
