handler

package
v0.0.0-...-1f8de80 Latest Latest
Warning

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

Go to latest
Published: May 13, 2024 License: MIT Imports: 31 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func NewTemplateFuncs

func NewTemplateFuncs(custom template.FuncMap) template.FuncMap

func TmplAdd

func TmplAdd(values ...any) (int, error)

func TmplAddf

func TmplAddf(values ...any) (float64, error)

func TmplDiv

func TmplDiv(values ...any) (int, error)

func TmplDivf

func TmplDivf(values ...any) (float64, error)

func TmplFormatDuration

func TmplFormatDuration(d time.Duration) string

func TmplFormatDurationStat

func TmplFormatDurationStat(d time.Duration) string

func TmplFormatSizeIEC

func TmplFormatSizeIEC(bytes uint64) string

func TmplFormatSizeSI

func TmplFormatSizeSI(bytes uint64) string

func TmplFormatTime

func TmplFormatTime(t time.Time, format string) string

func TmplHasPrefix

func TmplHasPrefix(value, prefix any) bool

func TmplHasString

func TmplHasString(haystack []string, value any) bool

func TmplHasSuffix

func TmplHasSuffix(value, suffix any) bool

func TmplInts

func TmplInts(start, end int) []int

func TmplJoin

func TmplJoin(strs []string, sep string) string

func TmplMap

func TmplMap(pairs ...any) (map[string]any, error)

func TmplMarshalJSON

func TmplMarshalJSON(value any) (string, error)

func TmplMax

func TmplMax(values ...any) (int, error)

func TmplMaxf

func TmplMaxf(values ...any) (float64, error)

func TmplMin

func TmplMin(values ...any) (int, error)

func TmplMinf

func TmplMinf(values ...any) (float64, error)

func TmplMod

func TmplMod(values ...any) (int, error)

func TmplMul

func TmplMul(values ...any) (int, error)

func TmplMulf

func TmplMulf(values ...any) (float64, error)

func TmplNeg

func TmplNeg(x any) (int, error)

func TmplNegf

func TmplNegf(x any) (float64, error)

func TmplQueryReplace

func TmplQueryReplace(q url.Values, pairs ...any) (template.URL, error)

func TmplQueryString

func TmplQueryString(q url.Values) template.URL

func TmplReplaceAll

func TmplReplaceAll(value any, old, new string) string

func TmplSlice

func TmplSlice(elements ...any) []any

func TmplSliceContains

func TmplSliceContains(haystack []any, needle any) bool

func TmplStatusText

func TmplStatusText(code int) string

func TmplSub

func TmplSub(values ...any) (int, error)

func TmplSubf

func TmplSubf(values ...any) (float64, error)

func TmplTimeSince

func TmplTimeSince(t time.Time) time.Duration

func TmplToStrings

func TmplToStrings(value any) ([]string, error)

func TmplUnescapeHTML

func TmplUnescapeHTML(s string) template.HTML

func TmplUnescapeJS

func TmplUnescapeJS(s string) template.JS

Types

type AccountReader

type AccountReader interface {
	account.Reader

	FindRoleByName(ctx context.Context, name string) (*account.Role, error)
	FindRoles(ctx context.Context, sortTopID string) ([]*account.Role, int, error)
	FindRolesPageBySearch(ctx context.Context, page, size int, sortTopID string, sorts []string, search string) ([]*account.Role, int, error)

	CountUsersByRoleID(ctx context.Context, roleID string) (int, error)
	FindUsersPageBySearch(ctx context.Context, page, size int, sortTopID string, sorts []string, search string) ([]*account.User, int, error)
}

type AppData

type AppData struct {
	Name        string
	ShortName   string
	Description string
	ThemeColour string
}

type CSRF

type CSRF struct {
	Ctx context.Context
}

func (CSRF) Token

func (c CSRF) Token() string

type Form

type Form struct {
	url.Values
}

func (Form) GetAll

func (f Form) GetAll(key string) []string

func (Form) GetAllOr

func (f Form) GetAllOr(key string, fallback any) ([]string, error)

func (Form) GetOr

func (f Form) GetOr(key string, fallback any) string

type Handler

type Handler struct {
	*Tenant

	Sessions *session.Manager
	// contains filtered or unexported fields
}

func New

func New(tenant *Tenant) *Handler

func (*Handler) AttachContext

func (h *Handler) AttachContext(next http.HandlerFunc) http.HandlerFunc

func (*Handler) AttachContextLogger

func (h *Handler) AttachContextLogger(next http.HandlerFunc) http.HandlerFunc

func (*Handler) Config

func (h *Handler) Config(ctx context.Context) *system.Config

func (*Handler) Logger

func (h *Handler) Logger(ctx context.Context) *slog.Logger

func (*Handler) Passport

func (h *Handler) Passport(ctx context.Context) guard.Passport

func (*Handler) PassportByEmail

func (h *Handler) PassportByEmail(ctx context.Context, email string) (guard.Passport, error)

func (*Handler) PassportByUser

func (h *Handler) PassportByUser(ctx context.Context, user *account.User) guard.Passport

func (*Handler) RenewSession

func (h *Handler) RenewSession(ctx context.Context) ([]byte, error)

func (*Handler) SendEmail

func (h *Handler) SendEmail(ctx context.Context, templateFiles fs.FS, templatePaths []string, funcs template.FuncMap, from, to, view string, vars Vars) error

func (*Handler) SendSMS

func (h *Handler) SendSMS(ctx context.Context, to, body string) error

func (*Handler) SendTOTPSMS

func (h *Handler) SendTOTPSMS(email, tel string) error

func (*Handler) Template

func (h *Handler) Template(files fs.FS, patterns []string, funcs template.FuncMap, name string) *template.Template

func (*Handler) User

func (h *Handler) User(ctx context.Context) *account.User

type Query

type Query struct {
	url.Values
}

func (Query) GetAll

func (q Query) GetAll(key string) []string

func (Query) GetAllOr

func (q Query) GetAllOr(key string, fallback any) ([]string, error)

func (Query) GetOr

func (q Query) GetOr(key string, fallback any) string

func (Query) Replace

func (q Query) Replace(pairs ...any) (template.URL, error)

func (Query) String

func (q Query) String() template.URL

type Renderer

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

func NewRenderer

func NewRenderer(h *Handler, templateFiles fs.FS, templatePaths TemplatePathsFunc, funcs template.FuncMap, process TemplateProcessFunc) *Renderer

func (*Renderer) ErrorView

func (rn *Renderer) ErrorView(w http.ResponseWriter, r *http.Request, msg string, err error, view string, vars Vars)

func (*Renderer) ErrorViewFunc

func (rn *Renderer) ErrorViewFunc(w http.ResponseWriter, r *http.Request, msg string, err error, view string, dataFunc ViewDataFunc)

func (*Renderer) HandlerFunc

func (rn *Renderer) HandlerFunc(view string) http.HandlerFunc

func (*Renderer) SetViewVars

func (rn *Renderer) SetViewVars(name string, vars ViewVarsFunc)

func (*Renderer) View

func (rn *Renderer) View(w http.ResponseWriter, r *http.Request, status int, view string, vars Vars)

func (*Renderer) ViewFunc

func (rn *Renderer) ViewFunc(w http.ResponseWriter, r *http.Request, status int, view string, dataFunc ViewDataFunc)

type Repo

type Repo struct {
	Account AccountReader
	System  SystemReader
	Web     WebReadWriter
}

type SessionData

type SessionData struct {
	// General session keys
	Flash          []string
	FlashImportant []string
	FlashError     []string
	Redirect       string
	HighlightID    string

	// Account session keys
	UserID                   string
	Email                    string
	TOTPMethod               string
	HasActivatedTOTP         bool
	IsAwaitingTOTP           bool
	IsSignedIn               bool
	KnownPasswordBreachCount int
}

type State

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

func (*State) Get

func (s *State) Get(key string) any

func (*State) Set

func (s *State) Set(key string, value any)

func (*State) Store

func (s *State) Store(key string, value any) bool

type Svc

type Svc struct {
	Account *account.Service
	System  *system.Service
}

type SystemReader

type SystemReader system.Reader

type TemplatePathsFunc

type TemplatePathsFunc func(view string) []string

type TemplateProcessFunc

type TemplateProcessFunc func(w http.ResponseWriter, r *http.Request, template *bytes.Buffer) []byte

type Tenant

type Tenant struct {
	Key      string
	Kind     string
	Scheme   string
	Host     string
	Hosts    map[string]string
	Data     string
	Dev      bool
	Insecure bool
	Proxies  []string
	Broker   event.Broker
	Email    smtp.Mailer
	Logger   *slog.Logger
	Metrics  *expvar.Map

	Svc       Svc
	Repo      Repo
	SuperRole *account.Role
}

type URL

type URL struct {
	Scheme string
	Host   string
	Path   template.URL
	Query  Query
}

type Vars

type Vars map[string]any

func (Vars) Merge

func (v Vars) Merge(rhs Vars) Vars

type ViewData

type ViewData struct {
	View         string
	Status       int
	CSRF         CSRF
	ErrorMessage string
	Errors       errsx.Map
	Now          time.Time
	Form         Form
	URL          URL
	App          AppData
	Session      SessionData
	Config       *system.Config
	User         *account.User
	Passport     guard.Passport
	Props        map[string]any
	State        *State
	Vars         Vars
}

func (ViewData) WithProps

func (v ViewData) WithProps(pairs ...any) (ViewData, error)

type ViewDataFunc

type ViewDataFunc func(data *ViewData)

type ViewVarsFunc

type ViewVarsFunc func(r *http.Request) (Vars, error)

type WebReadWriter

type WebReadWriter interface {
	session.ReadWriter

	AddEmailVerificationToken(ctx context.Context, email string, ttl time.Duration) (string, error)
	FindEmailVerificationTokenEmail(ctx context.Context, token string) (string, error)
	ConsumeEmailVerificationToken(ctx context.Context, token string) error

	AddResetPasswordToken(ctx context.Context, email string, ttl time.Duration) (string, error)
	FindResetPasswordTokenEmail(ctx context.Context, token string) (string, error)
	ConsumeResetPasswordToken(ctx context.Context, token string) error

	AddSignInMagicLinkToken(ctx context.Context, email string, ttl time.Duration) (string, error)
	FindSignInMagicLinkTokenEmail(ctx context.Context, token string) (string, error)
	ConsumeSignInMagicLinkToken(ctx context.Context, token string) error

	AddTOTPResetVerifyToken(ctx context.Context, email string, ttl time.Duration) (string, error)
	FindTOTPResetVerifyTokenEmail(ctx context.Context, token string) (string, error)
	ConsumeTOTPResetVerifyToken(ctx context.Context, token string) error

	AddResetTOTPToken(ctx context.Context, email string, ttl time.Duration) (string, error)
	FindResetTOTPTokenEmail(ctx context.Context, token string) (string, error)
	ConsumeResetTOTPToken(ctx context.Context, token string) error
}

Jump to

Keyboard shortcuts

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