auth/web/authorize.qtpl

159 lines
3.8 KiB
Plaintext

{% import "source.toby3d.me/toby3d/auth/internal/domain" %}
{% code type AuthorizePage struct {
BaseOf
CSRF []byte
Providers []*domain.Provider
Scope domain.Scopes
Client *domain.Client
Me *domain.Me
RedirectURI *domain.URL
CodeChallengeMethod domain.CodeChallengeMethod
ResponseType domain.ResponseType
CodeChallenge string
State string
} %}
{% func (p *AuthorizePage) Title() %}
{% if p.Client.GetName() == "" %}
{%= p.T("Authorize %s", p.Client.GetName()) %}
{% else %}
{%= p.T("Authorize application") %}
{% endif %}
{% endfunc %}
{% func (p *AuthorizePage) Body() %}
<header>
{% if p.Client.GetLogo() != nil %}
<img
alt="{%s p.Client.GetName() %}"
crossorigin="anonymous"
decoding="async"
height="140"
importance="high"
loading="lazy"
referrerpolicy="no-referrer-when-downgrade"
src="{%s p.Client.GetLogo().String() %}"
width="140">
{% endif %}
<h2>
{% if p.Client.GetURL() != nil %}
<a href="{%s p.Client.GetURL().String() %}">
{% endif %}
{% if p.Client.GetName() != "" %}
{%s p.Client.GetName() %}
{% else %}
{%s p.Client.ID.String() %}
{% endif %}
{% if p.Client.GetURL() != nil %}
</a>
{% endif %}
</h2>
</header>
<main>
<form
accept-charset="utf-8"
action="/api/authorize"
autocomplete="off"
enctype="application/x-www-form-urlencoded"
method="post"
novalidate="true"
target="_self">
{% if p.CSRF != nil %}
<input
type="hidden"
name="_csrf"
value="{%z p.CSRF %}">
{% endif %}
{% for key, val := range map[string]string{
"client_id": p.Client.ID.String(),
"redirect_uri": p.RedirectURI.String(),
"response_type": p.ResponseType.String(),
"state": p.State,
} %}
<input
type="hidden"
name="{%s key %}"
value="{%s val %}">
{% endfor %}
{% if len(p.Scope) > 0 %}
<fieldset>
<legend>{%= p.T("Choose your scopes") %}</legend>
{% for _, scope := range p.Scope %}
<div>
<label>
<input
type="checkbox"
name="scope[]"
value="{%s scope.String() %}"
checked>
{%s scope.String() %}
</label>
</div>
{% endfor %}
</fieldset>
{% endif %}
{% if p.CodeChallenge != "" %}
<input
type="hidden"
name="code_challenge"
value="{%s p.CodeChallenge %}">
<input
type="hidden"
name="code_challenge_method"
value="{%s p.CodeChallengeMethod.String() %}">
{% endif %}
{% if p.Me != nil %}
<input
type="hidden"
name="me"
value="{%s p.Me.String() %}">
{% endif %}
{% if len(p.Providers) > 0 %}
<select
name="provider"
autocomplete
required>
{% for _, provider := range p.Providers %}
<option
value="{%s provider.UID %}"
{% if provider.UID == "mastodon" %}selected{% endif %}>
{%s provider.Name %}
</option>
{% endfor %}
</select>
{% else %}
<input type="hidden" name="provider" value="direct">
{% endif %}
<button
type="submit"
name="authorize"
value="deny">
{%= p.T("Deny") %}
</button>
<button
type="submit"
name="authorize"
value="allow">
{%= p.T("Allow") %}
</button>
</form>
</main>
{% endfunc %}