canaille-globuzma/canaille/oidc/forms.py

162 lines
4.8 KiB
Python
Raw Normal View History

2022-05-20 12:07:56 +00:00
import wtforms
from canaille.app import models
2023-04-09 13:52:55 +00:00
from canaille.app.forms import HTMXForm
from canaille.app.forms import is_uri
2023-06-22 09:39:50 +00:00
from canaille.app.forms import unique_values
from flask_babel import lazy_gettext as _
2022-05-20 12:07:56 +00:00
2023-03-30 21:14:39 +00:00
class AuthorizeForm(HTMXForm):
pass
2023-03-30 21:14:39 +00:00
class LogoutForm(HTMXForm):
2022-05-20 12:07:56 +00:00
answer = wtforms.SubmitField()
def client_audiences():
return [(client.id, client.client_name) for client in models.Client.query()]
2023-03-30 21:14:39 +00:00
class ClientAddForm(HTMXForm):
client_name = wtforms.StringField(
_("Name"),
validators=[wtforms.validators.DataRequired()],
render_kw={"placeholder": "Client Name"},
)
2023-06-22 09:39:50 +00:00
contacts = wtforms.FieldList(
wtforms.EmailField(
_("Contact"),
validators=[wtforms.validators.Optional(), wtforms.validators.Email()],
render_kw={"placeholder": "admin@mydomain.tld"},
),
min_entries=1,
validators=[unique_values],
)
client_uri = wtforms.URLField(
_("URI"),
2023-03-29 18:14:28 +00:00
validators=[
wtforms.validators.DataRequired(),
is_uri,
],
render_kw={"placeholder": "https://mydomain.tld"},
)
2023-06-22 09:39:50 +00:00
redirect_uris = wtforms.FieldList(
wtforms.URLField(
_("Redirect URIs"),
validators=[
wtforms.validators.DataRequired(),
is_uri,
],
render_kw={"placeholder": "https://mydomain.tld/callback"},
),
min_entries=1,
validators=[unique_values],
)
2023-06-22 09:39:50 +00:00
post_logout_redirect_uris = wtforms.FieldList(
wtforms.URLField(
_("Post logout redirect URIs"),
validators=[
wtforms.validators.Optional(),
is_uri,
],
render_kw={
"placeholder": "https://mydomain.tld/you-have-been-disconnected"
},
),
min_entries=1,
validators=[unique_values],
)
grant_types = wtforms.SelectMultipleField(
_("Grant types"),
validators=[wtforms.validators.DataRequired()],
choices=[
("password", "password"),
("authorization_code", "authorization_code"),
("implicit", "implicit"),
("hybrid", "hybrid"),
("refresh_token", "refresh_token"),
],
default=["authorization_code", "refresh_token"],
)
scope = wtforms.StringField(
_("Scope"),
validators=[wtforms.validators.Optional()],
default="openid profile email",
render_kw={"placeholder": "openid profile"},
)
response_types = wtforms.SelectMultipleField(
_("Response types"),
validators=[wtforms.validators.DataRequired()],
choices=[("code", "code"), ("token", "token"), ("id_token", "id_token")],
default=["code"],
)
token_endpoint_auth_method = wtforms.SelectField(
_("Token Endpoint Auth Method"),
validators=[wtforms.validators.DataRequired()],
choices=[
("client_secret_basic", "client_secret_basic"),
("client_secret_post", "client_secret_post"),
("none", "none"),
],
default="client_secret_basic",
)
audience = wtforms.SelectMultipleField(
_("Token audiences"),
validators=[wtforms.validators.Optional()],
choices=client_audiences,
validate_choice=False,
)
logo_uri = wtforms.URLField(
_("Logo URI"),
2023-03-29 18:14:28 +00:00
validators=[
wtforms.validators.Optional(),
is_uri,
],
render_kw={"placeholder": "https://mydomain.tld/logo.png"},
)
tos_uri = wtforms.URLField(
_("Terms of service URI"),
2023-03-29 18:14:28 +00:00
validators=[
wtforms.validators.Optional(),
is_uri,
],
render_kw={"placeholder": "https://mydomain.tld/tos.html"},
)
policy_uri = wtforms.URLField(
_("Policy URI"),
2023-03-29 18:14:28 +00:00
validators=[
wtforms.validators.Optional(),
is_uri,
],
render_kw={"placeholder": "https://mydomain.tld/policy.html"},
)
software_id = wtforms.StringField(
_("Software ID"),
validators=[wtforms.validators.Optional()],
render_kw={"placeholder": "xyz"},
)
software_version = wtforms.StringField(
_("Software Version"),
validators=[wtforms.validators.Optional()],
render_kw={"placeholder": "1.0"},
)
jwk = wtforms.StringField(
_("JWK"),
validators=[wtforms.validators.Optional()],
render_kw={"placeholder": ""},
)
jwks_uri = wtforms.URLField(
_("JKW URI"),
2023-03-29 18:14:28 +00:00
validators=[
wtforms.validators.Optional(),
is_uri,
],
render_kw={"placeholder": ""},
)
preconsent = wtforms.BooleanField(
_("Pre-consent"),
validators=[wtforms.validators.Optional()],
default=False,
)