Expose user login functionality
This commit is contained in:
parent
97f5ac7e1a
commit
8a5b066839
8 changed files with 246 additions and 8 deletions
|
|
@ -6,7 +6,10 @@ import (
|
|||
|
||||
"github.com/FAU-CDI/wisski-distillery/internal/dis/component"
|
||||
"github.com/FAU-CDI/wisski-distillery/internal/dis/component/auth"
|
||||
"github.com/FAU-CDI/wisski-distillery/internal/dis/component/auth/next"
|
||||
"github.com/FAU-CDI/wisski-distillery/internal/dis/component/auth/policy"
|
||||
"github.com/FAU-CDI/wisski-distillery/internal/dis/component/control/static/custom"
|
||||
"github.com/FAU-CDI/wisski-distillery/internal/dis/component/instances"
|
||||
"github.com/FAU-CDI/wisski-distillery/internal/models"
|
||||
"github.com/FAU-CDI/wisski-distillery/pkg/httpx"
|
||||
"github.com/julienschmidt/httprouter"
|
||||
|
|
@ -15,8 +18,11 @@ import (
|
|||
type UserPanel struct {
|
||||
component.Base
|
||||
Dependencies struct {
|
||||
Auth *auth.Auth
|
||||
Custom *custom.Custom
|
||||
Auth *auth.Auth
|
||||
Custom *custom.Custom
|
||||
Policy *policy.Policy
|
||||
Instances *instances.Instances
|
||||
Next *next.Next
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -55,8 +55,49 @@
|
|||
{{ end }}
|
||||
|
||||
<div class="pure-u-1">
|
||||
There will be a list of WissKIs you have access to here.
|
||||
<h2>Your WissKIs</h2>
|
||||
<p>
|
||||
This is a page of WissKIs you have access to.
|
||||
Click on the button containing the name to login.
|
||||
</p>
|
||||
</div>
|
||||
<div class="pure-u-1">
|
||||
<div class="padding">
|
||||
<div class="overflow">
|
||||
<table class="pure-table pure-table-bordered pure-form">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>
|
||||
WissKI Slug
|
||||
</th>
|
||||
<th>
|
||||
Drupal Username
|
||||
</th>
|
||||
<th>
|
||||
Admin
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{ range $id, $grant := .Grants }}
|
||||
<tr>
|
||||
<td>
|
||||
<a href="{{ $grant.URL }}" class="pure-button" target="_blank" rel="noopener noreferer">
|
||||
{{ $grant.Slug }}
|
||||
</a>
|
||||
</td>
|
||||
<td>
|
||||
{{ $grant.DrupalUsername }}
|
||||
</td>
|
||||
<td>
|
||||
{{ $grant.DrupalAdminRole }}
|
||||
</td>
|
||||
</tr>
|
||||
{{ end }}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
{{ end }}
|
||||
|
|
@ -2,6 +2,7 @@ package panel
|
|||
|
||||
import (
|
||||
"context"
|
||||
"html/template"
|
||||
"net/http"
|
||||
|
||||
_ "embed"
|
||||
|
|
@ -9,6 +10,7 @@ import (
|
|||
"github.com/FAU-CDI/wisski-distillery/internal/dis/component/auth"
|
||||
"github.com/FAU-CDI/wisski-distillery/internal/dis/component/control/static"
|
||||
"github.com/FAU-CDI/wisski-distillery/internal/dis/component/control/static/custom"
|
||||
"github.com/FAU-CDI/wisski-distillery/internal/models"
|
||||
"github.com/FAU-CDI/wisski-distillery/pkg/httpx"
|
||||
)
|
||||
|
||||
|
|
@ -22,6 +24,13 @@ var userTemplate = static.AssetsUser.MustParseShared(
|
|||
type routeUserContext struct {
|
||||
custom.BaseContext
|
||||
*auth.AuthUser
|
||||
|
||||
Grants []GrantWithURL
|
||||
}
|
||||
|
||||
type GrantWithURL struct {
|
||||
models.Grant
|
||||
URL template.URL
|
||||
}
|
||||
|
||||
func (panel *UserPanel) routeUser(ctx context.Context) http.Handler {
|
||||
|
|
@ -29,7 +38,30 @@ func (panel *UserPanel) routeUser(ctx context.Context) http.Handler {
|
|||
return &httpx.HTMLHandler[routeUserContext]{
|
||||
Handler: func(r *http.Request) (ruc routeUserContext, err error) {
|
||||
panel.Dependencies.Custom.Update(&ruc, r)
|
||||
|
||||
// find the user
|
||||
ruc.AuthUser, err = panel.Dependencies.Auth.UserOf(r)
|
||||
if err != nil || ruc.AuthUser == nil {
|
||||
return ruc, err
|
||||
}
|
||||
|
||||
// find the grants
|
||||
grants, err := panel.Dependencies.Policy.User(r.Context(), ruc.AuthUser.User.User)
|
||||
if err != nil {
|
||||
return ruc, err
|
||||
}
|
||||
|
||||
ruc.Grants = make([]GrantWithURL, len(grants))
|
||||
for i, grant := range grants {
|
||||
ruc.Grants[i].Grant = grant
|
||||
|
||||
url, err := panel.Dependencies.Next.Next(r.Context(), grant.Slug, "/")
|
||||
if err != nil {
|
||||
return ruc, err
|
||||
}
|
||||
ruc.Grants[i].URL = template.URL(url)
|
||||
}
|
||||
|
||||
return ruc, err
|
||||
},
|
||||
Template: userTemplate,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue