Documentation
¶
Index ¶
- type BanInput
- type BanStatus
- type Device
- type FollowRequest
- type Follower
- type Input
- type Member
- type PgMemberStorage
- func (s *PgMemberStorage) Ban(ctx context.Context, member *Member, input *BanInput) (err error)
- func (s *PgMemberStorage) CacheNicknames(ctx context.Context) error
- func (s *PgMemberStorage) Check(c context.Context, email, nickname string) (bool, error)
- func (s *PgMemberStorage) CreateSession(ctx context.Context, m *Member) (t string, err error)
- func (s *PgMemberStorage) Delete(ctx context.Context, member *Member) error
- func (s *PgMemberStorage) GetID(ctx context.Context, credential string) (id int, err error)
- func (s *PgMemberStorage) GetNicknames() []string
- func (s *PgMemberStorage) GetPassHash(email, login string) (string, error)
- func (s *PgMemberStorage) HasRole(ctx context.Context, name, role string, exact bool) bool
- func (s *PgMemberStorage) Read(ctx context.Context, value string, keyNames ...string) (*Member, error)
- func (s *PgMemberStorage) RequestFollow(ctx context.Context, fr *FollowRequest) error
- func (s *PgMemberStorage) Save(ctx context.Context, member *Member) error
- func (s *PgMemberStorage) Unban(ctx context.Context, member *Member) error
- func (s *PgMemberStorage) Update(ctx context.Context, member *Member) error
- type Storer
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type BanInput ¶ added in v0.9.0
type BanInput struct {
Reason string `json:"reason" db:"reason" validate:"required" example:"spam"`
Ends time.Time `json:"ends" db:"ends" validate:"required" example:"2038-01-16T00:00:00Z"`
CanAppeal bool `json:"canAppeal" db:"can_appeal" validate:"required" example:"true"`
// usage: https://pkg.go.dev/net#ParseCIDR
Mask *net.IPNet `json:"mask" db:"mask"`
}
BanInput is used to ban a member
type BanStatus ¶ added in v0.7.0
type BanStatus struct {
BanInput
MemberUUID uuid.UUID `json:"memberUUID" db:"member_uuid"`
// Occurrence is the n-th time a ban has been issued
Occurrence int16 `json:"occurrence" db:"occurrence"`
Started time.Time `json:"started" db:"started"`
}
BanStatus is used to retrieve the ban details
type Device ¶ added in v0.7.0
type Device struct {
FriendlyName sql.NullString `json:"friendlyName,omitempty" db:"friendly_name"`
// KnownIPs is used to improve the security in case of logging in from unknown locations
KnownIPs []net.IP `json:"knownIPs,omitempty" db:"known_ips"`
LastLogin time.Time `json:"lastLogin,omitempty" db:"last_login"`
BanStatus BanStatus `json:"banStatus,omitempty" db:"ban_status"`
ID uuid.UUID `json:"id" db:"id,unique,notnull"`
}
Member holds the core information about a member
type FollowRequest ¶
type FollowRequest struct {
ID int64 `json:"id" db:"id"`
ActorID string `json:"actor_id" db:"actor_id"`
FollowsID string `json:"follows_id" db:"follows_id"`
}
Member holds the core information about a member
type Follower ¶
type Follower struct {
ID uint32 `json:"id" db:"id"`
Follower uint32 `json:"follower" db:"follower"`
Followee uint32 `json:"followee" db:"followee"`
}
Follower represents a follower-followee relationship
type Input ¶
type Input struct {
MemberName string `json:"membername"`
Email string `json:"email"`
Password string `json:"password"`
}
Input holds the information required to create a new member account
type Member ¶
type Member struct {
ID int `json:"-" db:"id"`
UUID uuid.UUID `json:"uuid,omitempty" db:"uuid"`
PassHash string `json:"-" db:"passhash"`
// MemberName != webfinger
MemberName string `json:"memberName" db:"nick,unique" validate:"required,alphanumunicode,min=3,max=30" example:"lain"`
DisplayName sql.NullString `json:"displayName,omitempty" db:"display_name" example:"Lain Iwakura"`
Email string `json:"email" db:"email" validate:"required,email" example:"lain@wired.jp"`
Bio sql.NullString `json:"bio,omitempty" db:"bio" example:"Wherever you go, everyone is connected."`
Active bool `json:"active" db:"active" example:"true"`
Roles pq.StringArray `json:"roles,omitempty" db:"roles" example:"[\"admin\", \"moderator\"]"`
RegTimestamp time.Time `json:"regdate" db:"reg_timestamp" example:"2020-01-01T00:00:00Z"`
ProfilePicID sql.NullInt64 `json:"-" db:"profilepic_id"`
ProfilePicSource string `json:"profile_pic,omitempty" db:"-" example:"/static/img/profile/lain.jpg"`
Homepage sql.NullString `json:"homepage,omitempty" db:"homepage" example:"https://webnavi.neocities.org/"`
// doomed fields, will be removed by arbitrary user-defined fields
IRC sql.NullString `json:"irc,omitempty" db:"irc"`
XMPP sql.NullString `json:"xmpp,omitempty" db:"xmpp"`
Matrix sql.NullString `json:"matrix,omitempty" db:"matrix"`
Visibility string `json:"visibility" db:"visibility" example:"followers_only"`
FollowingURI string `json:"following_uri" db:"following_uri"` // URI for getting the following list of this account
FollowersURI string `json:"followers_uri" db:"followers_uri"` // URI for getting the followers list of this account
SessionTimeout sql.NullInt64 `json:"-" db:"session_timeout"`
PublicKeyPem string `jsonld:"publicKeyPem,omitempty" json:"-" db:"public_key_pem"`
}
Member holds the core information about a member
type PgMemberStorage ¶
type PgMemberStorage struct {
// contains filtered or unexported fields
}
Member holds the core information about a member
func NewSQLStorage ¶
func (*PgMemberStorage) CacheNicknames ¶
func (s *PgMemberStorage) CacheNicknames(ctx context.Context) error
func (*PgMemberStorage) Check ¶ added in v0.7.0
Check checks if a member with the given email or nickname already exists
func (*PgMemberStorage) CreateSession ¶
CreateSession creates a JWT token for the member
func (*PgMemberStorage) Delete ¶
func (s *PgMemberStorage) Delete(ctx context.Context, member *Member) error
func (*PgMemberStorage) GetID ¶
GetID retrieves the ID required for JWT on the basis of one of the credentials, i.e. email or login
func (*PgMemberStorage) GetNicknames ¶
func (s *PgMemberStorage) GetNicknames() []string
func (*PgMemberStorage) GetPassHash ¶
func (s *PgMemberStorage) GetPassHash(email, login string) (string, error)
GetPassHash retrieves the password hash required for JWT on the basis of one of the credentials, i.e. email or login
func (*PgMemberStorage) HasRole ¶ added in v0.9.0
if exact is true, the role must match exactly otherwise we can match moderators with admins on tasks that can be performed by both
func (*PgMemberStorage) RequestFollow ¶
func (s *PgMemberStorage) RequestFollow(ctx context.Context, fr *FollowRequest) error
RequestFollow creates a follow request in the local database upon the reception of a request into the inbox
func (*PgMemberStorage) Save ¶
func (s *PgMemberStorage) Save(ctx context.Context, member *Member) error
type Storer ¶ added in v0.9.0
type Storer interface {
Save(ctx context.Context, member *Member) error
Read(ctx context.Context, key string, keyNames ...string) (*Member, error)
HasRole(ctx context.Context, name, role string, exact bool) bool
Ban(ctx context.Context, member *Member, input *BanInput) error
Unban(ctx context.Context, member *Member) error
// Check checks if a member with the given email or nickname already exists
Check(ctx context.Context, email, nickname string) (bool, error)
Update(ctx context.Context, member *Member) error
Delete(ctx context.Context, member *Member) error
GetID(ctx context.Context, key string) (int, error)
GetPassHash(email, login string) (string, error)
CreateSession(ctx context.Context, member *Member) (string, error)
RequestFollow(ctx context.Context, fr *FollowRequest) error
}
Member holds the core information about a member