make pages compatible with dark-theme
This commit is contained in:
parent
54ce1dc964
commit
70e842789e
|
@ -11,56 +11,58 @@
|
|||
{% endblock %}
|
||||
|
||||
{% block single_content %}
|
||||
<div class="bg-white p-6" style="margin: auto">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
|
||||
<div class="mb-2">
|
||||
Your account is protected with your security key (WebAuthn). <br><br>
|
||||
Follow your browser's steps to continue the sign-in process.
|
||||
</div>
|
||||
|
||||
<form id="formRegisterKey" method="post">
|
||||
{{ fido_token_form.csrf_token }}
|
||||
{{ fido_token_form.sk_assertion(class="form-control", placeholder="") }}
|
||||
</form>
|
||||
<div class="text-center">
|
||||
<button id="btnVerifyKey" class="btn btn-success mt-2">Use your security key</button>
|
||||
</div>
|
||||
|
||||
{% if enable_otp %}
|
||||
<div class="text-center text-muted mb-6" style="margin-top: 1em;">
|
||||
Don't have your key with you? <br> <a href="{{ url_for('auth.mfa') }}">Verify by One-Time Password</a>
|
||||
<div class="mb-2">
|
||||
Your account is protected with your security key (WebAuthn). <br><br>
|
||||
Follow your browser's steps to continue the sign-in process.
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<script>
|
||||
async function verifyKey () {
|
||||
$("#btnVerifyKey").prop('disabled', true);
|
||||
$("#btnVerifyKey").text('Waiting for Security Key...');
|
||||
|
||||
const credentialRequestOptions = transformCredentialRequestOptions(
|
||||
JSON.parse('{{webauthn_assertion_options|tojson|safe}}')
|
||||
)
|
||||
<form id="formRegisterKey" method="post">
|
||||
{{ fido_token_form.csrf_token }}
|
||||
{{ fido_token_form.sk_assertion(class="form-control", placeholder="") }}
|
||||
</form>
|
||||
<div class="text-center">
|
||||
<button id="btnVerifyKey" class="btn btn-success mt-2">Use your security key</button>
|
||||
</div>
|
||||
|
||||
let assertion;
|
||||
try {
|
||||
assertion = await navigator.credentials.get({
|
||||
publicKey: credentialRequestOptions
|
||||
});
|
||||
} catch (err) {
|
||||
toastr.error("An error occurred when we trying to verify your key.");
|
||||
$("#btnVerifyKey").prop('disabled', false);
|
||||
$("#btnVerifyKey").text('Use your security key');
|
||||
return console.error("Error when trying to get credential:", err);
|
||||
{% if enable_otp %}
|
||||
<div class="text-center text-muted mb-6" style="margin-top: 1em;">
|
||||
Don't have your key with you? <br> <a href="{{ url_for('auth.mfa') }}">Verify by One-Time Password</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<script>
|
||||
async function verifyKey() {
|
||||
$("#btnVerifyKey").prop('disabled', true);
|
||||
$("#btnVerifyKey").text('Waiting for Security Key...');
|
||||
|
||||
const credentialRequestOptions = transformCredentialRequestOptions(
|
||||
JSON.parse('{{webauthn_assertion_options|tojson|safe}}')
|
||||
)
|
||||
|
||||
let assertion;
|
||||
try {
|
||||
assertion = await navigator.credentials.get({
|
||||
publicKey: credentialRequestOptions
|
||||
});
|
||||
} catch (err) {
|
||||
toastr.error("An error occurred when we trying to verify your key.");
|
||||
$("#btnVerifyKey").prop('disabled', false);
|
||||
$("#btnVerifyKey").text('Use your security key');
|
||||
return console.error("Error when trying to get credential:", err);
|
||||
}
|
||||
|
||||
const skAssertion = transformAssertionForServer(assertion);
|
||||
$('#sk_assertion').val(JSON.stringify(skAssertion));
|
||||
$('#formRegisterKey').submit();
|
||||
}
|
||||
|
||||
const skAssertion = transformAssertionForServer(assertion);
|
||||
$('#sk_assertion').val(JSON.stringify(skAssertion));
|
||||
$('#formRegisterKey').submit();
|
||||
}
|
||||
|
||||
$("#btnVerifyKey").click(verifyKey);
|
||||
</script>
|
||||
$("#btnVerifyKey").click(verifyKey);
|
||||
</script>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
|
@ -7,33 +7,35 @@
|
|||
|
||||
|
||||
{% block single_content %}
|
||||
<div class="bg-white p-6" style="margin: auto">
|
||||
<div class="card">
|
||||
<div class="card-body p-6">
|
||||
|
||||
<div class="mb-2">
|
||||
Your account is protected with multi-factor authentication (MFA). <br><br>
|
||||
To continue with the sign-in you need to provide the access code from your authenticator.
|
||||
<div class="mb-2">
|
||||
Your account is protected with multi-factor authentication (MFA). <br><br>
|
||||
To continue with the sign-in you need to provide the access code from your authenticator.
|
||||
</div>
|
||||
|
||||
<form method="post">
|
||||
{{ otp_token_form.csrf_token }}
|
||||
<input type="hidden" name="form-name" value="create">
|
||||
|
||||
<div class="font-weight-bold mt-5">Token</div>
|
||||
<div class="small-text">Please enter the 6-digit number displayed in your MFA application
|
||||
(Google Authenticator, Authy, MyDigiPassword, etc) here
|
||||
</div>
|
||||
|
||||
{{ otp_token_form.token(class="form-control", autofocus="true") }}
|
||||
{{ render_field_errors(otp_token_form.token) }}
|
||||
<button class="btn btn-success mt-2">Validate</button>
|
||||
</form>
|
||||
|
||||
{% if enable_fido %}
|
||||
<div class="text-center text-muted mb-6" style="margin-top: 1em;">
|
||||
Having trouble with your authenticator? <br> <a href="{{ url_for('auth.fido') }}">Verify by your security
|
||||
key</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<form method="post">
|
||||
{{ otp_token_form.csrf_token }}
|
||||
<input type="hidden" name="form-name" value="create">
|
||||
|
||||
<div class="font-weight-bold mt-5">Token</div>
|
||||
<div class="small-text">Please enter the 6-digit number displayed in your MFA application
|
||||
(Google Authenticator, Authy, MyDigiPassword, etc) here
|
||||
</div>
|
||||
|
||||
{{ otp_token_form.token(class="form-control", autofocus="true") }}
|
||||
{{ render_field_errors(otp_token_form.token) }}
|
||||
<button class="btn btn-success mt-2">Validate</button>
|
||||
</form>
|
||||
|
||||
{% if enable_fido %}
|
||||
<div class="text-center text-muted mb-6" style="margin-top: 1em;">
|
||||
Having trouble with your authenticator? <br> <a href="{{ url_for('auth.fido') }}">Verify by your security key</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
|
@ -8,77 +8,79 @@
|
|||
{% endblock %}
|
||||
|
||||
{% block default_content %}
|
||||
<div class="bg-white p-6" style="max-width: 60em; margin: auto">
|
||||
<h1 class="h3 mb-5"> Billing </h1>
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<h1 class="h3 mb-5"> Billing </h1>
|
||||
|
||||
{% if sub.cancelled %}
|
||||
<p>
|
||||
You are on the <b>{{ sub.plan_name() }}</b> plan. <br>
|
||||
You have canceled your subscription and it will end on {{ sub.next_bill_date.strftime("%Y-%m-%d") }}
|
||||
</p>
|
||||
{% if sub.cancelled %}
|
||||
<p>
|
||||
You are on the <b>{{ sub.plan_name() }}</b> plan. <br>
|
||||
You have canceled your subscription and it will end on {{ sub.next_bill_date.strftime("%Y-%m-%d") }}
|
||||
</p>
|
||||
|
||||
<hr>
|
||||
<p>
|
||||
If you change your mind you can subscribe again to SimpleLogin but please note that this will be a completely
|
||||
new subscription and
|
||||
your payment method will be charged <b>immediately</b>.
|
||||
<br>
|
||||
<hr>
|
||||
<p>
|
||||
If you change your mind you can subscribe again to SimpleLogin but please note that this will be a completely
|
||||
new subscription and
|
||||
your payment method will be charged <b>immediately</b>.
|
||||
<br>
|
||||
|
||||
We are going to send you an email by the end of the subscription so maybe you can upgrade at that time.
|
||||
<br>
|
||||
<a href="{{ url_for('dashboard.pricing') }}" class="btn btn-primary mt-2">Re-subscribe</a>
|
||||
</p>
|
||||
We are going to send you an email by the end of the subscription so maybe you can upgrade at that time.
|
||||
<br>
|
||||
<a href="{{ url_for('dashboard.pricing') }}" class="btn btn-primary mt-2">Re-subscribe</a>
|
||||
</p>
|
||||
|
||||
{% else %}
|
||||
<p>
|
||||
You are on the <b>{{ sub.plan_name() }}</b> plan. Thank you very much for supporting
|
||||
SimpleLogin. 🙌 <br>
|
||||
The next billing cycle starts at {{ sub.next_bill_date.strftime("%Y-%m-%d") }}.
|
||||
</p>
|
||||
{% else %}
|
||||
<p>
|
||||
You are on the <b>{{ sub.plan_name() }}</b> plan. Thank you very much for supporting
|
||||
SimpleLogin. 🙌 <br>
|
||||
The next billing cycle starts at {{ sub.next_bill_date.strftime("%Y-%m-%d") }}.
|
||||
</p>
|
||||
|
||||
<div class="mt-3">
|
||||
Click here to update billing information on Paddle, our payment partner: <br>
|
||||
<a class="btn btn-outline-success mt-2" href="{{ sub.update_url }}"> Update billing information </a>
|
||||
</div>
|
||||
<hr>
|
||||
<div class="mt-6">
|
||||
<h4>Change Plan</h4>
|
||||
You can change the plan at any moment. <br>
|
||||
Please note that the new billing cycle starts instantly
|
||||
i.e. you will be charged <b>immediately</b> the annual fee when switching from monthly plan or vice-versa
|
||||
<b>without pro rata computation </b>. <br>
|
||||
<div class="mt-3">
|
||||
Click here to update billing information on Paddle, our payment partner: <br>
|
||||
<a class="btn btn-outline-success mt-2" href="{{ sub.update_url }}"> Update billing information </a>
|
||||
</div>
|
||||
<hr>
|
||||
<div class="mt-6">
|
||||
<h4>Change Plan</h4>
|
||||
You can change the plan at any moment. <br>
|
||||
Please note that the new billing cycle starts instantly
|
||||
i.e. you will be charged <b>immediately</b> the annual fee when switching from monthly plan or vice-versa
|
||||
<b>without pro rata computation </b>. <br>
|
||||
|
||||
To change the plan you can also cancel the current one and subscribe a new one <b>by the end</b> of this plan.
|
||||
To change the plan you can also cancel the current one and subscribe a new one <b>by the end</b> of this plan.
|
||||
|
||||
{% if sub.plan == PlanEnum.yearly %}
|
||||
<form method="post">
|
||||
<input type="hidden" name="form-name" value="change-monthly">
|
||||
<button class="btn btn-outline-primary mt-2">Change to Monthly Plan</button>
|
||||
</form>
|
||||
{% else %}
|
||||
<form method="post">
|
||||
<input type="hidden" name="form-name" value="change-yearly">
|
||||
<button class="btn btn-outline-primary mt-2">Change to Yearly Plan</button>
|
||||
</form>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<div>
|
||||
<h4>Cancel subscription</h4>
|
||||
Don't want to protect your inbox anymore? <br>
|
||||
|
||||
{% if sub.plan == PlanEnum.yearly %}
|
||||
<form method="post">
|
||||
<input type="hidden" name="form-name" value="change-monthly">
|
||||
<button class="btn btn-outline-primary mt-2">Change to Monthly Plan</button>
|
||||
</form>
|
||||
{% else %}
|
||||
<form method="post">
|
||||
<input type="hidden" name="form-name" value="change-yearly">
|
||||
<button class="btn btn-outline-primary mt-2">Change to Yearly Plan</button>
|
||||
</form>
|
||||
{% endif %}
|
||||
</div>
|
||||
<input type="hidden" name="form-name" value="cancel">
|
||||
|
||||
<hr>
|
||||
|
||||
<div>
|
||||
<h4>Cancel subscription</h4>
|
||||
Don't want to protect your inbox anymore? <br>
|
||||
|
||||
<form method="post">
|
||||
<input type="hidden" name="form-name" value="cancel">
|
||||
|
||||
<span class="cancel btn btn-outline-danger mt-2">
|
||||
<span class="cancel btn btn-outline-danger mt-2">
|
||||
Cancel subscription <i class="fe fe-alert-triangle text-danger"></i>
|
||||
</span>
|
||||
</form>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
|
|
|
@ -7,84 +7,86 @@
|
|||
{% endblock %}
|
||||
|
||||
{% block default_content %}
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<h1 class="h3">New Email Alias</h1>
|
||||
|
||||
<div class="bg-white p-6 mt-5" style="max-width: 55em; margin: auto">
|
||||
<h1 class="h3 mb-5">New Email Alias</h1>
|
||||
|
||||
{% if user_custom_domains|length == 0 and not DISABLE_ALIAS_SUFFIX %}
|
||||
<div class="row">
|
||||
<div class="col p-1">
|
||||
<div class="alert alert-primary" role="alert">
|
||||
You might notice a random word after the dot(<em>.</em>) in the alias.
|
||||
This part is to avoid a person taking all the "nice" aliases like <b>hello@{{ FIRST_ALIAS_DOMAIN }}</b>,
|
||||
<b>me@{{ FIRST_ALIAS_DOMAIN }}</b>, etc. <br>
|
||||
If you add your own domain, this restriction is removed and you can fully customize the alias. <br>
|
||||
{% if user_custom_domains|length == 0 and not DISABLE_ALIAS_SUFFIX %}
|
||||
<div class="row">
|
||||
<div class="col p-1">
|
||||
<div class="alert alert-primary" role="alert">
|
||||
You might notice a random word after the dot(<em>.</em>) in the alias.
|
||||
This part is to avoid a person taking all the "nice" aliases like
|
||||
<b>hello@{{ FIRST_ALIAS_DOMAIN }}</b>,
|
||||
<b>me@{{ FIRST_ALIAS_DOMAIN }}</b>, etc. <br>
|
||||
If you add your own domain, this restriction is removed and you can fully customize the alias. <br>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
<form method="post">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6 mb-1 p-1" style="min-width: 4em">
|
||||
<input name="prefix" class="form-control"
|
||||
type="text"
|
||||
pattern="[0-9a-z-_]{1,}"
|
||||
title="Only lowercase letter, number, dash (-), underscore (_) can be used in alias prefix."
|
||||
placeholder="email alias, for example newsletter-123_xyz"
|
||||
autofocus required>
|
||||
<div class="small-text">
|
||||
Only lowercase letter, number, dash (-), underscore (_) can be used.
|
||||
<form method="post">
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-6 mb-1 p-1" style="min-width: 4em">
|
||||
<input name="prefix" class="form-control"
|
||||
type="text"
|
||||
pattern="[0-9a-z-_]{1,}"
|
||||
title="Only lowercase letter, number, dash (-), underscore (_) can be used in alias prefix."
|
||||
placeholder="email alias, for example newsletter-123_xyz"
|
||||
autofocus required>
|
||||
<div class="small-text">
|
||||
Only lowercase letter, number, dash (-), underscore (_) can be used.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="col-sm-6 p-1">
|
||||
<select class="form-control" name="suffix">
|
||||
{% for suffix in suffixes %}
|
||||
<option value="{{ suffix[2] }}">
|
||||
{% if suffix[0] %}
|
||||
{{ suffix[1] }} (your domain)
|
||||
{% else %}
|
||||
{{ suffix[1] }}
|
||||
{% endif %}
|
||||
</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="col-sm-6 p-1">
|
||||
<select class="form-control" name="suffix">
|
||||
{% for suffix in suffixes %}
|
||||
<option value="{{ suffix[2] }}">
|
||||
{% if suffix[0] %}
|
||||
{{ suffix[1] }} (your domain)
|
||||
{% else %}
|
||||
{{ suffix[1] }}
|
||||
{% endif %}
|
||||
</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-2">
|
||||
<div class="col p-1">
|
||||
<select class="form-control" name="mailbox">
|
||||
{% for mailbox in mailboxes %}
|
||||
<option value="{{ mailbox }}">
|
||||
{{ mailbox }}
|
||||
</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
<div class="small-text">
|
||||
The mailbox that owns this alias.
|
||||
<div class="row mb-2">
|
||||
<div class="col p-1">
|
||||
<select class="form-control" name="mailbox">
|
||||
{% for mailbox in mailboxes %}
|
||||
<option value="{{ mailbox }}">
|
||||
{{ mailbox }}
|
||||
</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
<div class="small-text">
|
||||
The mailbox that owns this alias.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-2">
|
||||
<div class="col p-1">
|
||||
<div class="row mb-2">
|
||||
<div class="col p-1">
|
||||
<textarea name="note"
|
||||
class="form-control"
|
||||
rows="3"
|
||||
placeholder="Note, can be anything to help you remember WHY you create this alias. This field is optional."></textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="row">
|
||||
<div class="col p-1">
|
||||
<button class="btn btn-primary mt-1">Create</button>
|
||||
<div class="row">
|
||||
<div class="col p-1">
|
||||
<button class="btn btn-primary mt-1">Create</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
2️⃣ Quickly use one of the following formats to create an alias on-the-fly <b>without creating this alias
|
||||
beforehand</b>
|
||||
</div>
|
||||
<div class="pl-3 py-2 bg-white">
|
||||
<div class="pl-3 py-2 bg-secondary">
|
||||
<em>my_dir/<b>anything</b>@{{ FIRST_ALIAS_DOMAIN }}</em> or <br>
|
||||
<em>my_dir+<b>anything</b>@{{ FIRST_ALIAS_DOMAIN }}</em> or <br>
|
||||
<em>my_dir#<b>anything</b>@{{ FIRST_ALIAS_DOMAIN }}</em> <br>
|
||||
|
|
|
@ -6,22 +6,23 @@
|
|||
|
||||
|
||||
{% block default_content %}
|
||||
<div class="bg-white p-6" style="max-width: 60em; margin: auto">
|
||||
<h1 class="h2">Unlink Your Security Key</h1>
|
||||
<p>
|
||||
Please enter the password of your account so that we can ensure it's you.
|
||||
</p>
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<h1 class="h2">Unlink Your Security Key</h1>
|
||||
<p>
|
||||
Please enter the password of your account so that we can ensure it's you.
|
||||
</p>
|
||||
|
||||
<form method="post">
|
||||
{{ password_check_form.csrf_token }}
|
||||
<form method="post">
|
||||
{{ password_check_form.csrf_token }}
|
||||
|
||||
<div class="font-weight-bold mt-5">Password</div>
|
||||
|
||||
{{ password_check_form.password(class="form-control", autofocus="true") }}
|
||||
{{ render_field_errors(password_check_form.password) }}
|
||||
<button class="btn btn-lg btn-danger mt-2">Unlink Key</button>
|
||||
</form>
|
||||
<div class="font-weight-bold mt-5">Password</div>
|
||||
|
||||
{{ password_check_form.password(class="form-control", autofocus="true") }}
|
||||
{{ render_field_errors(password_check_form.password) }}
|
||||
<button class="btn btn-lg btn-danger mt-2">Unlink Key</button>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
|
@ -11,48 +11,50 @@
|
|||
{% endblock %}
|
||||
|
||||
{% block default_content %}
|
||||
<div class="bg-white p-6" style="max-width: 60em; margin: auto">
|
||||
<h1 class="h2 text-center">Register Your Security Key</h1>
|
||||
<p class="text-center">Follow your browser's steps to register your security key with SimpleLogin</p>
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<h1 class="h2 text-center">Register Your Security Key</h1>
|
||||
<p class="text-center">Follow your browser's steps to register your security key with SimpleLogin</p>
|
||||
|
||||
<form id="formRegisterKey" method="post">
|
||||
{{ fido_token_form.csrf_token }}
|
||||
{{ fido_token_form.sk_assertion(class="form-control", placeholder="") }}
|
||||
</form>
|
||||
<div class="text-center">
|
||||
<button id="btnRegisterKey" class="btn btn-lg btn-primary mt-2">Register Key</button>
|
||||
</div>
|
||||
<form id="formRegisterKey" method="post">
|
||||
{{ fido_token_form.csrf_token }}
|
||||
{{ fido_token_form.sk_assertion(class="form-control", placeholder="") }}
|
||||
</form>
|
||||
<div class="text-center">
|
||||
<button id="btnRegisterKey" class="btn btn-lg btn-primary mt-2">Register Key</button>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
async function registerKey () {
|
||||
$("#btnRegisterKey").prop('disabled', true);
|
||||
$("#btnRegisterKey").text('Waiting for Security Key...');
|
||||
<script>
|
||||
async function registerKey() {
|
||||
$("#btnRegisterKey").prop('disabled', true);
|
||||
$("#btnRegisterKey").text('Waiting for Security Key...');
|
||||
|
||||
const pkCredentialCreateOptions = transformCredentialCreateOptions(
|
||||
JSON.parse('{{credential_create_options|tojson|safe}}')
|
||||
)
|
||||
const pkCredentialCreateOptions = transformCredentialCreateOptions(
|
||||
JSON.parse('{{credential_create_options|tojson|safe}}')
|
||||
)
|
||||
|
||||
let credential
|
||||
try {
|
||||
credential = await navigator.credentials.create({
|
||||
publicKey: pkCredentialCreateOptions
|
||||
});
|
||||
} catch (err) {
|
||||
toastr.error("An error occurred when we trying to register your key.");
|
||||
$("#btnRegisterKey").prop('disabled', false);
|
||||
$("#btnRegisterKey").text('Register Key');
|
||||
return console.error("Error when trying to create credential:", err);
|
||||
let credential
|
||||
try {
|
||||
credential = await navigator.credentials.create({
|
||||
publicKey: pkCredentialCreateOptions
|
||||
});
|
||||
} catch (err) {
|
||||
toastr.error("An error occurred when we trying to register your key.");
|
||||
$("#btnRegisterKey").prop('disabled', false);
|
||||
$("#btnRegisterKey").text('Register Key');
|
||||
return console.error("Error when trying to create credential:", err);
|
||||
}
|
||||
|
||||
const skAssertion = transformNewAssertionForServer(credential);
|
||||
|
||||
$('#sk_assertion').val(JSON.stringify(skAssertion));
|
||||
$('#formRegisterKey').submit();
|
||||
}
|
||||
|
||||
const skAssertion = transformNewAssertionForServer(credential);
|
||||
|
||||
$('#sk_assertion').val(JSON.stringify(skAssertion));
|
||||
$('#formRegisterKey').submit();
|
||||
}
|
||||
|
||||
$("#btnRegisterKey").click(registerKey);
|
||||
$('document').ready(registerKey());
|
||||
</script>
|
||||
$("#btnRegisterKey").click(registerKey);
|
||||
$('document').ready(registerKey());
|
||||
</script>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
|
@ -7,20 +7,22 @@
|
|||
{% endblock %}
|
||||
|
||||
{% block default_content %}
|
||||
<div class="bg-white p-6" style="max-width: 60em; margin: auto">
|
||||
<h1 class="h2">Lifetime Licence</h1>
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<h1 class="h3">Lifetime Licence</h1>
|
||||
|
||||
<div class="mb-4">
|
||||
If you have a lifetime licence, please paste it here. <br>
|
||||
<div class="mb-4">
|
||||
If you have a lifetime licence, please paste it here. <br>
|
||||
</div>
|
||||
|
||||
<form method="post">
|
||||
{{ coupon_form.csrf_token }}
|
||||
|
||||
{{ coupon_form.code(class="form-control", placeholder="Licence Code") }}
|
||||
{{ render_field_errors(coupon_form.code) }}
|
||||
<button class="btn btn-success mt-2">Apply</button>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<form method="post">
|
||||
{{ coupon_form.csrf_token }}
|
||||
|
||||
{{ coupon_form.code(class="form-control", placeholder="Licence Code") }}
|
||||
{{ render_field_errors(coupon_form.code) }}
|
||||
<button class="btn btn-success mt-2">Apply</button>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
|
@ -6,24 +6,25 @@
|
|||
|
||||
|
||||
{% block default_content %}
|
||||
<div class="bg-white p-6" style="max-width: 60em; margin: auto">
|
||||
<h1 class="h2">Multi Factor Authentication</h1>
|
||||
<p>
|
||||
To cancel MFA, please enter the 6-digit number in your TOTP application
|
||||
(Google Authenticator, Authy, MyDigiPassword, etc) here.
|
||||
</p>
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<h1 class="h2">Multi Factor Authentication</h1>
|
||||
<p>
|
||||
To cancel MFA, please enter the 6-digit number in your TOTP application
|
||||
(Google Authenticator, Authy, MyDigiPassword, etc) here.
|
||||
</p>
|
||||
|
||||
<form method="post">
|
||||
{{ otp_token_form.csrf_token }}
|
||||
<form method="post">
|
||||
{{ otp_token_form.csrf_token }}
|
||||
|
||||
<div class="font-weight-bold mt-5">Token</div>
|
||||
<div class="small-text">The 6-digit number displayed on your phone.</div>
|
||||
|
||||
{{ otp_token_form.token(class="form-control", autofocus="true") }}
|
||||
{{ render_field_errors(otp_token_form.token) }}
|
||||
<button class="btn btn-lg btn-danger mt-2">Cancel MFA</button>
|
||||
</form>
|
||||
<div class="font-weight-bold mt-5">Token</div>
|
||||
<div class="small-text">The 6-digit number displayed on your phone.</div>
|
||||
|
||||
{{ otp_token_form.token(class="form-control", autofocus="true") }}
|
||||
{{ render_field_errors(otp_token_form.token) }}
|
||||
<button class="btn btn-lg btn-danger mt-2">Cancel MFA</button>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
|
@ -9,43 +9,42 @@
|
|||
{% endblock %}
|
||||
|
||||
{% block default_content %}
|
||||
<div class="bg-white p-6" style="max-width: 60em; margin: auto">
|
||||
<h1 class="h2">Multi Factor Authentication</h1>
|
||||
<p>Please open a TOTP application (Google Authenticator, Authy, MyDigiPassword, etc)
|
||||
on your smartphone and scan the following QR Code:
|
||||
</p>
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<h1 class="h3">Multi Factor Authentication</h1>
|
||||
<p>Please open a TOTP application (Google Authenticator, Authy, MyDigiPassword, etc)
|
||||
on your smartphone and scan the following QR Code:
|
||||
</p>
|
||||
|
||||
<canvas id="qr"></canvas>
|
||||
<canvas id="qr"></canvas>
|
||||
|
||||
<script>
|
||||
(function () {
|
||||
var qr = new QRious({
|
||||
element: document.getElementById('qr'),
|
||||
value: '{{otp_uri}}'
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
<script>
|
||||
(function () {
|
||||
var qr = new QRious({
|
||||
element: document.getElementById('qr'),
|
||||
value: '{{otp_uri}}'
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
|
||||
<div class="mt-3 mb-2">
|
||||
Or you can use the manual entry with the following key:
|
||||
</div>
|
||||
|
||||
<input class="form-control" disabled value="{{ current_user.otp_secret }}">
|
||||
|
||||
|
||||
<form method="post">
|
||||
{{ otp_token_form.csrf_token }}
|
||||
|
||||
<div class="font-weight-bold mt-5">Token</div>
|
||||
<div class="small-text">Please enter the 6-digit number displayed on your phone.</div>
|
||||
|
||||
{{ otp_token_form.token(class="form-control", placeholder="") }}
|
||||
{{ render_field_errors(otp_token_form.token) }}
|
||||
<button class="btn btn-lg btn-success mt-2">Validate</button>
|
||||
</form>
|
||||
|
||||
<div class="mt-3 mb-2">
|
||||
Or you can use the manual entry with the following key:
|
||||
</div>
|
||||
|
||||
<div class="mb-3 p-3" style="background-color: #eee">
|
||||
{{ current_user.otp_secret }}
|
||||
</div>
|
||||
|
||||
|
||||
<form method="post">
|
||||
{{ otp_token_form.csrf_token }}
|
||||
|
||||
<div class="font-weight-bold mt-5">Token</div>
|
||||
<div class="small-text">Please enter the 6-digit number displayed on your phone.</div>
|
||||
|
||||
{{ otp_token_form.token(class="form-control", placeholder="") }}
|
||||
{{ render_field_errors(otp_token_form.token) }}
|
||||
<button class="btn btn-lg btn-success mt-2">Validate</button>
|
||||
</form>
|
||||
|
||||
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
|
@ -8,20 +8,22 @@
|
|||
|
||||
{% block default_content %}
|
||||
|
||||
<div class="col-md-6 offset-md-3 text-center bg-white p-3 mt-5">
|
||||
<h1 class="h3">
|
||||
Block alias
|
||||
</h1>
|
||||
<p>
|
||||
You are about to block the alias <a href="mailto:{{alias}}">{{alias}}</a>
|
||||
</p>
|
||||
<p>
|
||||
After this, you will stop receiving all emails sent to this alias, please confirm.
|
||||
</p>
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<h1 class="h3">
|
||||
Block alias
|
||||
</h1>
|
||||
<p>
|
||||
You are about to block the alias <a href="mailto:{{ alias }}">{{ alias }}</a>
|
||||
</p>
|
||||
<p>
|
||||
After this, you will stop receiving all emails sent to this alias, please confirm.
|
||||
</p>
|
||||
|
||||
<form method="post">
|
||||
<button class="btn btn-warning">Confirm</button>
|
||||
</form>
|
||||
<form method="post">
|
||||
<button class="btn btn-warning">Confirm</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,61 +1,64 @@
|
|||
{% extends "base.html" %}
|
||||
|
||||
{% block content %}
|
||||
<div class="bg-white p-6" style="margin: auto; max-width: 600px">
|
||||
<div class="text-center mb-6">
|
||||
<a href="https://simplelogin.io">
|
||||
<img src="/static/logo.svg" style="background-color: transparent; height: 24px">
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<b>{{ client.name }}</b> would like to have access to your following data:
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<ul class="mt-3">
|
||||
{% for scope in client.get_scopes() %}
|
||||
<li>
|
||||
{% if scope == Scope.AVATAR_URL %}
|
||||
avatar
|
||||
{% else %}
|
||||
{{ scope.value }}
|
||||
{% endif %}
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
In order to accept the request, you need to sign in.
|
||||
</div>
|
||||
|
||||
<div class="mt-4">
|
||||
<div class="btn-group w-100">
|
||||
|
||||
<a href="{{ url_for('auth.login', next=next) }}" class="btn btn-success">
|
||||
Login
|
||||
</a>
|
||||
|
||||
<a href="{{ url_for('auth.register', next=next) }}" class="btn btn-info">
|
||||
Sign Up
|
||||
<div class="card mx-auto" style="max-width: 600px">
|
||||
<div class="card-body">
|
||||
<div class="text-center mb-6">
|
||||
<a href="https://simplelogin.io">
|
||||
<img src="/static/logo.svg" style="background-color: transparent; height: 24px">
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<b>{{ client.name }}</b> would like to have access to your following data:
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<ul class="mt-3">
|
||||
{% for scope in client.get_scopes() %}
|
||||
<li>
|
||||
{% if scope == Scope.AVATAR_URL %}
|
||||
avatar
|
||||
{% else %}
|
||||
{{ scope.value }}
|
||||
{% endif %}
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
In order to accept the request, you need to sign in.
|
||||
</div>
|
||||
|
||||
<div class="mt-4">
|
||||
<div class="btn-group w-100">
|
||||
|
||||
<a href="{{ url_for('auth.login', next=next) }}" class="btn btn-success">
|
||||
Login
|
||||
</a>
|
||||
|
||||
<a href="{{ url_for('auth.register', next=next) }}" class="btn btn-info">
|
||||
Sign Up
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<div class="">
|
||||
<p class="text-center col">Cancel and go back to <b>{{ client.name }}</b></p>
|
||||
<a class="btn btn-block btn-secondary back-or-close">
|
||||
<i class="fe fe-arrow-left mr-2"></i>Cancel
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="small-text mt-4">
|
||||
<a href="https://simplelogin.io">SimpleLogin</a> is an open source social login provider that protects your
|
||||
privacy.
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<div class="">
|
||||
<p class="text-center col">Cancel and go back to <b>{{ client.name }}</b></p>
|
||||
<a class="btn btn-block btn-secondary back-or-close">
|
||||
<i class="fe fe-arrow-left mr-2"></i>Cancel
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="small-text mt-4">
|
||||
<a href="https://simplelogin.io">SimpleLogin</a> is an open source social login provider that protects your privacy.
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
||||
|
|
Loading…
Reference in New Issue