Update to new goprogram version
This commit is contained in:
parent
7bd9570bc0
commit
873fdcd5c2
106 changed files with 478 additions and 825 deletions
|
|
@ -10,7 +10,7 @@ import (
|
|||
|
||||
type API struct {
|
||||
component.Base
|
||||
Dependencies struct {
|
||||
dependencies struct {
|
||||
Auth *auth.Auth
|
||||
}
|
||||
}
|
||||
|
|
@ -38,12 +38,12 @@ type AuthInfo struct {
|
|||
func (a *API) HandleRoute(ctx context.Context, path string) (http.Handler, error) {
|
||||
return &Handler[AuthInfo]{
|
||||
Config: a.Config,
|
||||
Auth: a.Dependencies.Auth,
|
||||
Auth: a.dependencies.Auth,
|
||||
|
||||
Methods: []string{"GET"},
|
||||
|
||||
Handler: func(s string, r *http.Request) (ai AuthInfo, err error) {
|
||||
session, _, err := a.Dependencies.Auth.SessionOf(r)
|
||||
session, _, err := a.dependencies.Auth.SessionOf(r)
|
||||
ai.User = session.Username()
|
||||
ai.Token = session.Token
|
||||
return
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ import (
|
|||
|
||||
type Auth struct {
|
||||
component.Base
|
||||
Dependencies struct {
|
||||
dependencies struct {
|
||||
SQL *sql.SQL
|
||||
UserDeleteHooks []component.UserDeleteHook
|
||||
Templating *templating.Templating
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ import (
|
|||
|
||||
type Next struct {
|
||||
component.Base
|
||||
Dependencies struct {
|
||||
dependencies struct {
|
||||
Auth *auth.Auth
|
||||
Policy *policy.Policy
|
||||
Instances *instances.Instances
|
||||
|
|
@ -31,13 +31,13 @@ var (
|
|||
func (next *Next) Routes() component.Routes {
|
||||
return component.Routes{
|
||||
Prefix: "/next/",
|
||||
Decorator: next.Dependencies.Auth.Require(true, scopes.ScopeUserValid, nil),
|
||||
Decorator: next.dependencies.Auth.Require(true, scopes.ScopeUserValid, nil),
|
||||
}
|
||||
}
|
||||
|
||||
// Next returns a url that will forward authorized users to the given slug and path
|
||||
func (next *Next) Next(context context.Context, slug, path string) (string, error) {
|
||||
wisski, err := next.Dependencies.Instances.WissKI(context, slug)
|
||||
wisski, err := next.dependencies.Instances.WissKI(context, slug)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
|
@ -62,7 +62,7 @@ func (next *Next) getInstance(r *http.Request) (wisski *wisski.WissKI, path stri
|
|||
}
|
||||
|
||||
// fetch the instance from the database
|
||||
wisski, err = next.Dependencies.Instances.WissKI(r.Context(), slug)
|
||||
wisski, err = next.dependencies.Instances.WissKI(r.Context(), slug)
|
||||
if err != nil {
|
||||
return nil, "", err
|
||||
}
|
||||
|
|
@ -80,13 +80,13 @@ func (next *Next) HandleRoute(ctx context.Context, path string) (http.Handler, e
|
|||
}
|
||||
|
||||
// get the user
|
||||
user, _, err := next.Dependencies.Auth.SessionOf(r)
|
||||
user, _, err := next.dependencies.Auth.SessionOf(r)
|
||||
if err != nil {
|
||||
return "", 0, err
|
||||
}
|
||||
|
||||
// check if they have a grant
|
||||
grant, err := next.Dependencies.Policy.Has(r.Context(), user.User.User, instance.Slug)
|
||||
grant, err := next.dependencies.Policy.Has(r.Context(), user.User.User, instance.Slug)
|
||||
if err == policy.ErrNoAccess {
|
||||
return "", 0, httpx.ErrForbidden
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ import (
|
|||
|
||||
type UserPanel struct {
|
||||
component.Base
|
||||
Dependencies struct {
|
||||
dependencies struct {
|
||||
Auth *auth.Auth
|
||||
Templating *templating.Templating
|
||||
Policy *policy.Policy
|
||||
|
|
@ -42,14 +42,14 @@ func (panel *UserPanel) Routes() component.Routes {
|
|||
return component.Routes{
|
||||
Prefix: "/user/",
|
||||
CSRF: true,
|
||||
Decorator: panel.Dependencies.Auth.Require(false, scopes.ScopeUserValid, nil),
|
||||
Decorator: panel.dependencies.Auth.Require(false, scopes.ScopeUserValid, nil),
|
||||
}
|
||||
}
|
||||
|
||||
func (panel *UserPanel) Menu(r *http.Request) []component.MenuItem {
|
||||
title := "Login"
|
||||
|
||||
user, err := panel.Dependencies.Auth.UserOfSession(r)
|
||||
user, err := panel.dependencies.Auth.UserOfSession(r)
|
||||
if user != nil && err == nil {
|
||||
title = user.User.User
|
||||
}
|
||||
|
|
@ -137,7 +137,7 @@ func (panel *UserPanel) HandleRoute(ctx context.Context, route string) (http.Han
|
|||
}
|
||||
|
||||
// ensure that the user is logged in!
|
||||
return panel.Dependencies.Auth.Protect(router, false, scopes.ScopeUserValid, nil), nil
|
||||
return panel.dependencies.Auth.Protect(router, false, scopes.ScopeUserValid, nil), nil
|
||||
}
|
||||
|
||||
type userFormContext struct {
|
||||
|
|
@ -158,7 +158,7 @@ func (panel *UserPanel) UserFormContext(tpl *templating.Template[userFormContext
|
|||
|
||||
return func(ctx httpx.FormContext, r *http.Request) any {
|
||||
uctx := userFormContext{FormContext: ctx}
|
||||
if user, err := panel.Dependencies.Auth.UserOfSession(r); err == nil {
|
||||
if user, err := panel.dependencies.Auth.UserOfSession(r); err == nil {
|
||||
uctx.User = &user.User
|
||||
}
|
||||
return tpl.Context(r, uctx, funcs...)
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ var (
|
|||
)
|
||||
|
||||
func (panel *UserPanel) routePassword(ctx context.Context) http.Handler {
|
||||
tpl := passwordTemplate.Prepare(panel.Dependencies.Templating)
|
||||
tpl := passwordTemplate.Prepare(panel.dependencies.Templating)
|
||||
|
||||
return &httpx.Form[struct{}]{
|
||||
Fields: []field.Field{
|
||||
|
|
@ -53,7 +53,7 @@ func (panel *UserPanel) routePassword(ctx context.Context) http.Handler {
|
|||
return struct{}{}, errPasswordsNotIdentical
|
||||
}
|
||||
|
||||
user, err := panel.Dependencies.Auth.UserOfSession(r)
|
||||
user, err := panel.dependencies.Auth.UserOfSession(r)
|
||||
if err != nil {
|
||||
return struct{}{}, err
|
||||
}
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ type SSHTemplateContext struct {
|
|||
|
||||
func (panel *UserPanel) sshRoute(ctx context.Context) http.Handler {
|
||||
tpl := sshTemplate.Prepare(
|
||||
panel.Dependencies.Templating,
|
||||
panel.dependencies.Templating,
|
||||
templating.Crumbs(
|
||||
menuUser,
|
||||
menuSSH,
|
||||
|
|
@ -57,7 +57,7 @@ func (panel *UserPanel) sshRoute(ctx context.Context) http.Handler {
|
|||
)
|
||||
|
||||
return tpl.HTMLHandler(func(r *http.Request) (sc SSHTemplateContext, err error) {
|
||||
user, err := panel.Dependencies.Auth.UserOfSession(r)
|
||||
user, err := panel.dependencies.Auth.UserOfSession(r)
|
||||
if err != nil {
|
||||
return sc, err
|
||||
}
|
||||
|
|
@ -66,7 +66,7 @@ func (panel *UserPanel) sshRoute(ctx context.Context) http.Handler {
|
|||
sc.Port = panel.Config.Listen.SSHPort
|
||||
|
||||
// pick the first domain that the user has access to as an example
|
||||
grants, err := panel.Dependencies.Policy.User(r.Context(), user.User.User)
|
||||
grants, err := panel.dependencies.Policy.User(r.Context(), user.User.User)
|
||||
if err != nil && len(grants) > 0 {
|
||||
sc.Slug = grants[0].Slug
|
||||
} else {
|
||||
|
|
@ -74,12 +74,12 @@ func (panel *UserPanel) sshRoute(ctx context.Context) http.Handler {
|
|||
}
|
||||
sc.Hostname = panel.Config.HTTP.HostFromSlug(sc.Slug)
|
||||
|
||||
sc.Keys, err = panel.Dependencies.Keys.Keys(r.Context(), user.User.User)
|
||||
sc.Keys, err = panel.dependencies.Keys.Keys(r.Context(), user.User.User)
|
||||
if err != nil {
|
||||
return sc, err
|
||||
}
|
||||
|
||||
sc.Services = panel.Dependencies.SSH2.Intercepts()
|
||||
sc.Services = panel.dependencies.SSH2.Intercepts()
|
||||
|
||||
return sc, nil
|
||||
})
|
||||
|
|
@ -100,7 +100,7 @@ func (panel *UserPanel) sshDeleteRoute(ctx context.Context) http.Handler {
|
|||
httpx.HTMLInterceptor.Fallback.ServeHTTP(w, r)
|
||||
return
|
||||
}
|
||||
user, err := panel.Dependencies.Auth.UserOfSession(r)
|
||||
user, err := panel.dependencies.Auth.UserOfSession(r)
|
||||
if err != nil {
|
||||
logger.Err(err).Str("action", "delete ssh key").Msg("failed to get current user")
|
||||
httpx.HTMLInterceptor.Fallback.ServeHTTP(w, r)
|
||||
|
|
@ -114,7 +114,7 @@ func (panel *UserPanel) sshDeleteRoute(ctx context.Context) http.Handler {
|
|||
return
|
||||
}
|
||||
|
||||
if err := panel.Dependencies.Keys.Remove(r.Context(), user.User.User, key); err != nil {
|
||||
if err := panel.dependencies.Keys.Remove(r.Context(), user.User.User, key); err != nil {
|
||||
logger.Err(err).Str("action", "delete ssh key").Msg("failed to delete key")
|
||||
httpx.HTMLInterceptor.Fallback.ServeHTTP(w, r)
|
||||
return
|
||||
|
|
@ -140,7 +140,7 @@ type addKeyResult struct {
|
|||
|
||||
func (panel *UserPanel) sshAddRoute(ctx context.Context) http.Handler {
|
||||
tpl := sshAddTemplate.Prepare(
|
||||
panel.Dependencies.Templating,
|
||||
panel.dependencies.Templating,
|
||||
templating.Crumbs(
|
||||
menuUser,
|
||||
menuSSH,
|
||||
|
|
@ -159,7 +159,7 @@ func (panel *UserPanel) sshAddRoute(ctx context.Context) http.Handler {
|
|||
RenderTemplateContext: templating.FormTemplateContext(tpl),
|
||||
|
||||
Validate: func(r *http.Request, values map[string]string) (ak addKeyResult, err error) {
|
||||
ak.User, err = panel.Dependencies.Auth.UserOfSession(r)
|
||||
ak.User, err = panel.dependencies.Auth.UserOfSession(r)
|
||||
if err != nil || ak.User == nil {
|
||||
return ak, errInvalidUser
|
||||
}
|
||||
|
|
@ -181,7 +181,7 @@ func (panel *UserPanel) sshAddRoute(ctx context.Context) http.Handler {
|
|||
|
||||
RenderSuccess: func(ak addKeyResult, values map[string]string, w http.ResponseWriter, r *http.Request) error {
|
||||
// add the key to the user
|
||||
if err := panel.Dependencies.Keys.Add(r.Context(), ak.User.User.User, ak.Comment, ak.Key); err != nil {
|
||||
if err := panel.dependencies.Keys.Add(r.Context(), ak.User.User.User, ak.Comment, ak.Key); err != nil {
|
||||
return errAddKey
|
||||
}
|
||||
// everything went fine, redirect the user back to the user page!
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ type TokenTemplateContext struct {
|
|||
|
||||
func (panel *UserPanel) tokensRoute(ctx context.Context) http.Handler {
|
||||
tpl := tokensTemplate.Prepare(
|
||||
panel.Dependencies.Templating,
|
||||
panel.dependencies.Templating,
|
||||
templating.Crumbs(
|
||||
menuUser,
|
||||
menuTokens,
|
||||
|
|
@ -46,7 +46,7 @@ func (panel *UserPanel) tokensRoute(ctx context.Context) http.Handler {
|
|||
|
||||
return tpl.HTMLHandler(func(r *http.Request) (tc TokenTemplateContext, err error) {
|
||||
// list the user
|
||||
user, err := panel.Dependencies.Auth.UserOfSession(r)
|
||||
user, err := panel.dependencies.Auth.UserOfSession(r)
|
||||
if err != nil || user == nil {
|
||||
return tc, err
|
||||
}
|
||||
|
|
@ -54,7 +54,7 @@ func (panel *UserPanel) tokensRoute(ctx context.Context) http.Handler {
|
|||
tc.Domain = template.URL(panel.Config.HTTP.JoinPath().String())
|
||||
|
||||
// get the tokens
|
||||
tc.Tokens, err = panel.Dependencies.Tokens.Tokens(r.Context(), user.User.User)
|
||||
tc.Tokens, err = panel.dependencies.Tokens.Tokens(r.Context(), user.User.User)
|
||||
return tc, err
|
||||
})
|
||||
}
|
||||
|
|
@ -67,7 +67,7 @@ func (panel *UserPanel) tokensDeleteRoute(ctx context.Context) http.Handler {
|
|||
httpx.HTMLInterceptor.Fallback.ServeHTTP(w, r)
|
||||
return
|
||||
}
|
||||
user, err := panel.Dependencies.Auth.UserOfSession(r)
|
||||
user, err := panel.dependencies.Auth.UserOfSession(r)
|
||||
if err != nil {
|
||||
logger.Err(err).Str("action", "delete token").Msg("failed to get current user")
|
||||
httpx.HTMLInterceptor.Fallback.ServeHTTP(w, r)
|
||||
|
|
@ -81,7 +81,7 @@ func (panel *UserPanel) tokensDeleteRoute(ctx context.Context) http.Handler {
|
|||
return
|
||||
}
|
||||
|
||||
if err := panel.Dependencies.Tokens.Remove(r.Context(), user.User.User, id); err != nil {
|
||||
if err := panel.dependencies.Tokens.Remove(r.Context(), user.User.User, id); err != nil {
|
||||
logger.Err(err).Str("action", "delete token").Msg("failed to delete token")
|
||||
httpx.HTMLInterceptor.Fallback.ServeHTTP(w, r)
|
||||
return
|
||||
|
|
@ -122,7 +122,7 @@ type TokenCreateContext struct {
|
|||
|
||||
func (panel *UserPanel) tokensAddRoute(ctx context.Context) http.Handler {
|
||||
tplForm := tokensAddTemplate.Prepare(
|
||||
panel.Dependencies.Templating,
|
||||
panel.dependencies.Templating,
|
||||
templating.Crumbs(
|
||||
menuUser,
|
||||
menuTokens,
|
||||
|
|
@ -131,7 +131,7 @@ func (panel *UserPanel) tokensAddRoute(ctx context.Context) http.Handler {
|
|||
)
|
||||
|
||||
tplDone := tokenCreateTemplate.Prepare(
|
||||
panel.Dependencies.Templating,
|
||||
panel.dependencies.Templating,
|
||||
templating.Crumbs(
|
||||
menuUser,
|
||||
menuTokens,
|
||||
|
|
@ -149,7 +149,7 @@ func (panel *UserPanel) tokensAddRoute(ctx context.Context) http.Handler {
|
|||
RenderTemplateContext: templating.FormTemplateContext(tplForm),
|
||||
|
||||
Validate: func(r *http.Request, values map[string]string) (at addTokenResult, err error) {
|
||||
at.User, err = panel.Dependencies.Auth.UserOfSession(r)
|
||||
at.User, err = panel.dependencies.Auth.UserOfSession(r)
|
||||
if err != nil || at.User == nil {
|
||||
return at, errInvalidUser
|
||||
}
|
||||
|
|
@ -166,7 +166,7 @@ func (panel *UserPanel) tokensAddRoute(ctx context.Context) http.Handler {
|
|||
|
||||
RenderSuccess: func(at addTokenResult, values map[string]string, w http.ResponseWriter, r *http.Request) error {
|
||||
// add the key to the user
|
||||
tok, err := panel.Dependencies.Tokens.Add(r.Context(), at.User.User.User, at.Description, at.Scopes)
|
||||
tok, err := panel.dependencies.Tokens.Add(r.Context(), at.User.User.User, at.Description, at.Scopes)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ var totpEnable = templating.Parse[userFormContext](
|
|||
)
|
||||
|
||||
func (panel *UserPanel) routeTOTPEnable(ctx context.Context) http.Handler {
|
||||
tpl := totpEnable.Prepare(panel.Dependencies.Templating)
|
||||
tpl := totpEnable.Prepare(panel.dependencies.Templating)
|
||||
|
||||
return &httpx.Form[struct{}]{
|
||||
Fields: []field.Field{
|
||||
|
|
@ -33,7 +33,7 @@ func (panel *UserPanel) routeTOTPEnable(ctx context.Context) http.Handler {
|
|||
FieldTemplate: field.PureCSSFieldTemplate,
|
||||
|
||||
SkipForm: func(r *http.Request) (data struct{}, skip bool) {
|
||||
user, err := panel.Dependencies.Auth.UserOfSession(r)
|
||||
user, err := panel.dependencies.Auth.UserOfSession(r)
|
||||
return struct{}{}, err == nil && user != nil && user.IsTOTPEnabled()
|
||||
},
|
||||
|
||||
|
|
@ -43,7 +43,7 @@ func (panel *UserPanel) routeTOTPEnable(ctx context.Context) http.Handler {
|
|||
Validate: func(r *http.Request, values map[string]string) (struct{}, error) {
|
||||
password := values["password"]
|
||||
|
||||
user, err := panel.Dependencies.Auth.UserOfSession(r)
|
||||
user, err := panel.dependencies.Auth.UserOfSession(r)
|
||||
if err != nil {
|
||||
return struct{}{}, err
|
||||
}
|
||||
|
|
@ -90,7 +90,7 @@ type totpEnrollContext struct {
|
|||
|
||||
func (panel *UserPanel) routeTOTPEnroll(ctx context.Context) http.Handler {
|
||||
tpl := totpEnrollTemplate.Prepare(
|
||||
panel.Dependencies.Templating,
|
||||
panel.dependencies.Templating,
|
||||
templating.Crumbs(
|
||||
menuUser,
|
||||
menuTOTPEnable,
|
||||
|
|
@ -105,11 +105,11 @@ func (panel *UserPanel) routeTOTPEnroll(ctx context.Context) http.Handler {
|
|||
FieldTemplate: field.PureCSSFieldTemplate,
|
||||
|
||||
SkipForm: func(r *http.Request) (data struct{}, skip bool) {
|
||||
user, err := panel.Dependencies.Auth.UserOfSession(r)
|
||||
user, err := panel.dependencies.Auth.UserOfSession(r)
|
||||
return struct{}{}, err == nil && user != nil && user.IsTOTPEnabled()
|
||||
},
|
||||
RenderTemplateContext: func(context httpx.FormContext, r *http.Request) any {
|
||||
user, err := panel.Dependencies.Auth.UserOfSession(r)
|
||||
user, err := panel.dependencies.Auth.UserOfSession(r)
|
||||
|
||||
ctx := totpEnrollContext{
|
||||
userFormContext: userFormContext{
|
||||
|
|
@ -136,7 +136,7 @@ func (panel *UserPanel) routeTOTPEnroll(ctx context.Context) http.Handler {
|
|||
Validate: func(r *http.Request, values map[string]string) (struct{}, error) {
|
||||
password, otp := values["password"], values["otp"]
|
||||
|
||||
user, err := panel.Dependencies.Auth.UserOfSession(r)
|
||||
user, err := panel.dependencies.Auth.UserOfSession(r)
|
||||
if err != nil {
|
||||
return struct{}{}, err
|
||||
}
|
||||
|
|
@ -174,7 +174,7 @@ var totpDisableTemplate = templating.Parse[userFormContext](
|
|||
)
|
||||
|
||||
func (panel *UserPanel) routeTOTPDisable(ctx context.Context) http.Handler {
|
||||
tpl := totpDisableTemplate.Prepare(panel.Dependencies.Templating)
|
||||
tpl := totpDisableTemplate.Prepare(panel.dependencies.Templating)
|
||||
|
||||
return &httpx.Form[struct{}]{
|
||||
Fields: []field.Field{
|
||||
|
|
@ -184,7 +184,7 @@ func (panel *UserPanel) routeTOTPDisable(ctx context.Context) http.Handler {
|
|||
FieldTemplate: field.PureCSSFieldTemplate,
|
||||
|
||||
SkipForm: func(r *http.Request) (data struct{}, skip bool) {
|
||||
user, err := panel.Dependencies.Auth.UserOfSession(r)
|
||||
user, err := panel.dependencies.Auth.UserOfSession(r)
|
||||
return struct{}{}, err == nil && user != nil && !user.IsTOTPEnabled()
|
||||
},
|
||||
RenderTemplate: tpl.Template(),
|
||||
|
|
@ -193,7 +193,7 @@ func (panel *UserPanel) routeTOTPDisable(ctx context.Context) http.Handler {
|
|||
Validate: func(r *http.Request, values map[string]string) (struct{}, error) {
|
||||
password, otp := values["password"], values["otp"]
|
||||
|
||||
user, err := panel.Dependencies.Auth.UserOfSession(r)
|
||||
user, err := panel.dependencies.Auth.UserOfSession(r)
|
||||
if err != nil {
|
||||
return struct{}{}, err
|
||||
}
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ func (panel *UserPanel) routeUser(ctx context.Context) http.Handler {
|
|||
}
|
||||
|
||||
tpl := userTemplate.Prepare(
|
||||
panel.Dependencies.Templating,
|
||||
panel.dependencies.Templating,
|
||||
templating.Crumbs(
|
||||
menuUser,
|
||||
),
|
||||
|
|
@ -61,12 +61,12 @@ func (panel *UserPanel) routeUser(ctx context.Context) http.Handler {
|
|||
|
||||
return tpl.HTMLHandlerWithFlags(func(r *http.Request) (uc userContext, funcs []templating.FlagFunc, err error) {
|
||||
// find the user
|
||||
uc.AuthUser, err = panel.Dependencies.Auth.UserOfSession(r)
|
||||
uc.AuthUser, err = panel.dependencies.Auth.UserOfSession(r)
|
||||
if err != nil || uc.AuthUser == nil {
|
||||
return uc, nil, err
|
||||
}
|
||||
|
||||
uc.ShowAdminURLs = panel.Dependencies.Auth.CheckScope("", scopes.ScopeUserAdmin, r) == nil
|
||||
uc.ShowAdminURLs = panel.dependencies.Auth.CheckScope("", scopes.ScopeUserAdmin, r) == nil
|
||||
|
||||
// replace the totp action in the menu
|
||||
var totpAction component.MenuItem
|
||||
|
|
@ -81,7 +81,7 @@ func (panel *UserPanel) routeUser(ctx context.Context) http.Handler {
|
|||
}
|
||||
|
||||
// find the grants
|
||||
grants, err := panel.Dependencies.Policy.User(r.Context(), uc.AuthUser.User.User)
|
||||
grants, err := panel.dependencies.Policy.User(r.Context(), uc.AuthUser.User.User)
|
||||
if err != nil {
|
||||
return uc, nil, err
|
||||
}
|
||||
|
|
@ -90,7 +90,7 @@ func (panel *UserPanel) routeUser(ctx context.Context) http.Handler {
|
|||
for i, grant := range grants {
|
||||
uc.Grants[i].Grant = grant
|
||||
|
||||
url, err := panel.Dependencies.Next.Next(r.Context(), grant.Slug, "/")
|
||||
url, err := panel.dependencies.Next.Next(r.Context(), grant.Slug, "/")
|
||||
if err != nil {
|
||||
return uc, nil, err
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ func (policy *Policy) Set(ctx context.Context, grant models.Grant) error {
|
|||
|
||||
// check that the referenced user exists!
|
||||
{
|
||||
_, err := policy.Dependencies.Auth.User(ctx, grant.User)
|
||||
_, err := policy.dependencies.Auth.User(ctx, grant.User)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ import (
|
|||
type Policy struct {
|
||||
component.Base
|
||||
|
||||
Dependencies struct {
|
||||
dependencies struct {
|
||||
SQL *sql.SQL
|
||||
Auth *auth.Auth
|
||||
}
|
||||
|
|
@ -29,10 +29,10 @@ var (
|
|||
func (pol *Policy) TableInfo() component.TableInfo {
|
||||
return component.TableInfo{
|
||||
Name: models.GrantTable,
|
||||
Model: reflectx.MakeType[models.Grant](),
|
||||
Model: reflectx.TypeFor[models.Grant](),
|
||||
}
|
||||
}
|
||||
|
||||
func (pol *Policy) table(ctx context.Context) (*gorm.DB, error) {
|
||||
return pol.Dependencies.SQL.QueryTable(ctx, pol)
|
||||
return pol.dependencies.SQL.QueryTable(ctx, pol)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,8 +26,8 @@ func (auth *Auth) Scopes() map[component.Scope]component.ScopeInfo {
|
|||
// getScopeMap return a (cached version of) all scopes
|
||||
func (auth *Auth) getScopeMap() map[component.Scope]scopeMapEntry {
|
||||
return auth.scopeMap.Get(func() map[component.Scope]scopeMapEntry {
|
||||
mp := make(map[component.Scope]scopeMapEntry, len(auth.Dependencies.ScopeProviders))
|
||||
for _, p := range auth.Dependencies.ScopeProviders {
|
||||
mp := make(map[component.Scope]scopeMapEntry, len(auth.dependencies.ScopeProviders))
|
||||
for _, p := range auth.dependencies.ScopeProviders {
|
||||
info := p.Scope()
|
||||
mp[info.Scope] = scopeMapEntry{
|
||||
Provider: p,
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ import (
|
|||
|
||||
type AdminLoggedIn struct {
|
||||
component.Base
|
||||
Dependencies struct {
|
||||
dependencies struct {
|
||||
Auth *auth.Auth
|
||||
}
|
||||
}
|
||||
|
|
@ -32,6 +32,6 @@ func (*AdminLoggedIn) Scope() component.ScopeInfo {
|
|||
}
|
||||
|
||||
func (al *AdminLoggedIn) HasScope(param string, r *http.Request) (bool, error) {
|
||||
_, user, err := al.Dependencies.Auth.SessionOf(r)
|
||||
_, user, err := al.dependencies.Auth.SessionOf(r)
|
||||
return user != nil && user.IsAdmin() && user.IsTOTPEnabled(), err
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ import (
|
|||
|
||||
type ListInstancesScope struct {
|
||||
component.Base
|
||||
Dependencies struct {
|
||||
dependencies struct {
|
||||
Auth *auth.Auth
|
||||
}
|
||||
}
|
||||
|
|
@ -32,6 +32,6 @@ func (*ListInstancesScope) Scope() component.ScopeInfo {
|
|||
}
|
||||
|
||||
func (lis *ListInstancesScope) HasScope(param string, r *http.Request) (bool, error) {
|
||||
_, user, err := lis.Dependencies.Auth.SessionOf(r)
|
||||
_, user, err := lis.dependencies.Auth.SessionOf(r)
|
||||
return user != nil, err
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ import (
|
|||
|
||||
type Never struct {
|
||||
component.Base
|
||||
Dependencies struct {
|
||||
dependencies struct {
|
||||
Auth *auth.Auth
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ import (
|
|||
|
||||
type ListNewsScope struct {
|
||||
component.Base
|
||||
Dependencies struct {
|
||||
dependencies struct {
|
||||
Auth *auth.Auth
|
||||
}
|
||||
}
|
||||
|
|
@ -32,6 +32,6 @@ func (*ListNewsScope) Scope() component.ScopeInfo {
|
|||
}
|
||||
|
||||
func (lns *ListNewsScope) HasScope(param string, r *http.Request) (bool, error) {
|
||||
_, user, err := lns.Dependencies.Auth.SessionOf(r)
|
||||
_, user, err := lns.dependencies.Auth.SessionOf(r)
|
||||
return user != nil, err
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ import (
|
|||
|
||||
type ResolverScope struct {
|
||||
component.Base
|
||||
Dependencies struct {
|
||||
dependencies struct {
|
||||
Auth *auth.Auth
|
||||
}
|
||||
}
|
||||
|
|
@ -32,6 +32,6 @@ func (*ResolverScope) Scope() component.ScopeInfo {
|
|||
}
|
||||
|
||||
func (rs *ResolverScope) HasScope(param string, r *http.Request) (bool, error) {
|
||||
_, user, err := rs.Dependencies.Auth.SessionOf(r)
|
||||
_, user, err := rs.dependencies.Auth.SessionOf(r)
|
||||
return user != nil, err
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ import (
|
|||
|
||||
type UserLoggedIn struct {
|
||||
component.Base
|
||||
Dependencies struct {
|
||||
dependencies struct {
|
||||
Auth *auth.Auth
|
||||
}
|
||||
}
|
||||
|
|
@ -31,6 +31,6 @@ func (*UserLoggedIn) Scope() component.ScopeInfo {
|
|||
}
|
||||
|
||||
func (iu *UserLoggedIn) HasScope(param string, r *http.Request) (bool, error) {
|
||||
_, user, err := iu.Dependencies.Auth.SessionOf(r)
|
||||
_, user, err := iu.dependencies.Auth.SessionOf(r)
|
||||
return user != nil, err
|
||||
}
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ func (auth *Auth) SessionOf(r *http.Request) (session component.SessionInfo, use
|
|||
// To check the user of a token or session, use SessionOf.
|
||||
func (auth *Auth) UserOfToken(r *http.Request) (user *AuthUser, err error) {
|
||||
// get the token object
|
||||
token, err := auth.Dependencies.Tokens.TokenOf(r)
|
||||
token, err := auth.dependencies.Tokens.TokenOf(r)
|
||||
if token == nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
@ -173,7 +173,7 @@ var errLoginFailed = errors.New("login failed")
|
|||
// authLogin implements a view to login a user
|
||||
func (auth *Auth) authLogin(ctx context.Context) http.Handler {
|
||||
tpl := loginTemplate.Prepare(
|
||||
auth.Dependencies.Templating,
|
||||
auth.dependencies.Templating,
|
||||
func(flags templating.Flags, r *http.Request) templating.Flags {
|
||||
flags.Crumbs = []component.MenuItem{
|
||||
{Title: "Login", Path: template.URL(r.URL.RequestURI())},
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ import (
|
|||
type Tokens struct {
|
||||
component.Base
|
||||
|
||||
Dependencies struct {
|
||||
dependencies struct {
|
||||
SQL *sql.SQL
|
||||
}
|
||||
}
|
||||
|
|
@ -30,12 +30,12 @@ var (
|
|||
func (tok *Tokens) TableInfo() component.TableInfo {
|
||||
return component.TableInfo{
|
||||
Name: models.TokensTable,
|
||||
Model: reflectx.MakeType[models.Token](),
|
||||
Model: reflectx.TypeFor[models.Token](),
|
||||
}
|
||||
}
|
||||
|
||||
func (tok *Tokens) table(ctx context.Context) (*gorm.DB, error) {
|
||||
return tok.Dependencies.SQL.QueryTable(ctx, tok)
|
||||
return tok.dependencies.SQL.QueryTable(ctx, tok)
|
||||
}
|
||||
|
||||
func (tok *Tokens) OnUserDelete(ctx context.Context, user *models.User) error {
|
||||
|
|
|
|||
|
|
@ -25,14 +25,14 @@ var ErrUserNotFound = errors.New("user not found")
|
|||
func (auth *Auth) TableInfo() component.TableInfo {
|
||||
return component.TableInfo{
|
||||
Name: models.UserTable,
|
||||
Model: reflectx.MakeType[models.User](),
|
||||
Model: reflectx.TypeFor[models.User](),
|
||||
}
|
||||
}
|
||||
|
||||
// Users returns all users in the database
|
||||
func (auth *Auth) Users(ctx context.Context) (users []*AuthUser, err error) {
|
||||
// query the user table
|
||||
table, err := auth.Dependencies.SQL.QueryTable(ctx, auth)
|
||||
table, err := auth.dependencies.SQL.QueryTable(ctx, auth)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
|
@ -65,7 +65,7 @@ func (auth *Auth) User(ctx context.Context, name string) (user *AuthUser, err er
|
|||
}
|
||||
|
||||
// return the user
|
||||
table, err := auth.Dependencies.SQL.QueryTable(ctx, auth)
|
||||
table, err := auth.dependencies.SQL.QueryTable(ctx, auth)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
|
@ -96,7 +96,7 @@ func (auth *Auth) User(ctx context.Context, name string) (user *AuthUser, err er
|
|||
// The user is not associated to any WissKIs, and has no password set.
|
||||
func (auth *Auth) CreateUser(ctx context.Context, name string) (user *AuthUser, err error) {
|
||||
// return the user
|
||||
table, err := auth.Dependencies.SQL.QueryTable(ctx, auth)
|
||||
table, err := auth.dependencies.SQL.QueryTable(ctx, auth)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
|
@ -323,7 +323,7 @@ func (au *AuthUser) MakeRegular(ctx context.Context) error {
|
|||
|
||||
// Save saves the given user in the database
|
||||
func (au *AuthUser) Save(ctx context.Context) error {
|
||||
table, err := au.auth.Dependencies.SQL.QueryTable(ctx, au.auth)
|
||||
table, err := au.auth.dependencies.SQL.QueryTable(ctx, au.auth)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
@ -332,13 +332,13 @@ func (au *AuthUser) Save(ctx context.Context) error {
|
|||
|
||||
// Delete deletes the user from the database
|
||||
func (au *AuthUser) Delete(ctx context.Context) error {
|
||||
table, err := au.auth.Dependencies.SQL.QueryTable(ctx, au.auth)
|
||||
table, err := au.auth.dependencies.SQL.QueryTable(ctx, au.auth)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// run all the user delete hooks
|
||||
for _, c := range au.auth.Dependencies.UserDeleteHooks {
|
||||
for _, c := range au.auth.dependencies.UserDeleteHooks {
|
||||
if err := c.OnUserDelete(ctx, &au.User); err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue