Integrate MAS with Synapse
This commit is contained in:
194
mas/share/templates/pages/upstream_oauth2/do_register.html
Normal file
194
mas/share/templates/pages/upstream_oauth2/do_register.html
Normal file
@@ -0,0 +1,194 @@
|
||||
{#
|
||||
Copyright 2024, 2025 New Vector Ltd.
|
||||
Copyright 2022-2024 The Matrix.org Foundation C.I.C.
|
||||
|
||||
SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
|
||||
Please see LICENSE files in the repository root for full details.
|
||||
-#}
|
||||
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% from "components/idp_brand.html" import logo %}
|
||||
|
||||
{% block content %}
|
||||
{% if force_localpart %}
|
||||
<header class="page-heading">
|
||||
<div class="icon">
|
||||
{{ icon.download() }}
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<h1 class="title">
|
||||
{{ _("mas.upstream_oauth2.register.import_data.heading") }}
|
||||
</h1>
|
||||
<p class="text">
|
||||
{{ _("mas.upstream_oauth2.register.import_data.description", server_name=branding.server_name) }}
|
||||
</p>
|
||||
</div>
|
||||
</header>
|
||||
{% elif upstream_oauth_provider.human_name is not none %}
|
||||
<header class="page-heading">
|
||||
<div class="icon">
|
||||
{{ icon.user_profile_solid() }}
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<h1 class="title">
|
||||
{{ _("mas.upstream_oauth2.register.signup_with_upstream.heading", human_name=upstream_oauth_provider.human_name) }}
|
||||
</h1>
|
||||
</div>
|
||||
</header>
|
||||
{% else %}
|
||||
<header class="page-heading">
|
||||
<div class="icon">
|
||||
{{ icon.mention() }}
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<h1 class="title">
|
||||
{{ _("mas.upstream_oauth2.register.choose_username.heading") }}
|
||||
</h1>
|
||||
<p class="text">
|
||||
{{ _("mas.upstream_oauth2.register.choose_username.description") }}
|
||||
</p>
|
||||
</div>
|
||||
</header>
|
||||
{% endif %}
|
||||
|
||||
{% if upstream_oauth_provider.human_name is not none %}
|
||||
<section class="upstream-oauth2-provider-account">
|
||||
{% if upstream_oauth_provider.brand_name is not none %}
|
||||
{{ logo(brand=upstream_oauth_provider.brand_name, class="brand") }}
|
||||
{% else %}
|
||||
{{ icon.user_profile() }}
|
||||
{% endif %}
|
||||
|
||||
<div class="infos">
|
||||
<h3 class="provider">
|
||||
{{- _("mas.upstream_oauth2.register.provider_name", human_name=upstream_oauth_provider.human_name) -}}
|
||||
</h3>
|
||||
{% if upstream_oauth_link.human_account_name is not none %}
|
||||
<p class="account">
|
||||
{{- upstream_oauth_link.human_account_name -}}
|
||||
</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
</section>
|
||||
{% endif %}
|
||||
|
||||
<form method="POST" class="cpd-form-root">
|
||||
<input type="hidden" name="csrf" value="{{ csrf_token }}" />
|
||||
<input type="hidden" name="action" value="register" />
|
||||
|
||||
{% if form_state.errors is not empty %}
|
||||
{% for error in form_state.errors %}
|
||||
<div class="text-critical font-medium">
|
||||
{{- errors.form_error_message(error=error) -}}
|
||||
</div>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
|
||||
{% if force_localpart %}
|
||||
{% call(f) field.field(label=_("common.mxid"), name="mxid") %}
|
||||
<input {{ field.attributes(f) }} class="cpd-text-control" type="text" value="@{{ imported_localpart }}:{{ branding.server_name }}" readonly aria-describedby="{{ f.id }}-help" />
|
||||
|
||||
<div class="cpd-form-message cpd-form-help-message" id="{{ f.id }}-help">
|
||||
{{- _("mas.upstream_oauth2.register.enforced_by_policy") -}}
|
||||
</div>
|
||||
{% endcall %}
|
||||
{% else %}
|
||||
{% call(f) field.field(label=_("common.username"), name="username", form_state=form_state) %}
|
||||
<input {{ field.attributes(f) }} class="cpd-text-control" type="text" autocomplete="username" autocorrect="off" autocapitalize="none" value="{{ imported_localpart or '' }}" aria-describedby="{{ f.id }}-help" data-choose-username />
|
||||
{{ field.error(error={"kind": "policy", "code": "username-invalid-chars"}, hidden=true) }}
|
||||
|
||||
{% if f.errors is empty %}
|
||||
<div class="cpd-form-message cpd-form-help-message" id="{{ f.id }}-help">
|
||||
@{{ imported_localpart or (_("common.username") | lower) }}:{{ branding.server_name }}
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endcall %}
|
||||
{% endif %}
|
||||
|
||||
{% if imported_email %}
|
||||
<div class="flex gap-6 items-center">
|
||||
{% call(f) field.field(label=_("common.email_address"), name="email", class="flex-1") %}
|
||||
<input {{ field.attributes(f) }} class="cpd-text-control" type="email" value="{{ imported_email }}" readonly aria-describedby="{{ f.id }}-help" />
|
||||
|
||||
<div class="cpd-form-message cpd-form-help-message" id="{{ f.id }}-help">
|
||||
{% if upstream_oauth_provider.human_name %}
|
||||
{{- _("mas.upstream_oauth2.register.imported_from_upstream_with_name", human_name=upstream_oauth_provider.human_name) -}}
|
||||
{% else %}
|
||||
{{- _("mas.upstream_oauth2.register.imported_from_upstream") -}}
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endcall %}
|
||||
|
||||
{% if not force_email %}
|
||||
<div class="cpd-form-inline-field">
|
||||
<div class="cpd-form-inline-field-control">
|
||||
<div class="cpd-checkbox-container">
|
||||
<input class="cpd-checkbox-input" type="checkbox" name="import_email" id="import_email" checked="checked" />
|
||||
<div class="cpd-checkbox-ui">
|
||||
{{ icon.check() }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<label class="cpd-form-label" for="import_email">
|
||||
{{- _("mas.upstream_oauth2.register.use") -}}
|
||||
</label>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if imported_display_name %}
|
||||
<div class="flex gap-6 items-center">
|
||||
{% call(f) field.field(label=_("common.display_name"), name="display_name", class="flex-1") %}
|
||||
<input {{ field.attributes(f) }} class="cpd-text-control" type="text" value="{{ imported_display_name }}" readonly />
|
||||
|
||||
<div class="cpd-form-message cpd-form-help-message">
|
||||
{% if upstream_oauth_provider.human_name is not none %}
|
||||
{{- _("mas.upstream_oauth2.register.imported_from_upstream_with_name", human_name=upstream_oauth_provider.human_name) -}}
|
||||
{% else %}
|
||||
{{- _("mas.upstream_oauth2.register.imported_from_upstream") -}}
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endcall %}
|
||||
|
||||
{% if not force_display_name %}
|
||||
<div class="cpd-form-inline-field">
|
||||
<div class="cpd-form-inline-field-control">
|
||||
<div class="cpd-checkbox-container">
|
||||
<input class="cpd-checkbox-input" type="checkbox" name="import_display_name" id="import_display_name" checked="checked" />
|
||||
<div class="cpd-checkbox-ui">
|
||||
{{ icon.check() }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cpd-form-inline-field-body">
|
||||
<label class="cpd-form-label" for="import_display_name">
|
||||
{{- _("mas.upstream_oauth2.register.use") -}}
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if branding.tos_uri is not none %}
|
||||
{% call(f) field.field(label=_("mas.register.terms_of_service", tos_uri=branding.tos_uri), name="accept_terms", form_state=form_state, inline=true, class="my-4") %}
|
||||
<div class="cpd-form-inline-field-control">
|
||||
<div class="cpd-checkbox-container">
|
||||
<input {{ field.attributes(f) }} class="cpd-checkbox-input" type="checkbox" required />
|
||||
<div class="cpd-checkbox-ui">
|
||||
{{ icon.check() }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endcall %}
|
||||
{% endif %}
|
||||
|
||||
{{ button.button(text=_("action.create_account")) }}
|
||||
</form>
|
||||
{% endblock content %}
|
||||
25
mas/share/templates/pages/upstream_oauth2/link_mismatch.html
Normal file
25
mas/share/templates/pages/upstream_oauth2/link_mismatch.html
Normal file
@@ -0,0 +1,25 @@
|
||||
{#
|
||||
Copyright 2024, 2025 New Vector Ltd.
|
||||
Copyright 2022-2024 The Matrix.org Foundation C.I.C.
|
||||
|
||||
SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
|
||||
Please see LICENSE files in the repository root for full details.
|
||||
-#}
|
||||
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<header class="page-heading">
|
||||
<div class="icon invalid">
|
||||
{{ icon.warning() }}
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<h1 class="title">
|
||||
{{ _("mas.upstream_oauth2.link_mismatch.heading") }}
|
||||
</h1>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
{{ logout.button(text=_("action.sign_out"), csrf_token=csrf_token) }}
|
||||
{% endblock content %}
|
||||
31
mas/share/templates/pages/upstream_oauth2/login_link.html
Normal file
31
mas/share/templates/pages/upstream_oauth2/login_link.html
Normal file
@@ -0,0 +1,31 @@
|
||||
{#
|
||||
Copyright 2025 New Vector Ltd.
|
||||
|
||||
SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
|
||||
Please see LICENSE in the repository root for full details.
|
||||
-#}
|
||||
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<header class="page-heading">
|
||||
<div class="icon">
|
||||
{{ icon.link() }}
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<h1 class="title">{{ _("mas.upstream_oauth2.login_link.heading") }}</h1>
|
||||
</div>
|
||||
</header>
|
||||
<section class="flex flex-col gap-6 justify-center">
|
||||
{{ _("mas.upstream_oauth2.login_link.description", username=linked_user.username) }}
|
||||
|
||||
<form method="POST" class="cpd-form-root">
|
||||
<input type="hidden" name="csrf" value="{{ csrf_token }}" />
|
||||
<input type="hidden" name="action" value="link" />
|
||||
|
||||
{{ button.button(text=_("mas.upstream_oauth2.login_link.action")) }}
|
||||
</form>
|
||||
|
||||
</section>
|
||||
{% endblock content %}
|
||||
34
mas/share/templates/pages/upstream_oauth2/suggest_link.html
Normal file
34
mas/share/templates/pages/upstream_oauth2/suggest_link.html
Normal file
@@ -0,0 +1,34 @@
|
||||
{#
|
||||
Copyright 2024, 2025 New Vector Ltd.
|
||||
Copyright 2022-2024 The Matrix.org Foundation C.I.C.
|
||||
|
||||
SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
|
||||
Please see LICENSE files in the repository root for full details.
|
||||
-#}
|
||||
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<header class="page-heading">
|
||||
<div class="icon">
|
||||
{{ icon.link() }}
|
||||
</div>
|
||||
|
||||
<div class="header">
|
||||
<h1 class="title">{{ _("mas.upstream_oauth2.suggest_link.heading") }}</h1>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<section class="flex flex-col gap-6 justify-center">
|
||||
<form method="POST" class="cpd-form-root">
|
||||
<input type="hidden" name="csrf" value="{{ csrf_token }}" />
|
||||
<input type="hidden" name="action" value="link" />
|
||||
|
||||
{{ button.button(text=_("mas.upstream_oauth2.suggest_link.action")) }}
|
||||
</form>
|
||||
|
||||
{{ field.separator() }}
|
||||
|
||||
{{ logout.button(text=_("action.sign_out"), csrf_token=csrf_token, post_logout_action=post_logout_action) }}
|
||||
</section>
|
||||
{% endblock content %}
|
||||
Reference in New Issue
Block a user