diff --git a/internal/dis/component/auth/panel/templates/user.html b/internal/dis/component/auth/panel/templates/user.html
index d2e71fd..e0676c6 100644
--- a/internal/dis/component/auth/panel/templates/user.html
+++ b/internal/dis/component/auth/panel/templates/user.html
@@ -23,7 +23,7 @@
{{ if .User.IsTOTPEnabled }}
Passcode Enabled: true
{{ else }}
- Passcode Enabled: false (some actions are disabled)
+ Passcode Enabled: false {{ if .User.IsAdmin }}(some admin actions are disabled){{ end }}
{{ end }}
diff --git a/internal/dis/component/auth/protect.go b/internal/dis/component/auth/protect.go
index 85387c1..2afa700 100644
--- a/internal/dis/component/auth/protect.go
+++ b/internal/dis/component/auth/protect.go
@@ -85,7 +85,7 @@ var Admin Permission = func(user *AuthUser, r *http.Request) (ok Grant, err erro
return Bool2Grant(user != nil && user.IsAdmin() && user.IsTOTPEnabled(), "user needs to have admin permissions and passcode enabled"), nil
}
-// User represents a permission that checks if a user has totp enabled.
+// User represents a permission that checks if a user is enabled
var User Permission = func(user *AuthUser, r *http.Request) (ok Grant, err error) {
- return Bool2Grant(user != nil && user.IsEnabled() && user.IsTOTPEnabled(), "user needs to have passcode enabled"), nil
+ return Bool2Grant(user != nil && user.IsEnabled(), "user needs to be enabled"), nil
}
diff --git a/internal/dis/component/control/admin/components.go b/internal/dis/component/control/admin/components.go
index f1dc587..927698b 100644
--- a/internal/dis/component/control/admin/components.go
+++ b/internal/dis/component/control/admin/components.go
@@ -11,7 +11,7 @@ import (
"github.com/FAU-CDI/wisski-distillery/internal/models"
"github.com/FAU-CDI/wisski-distillery/pkg/httpx"
"github.com/FAU-CDI/wisski-distillery/pkg/lazy"
- "github.com/gorilla/mux"
+ "github.com/julienschmidt/httprouter"
)
//go:embed "html/components.html"
@@ -52,7 +52,8 @@ func (admin *Admin) ingredients(r *http.Request) (cp ingredientsContext, err err
admin.Dependencies.Custom.Update(&cp, r)
// find the instance itself!
- instance, err := admin.Dependencies.Instances.WissKI(r.Context(), mux.Vars(r)["slug"])
+ slug := httprouter.ParamsFromContext(r.Context()).ByName("slug")
+ instance, err := admin.Dependencies.Instances.WissKI(r.Context(), slug)
if err == instances.ErrWissKINotFound {
return cp, httpx.ErrNotFound
}
diff --git a/internal/dis/component/control/admin/grants.go b/internal/dis/component/control/admin/grants.go
index bbdb733..6c98d5a 100644
--- a/internal/dis/component/control/admin/grants.go
+++ b/internal/dis/component/control/admin/grants.go
@@ -12,7 +12,7 @@ import (
"github.com/FAU-CDI/wisski-distillery/internal/wisski"
"github.com/FAU-CDI/wisski-distillery/pkg/httpx"
"github.com/FAU-CDI/wisski-distillery/pkg/httpx/field"
- "github.com/gorilla/mux"
+ "github.com/julienschmidt/httprouter"
"golang.org/x/exp/maps"
"golang.org/x/exp/slices"
)
@@ -94,7 +94,8 @@ func (gc *grantsContext) useGrants(r *http.Request, admin *Admin) (err error) {
}
func (admin *Admin) getGrants(r *http.Request) (gc grantsContext, err error) {
- if err := gc.use(r, mux.Vars(r)["slug"], admin); err != nil {
+ slug := httprouter.ParamsFromContext(r.Context()).ByName("slug")
+ if err := gc.use(r, slug, admin); err != nil {
return gc, err
}
diff --git a/internal/dis/component/control/admin/instance.go b/internal/dis/component/control/admin/instance.go
index ce160db..a0c5884 100644
--- a/internal/dis/component/control/admin/instance.go
+++ b/internal/dis/component/control/admin/instance.go
@@ -10,7 +10,7 @@ import (
"github.com/FAU-CDI/wisski-distillery/internal/models"
"github.com/FAU-CDI/wisski-distillery/internal/status"
"github.com/FAU-CDI/wisski-distillery/pkg/httpx"
- "github.com/gorilla/mux"
+ "github.com/julienschmidt/httprouter"
)
//go:embed "html/instance.html"
@@ -31,7 +31,8 @@ func (admin *Admin) instance(r *http.Request) (is instanceContext, err error) {
admin.Dependencies.Custom.Update(&is, r)
// find the instance itself!
- instance, err := admin.Dependencies.Instances.WissKI(r.Context(), mux.Vars(r)["slug"])
+ slug := httprouter.ParamsFromContext(r.Context()).ByName("slug")
+ instance, err := admin.Dependencies.Instances.WissKI(r.Context(), slug)
if err == instances.ErrWissKINotFound {
return is, httpx.ErrNotFound
}
diff --git a/internal/dis/component/instances/instances.go b/internal/dis/component/instances/instances.go
index 3cfd648..3c1053a 100644
--- a/internal/dis/component/instances/instances.go
+++ b/internal/dis/component/instances/instances.go
@@ -47,6 +47,10 @@ func (instances *Instances) use(wisski *wisski.WissKI) {
// WissKI returns the WissKI with the provided slug, if it exists.
// It the WissKI does not exist, returns ErrWissKINotFound.
func (instances *Instances) WissKI(ctx context.Context, slug string) (wissKI *wisski.WissKI, err error) {
+ if slug == "" {
+ return nil, ErrWissKINotFound
+ }
+
sql := instances.Dependencies.SQL
if err := sql.WaitQueryTable(ctx); err != nil {
return nil, err
@@ -61,7 +65,7 @@ func (instances *Instances) WissKI(ctx context.Context, slug string) (wissKI *wi
wissKI = new(wisski.WissKI)
// find the instance by slug
- query := table.Where(&models.Instance{Slug: slug}).Find(&wissKI.Liquid.Instance)
+ query := table.Find(&wissKI.Liquid.Instance, &models.Instance{Slug: slug})
switch {
case query.Error != nil:
return nil, errSQL.WithMessageF(query.Error)