fix: renamed login without password to passwordless login

made text translatable in email template
This commit is contained in:
Shariq Ansari 2022-12-20 16:05:54 +05:30
parent 68baa81f3f
commit 83bf33c1fc
6 changed files with 42 additions and 36 deletions

View file

@ -39,7 +39,7 @@
"allow_login_using_mobile_number",
"allow_login_using_user_name",
"disable_user_pass_login",
"login_without_password",
"passwordless_login",
"allow_error_traceback",
"strip_exif_metadata_from_uploaded_images",
"allow_older_web_view_links",
@ -509,15 +509,15 @@
{
"default": "0",
"description": "User will be able to login using the link sent on the email",
"fieldname": "login_without_password",
"fieldname": "passwordless_login",
"fieldtype": "Check",
"label": "Login Without Password"
"label": "Passwordless Login"
}
],
"icon": "fa fa-cog",
"issingle": 1,
"links": [],
"modified": "2022-12-20 11:20:40.735668",
"modified": "2022-12-20 15:39:31.751704",
"modified_by": "Administrator",
"module": "Core",
"name": "System Settings",

View file

@ -7,7 +7,7 @@ body {
}
.for-forgot,
.for-login-without-password,
.for-passwordless-login,
.for-signup,
.for-email-login {
display: none;
@ -15,7 +15,7 @@ body {
.for-login,
.for-forgot,
.for-login-without-password,
.for-passwordless-login,
.for-signup,
.for-email-login {
padding: max(10vh, 60px) 0;

View file

@ -1,8 +1,8 @@
{% macro table(content, td_align, tb_color, tb_width) %}
<table cellpadding="0" cellspacing="0" width="{{ tb_width or '100%' }}" bgcolor="{{ tb_color or '' }}">
<table cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td align="{{ td_align or 'center' }}">
<td align="center">
{{ content }}
</td>
</tr>
@ -15,14 +15,18 @@
<tbody>
<tr>
<td align="center">
<div class="email-header-title">Click on the below button to login to {{ app_name }}</div>
<div>The link will expire in {{ minutes }} minutes</div>
<div class="email-header-title">
{{ _('Click on the button to log in to {0}').format(app_name) }}
</div>
<div>{{ _('The link will expire in {0} minutes').format(minutes) }}</div>
</td>
</tr>
<tr>
<td align="center">
<div class="btn btn-primary" style="margin-top: 30px;">
<a href="{{ link or '#'}}" style="color: #fff; text-decoration: none;">LOG IN TO {{ app_name.upper() }}</a>
<a href="{{ link or '#'}}" style="color: #fff; text-decoration: none;">
{{ _('LOG IN TO {0}').format(app_name.upper()) }}
</a>
</div>
</td>
</tr>
@ -32,7 +36,7 @@
{% macro footer() %}
<div class="email-footer">
<div>Thanks!</div>
<div>{{ _('Thanks!') }}</div>
<div style="font-size: 17px;"><strong>{{ app_name }}</strong></div>
</div>
{% endmacro %}

View file

@ -55,18 +55,18 @@ login.bind_events = function () {
return false;
});
$(".form-login-without-password").on("submit", function (event) {
$(".form-passwordless-login").on("submit", function (event) {
event.preventDefault();
var args = {};
args.cmd = "frappe.www.login.send_login_link";
args.email = ($("#login_without_password_email").val() || "").trim();
args.email = ($("#passwordless_login_email").val() || "").trim();
if (!args.email) {
login.set_status('{{ _("Valid Login id required.") }}', 'red');
return false;
}
login.call(args).then(() => {
login.set_status('{{ _("Login link sent to your email.") }}', 'blue');
$("#login_without_password_email").val("");
$("#passwordless_login_email").val("");
}).catch(() => {
login.set_status('{{ _("Send login link") }}', 'blue');
});
@ -113,7 +113,7 @@ login.reset_sections = function (hide) {
$("section.for-login").toggle(false);
$("section.for-email-login").toggle(false);
$("section.for-forgot").toggle(false);
$("section.for-login-without-password").toggle(false);
$("section.for-passwordless-login").toggle(false);
$("section.for-signup").toggle(false);
}
$('section:not(.signup-disabled) .indicator').each(function () {
@ -148,13 +148,13 @@ login.forgot = function () {
$("#forgot_email").focus();
}
login.loginWithoutPassword = function () {
login.passwordlessLogin = function () {
login.reset_sections();
if ($("#login_email").val()) {
$("#login_without_password_email").val($("#login_email").val());
$("#passwordless_login_email").val($("#login_email").val());
}
$(".for-login-without-password").toggle(true);
$("#login_without_password_email").focus();
$(".for-passwordless-login").toggle(true);
$("#passwordless_login_email").focus();
}
login.signup = function () {
@ -302,7 +302,7 @@ frappe.ready(function () {
$(window).trigger("hashchange");
}
$(".form-signup, .form-forgot, .form-login-without-password").removeClass("hide");
$(".form-signup, .form-forgot, .form-passwordless-login").removeClass("hide");
$(document).trigger('login_rendered');
});

View file

@ -80,7 +80,7 @@
<div class="login-content page-card">
{{ logo_section() }}
<form class="form-signin form-login" role="form">
{%- if social_login or login_without_password -%}
{%- if social_login or passwordless_login -%}
<div class="page-card-body">
<form class="form-signin form-login" role="form">
{{ email_login_body() }}
@ -101,12 +101,12 @@
</div>
{% endfor %}
</div>
<div class="login-without-password">
{% if login_without_password %}
<div class="passwordless_login">
{% if passwordless_login %}
<div class="login-button-wrapper">
<a href="#loginWithoutPassword"
class="btn btn-block btn-default btn-sm btn-login-option btn-login-without-password">
{{ _("Login without password") }}</a>
<a href="#passwordlessLogin"
class="btn btn-block btn-default btn-sm btn-login-option btn-passwordless_login">
{{ _("Passwordless Login") }}</a>
</div>
{% endif %}
</div>
@ -191,15 +191,15 @@
</div>
</section>
<section class='for-login-without-password'>
<section class='for-passwordless-login'>
<div class="login-content page-card">
<form class="form-signin form-login-without-password hide" role="form">
<form class="form-signin form-passwordless-login hide" role="form">
<div class="page-card-head">
<h4>{{ _('Login Without Password') }}</h4>
<h4>{{ _('Passwordless Login') }}</h4>
</div>
<div class="page-card-body">
<div class="email-field">
<input type="email" id="login_without_password_email" class="form-control"
<input type="email" id="passwordless_login_email" class="form-control"
placeholder="{{ _('Email Address') }}" required autofocus autocomplete="username">
<svg class="field-icon email-icon" width="20" height="20" viewBox="0 0 20 20" fill="none"
xmlns="http://www.w3.org/2000/svg">
@ -213,7 +213,7 @@
</div>
</div>
<div class="page-card-actions">
<button class="btn btn-sm btn-primary btn-block btn-login-without-password"
<button class="btn btn-sm btn-primary btn-block btn-passwordless-login"
type="submit">{{ _("Send login link") }}</button>
<p class="text-center sign-up-message">
<a href="#login">{{ _("Back to Login") }}</a>

View file

@ -102,7 +102,7 @@ def get_context(context):
context["login_label"] = f" {_('or')} ".join(login_label)
context["login_without_password"] = frappe.get_system_settings("login_without_password")
context["passwordless_login"] = frappe.get_system_settings("passwordless_login")
return context
@ -148,9 +148,11 @@ def login_via_token(login_token):
@frappe.whitelist(allow_guest=True)
def send_login_link(email: str, subject: str | None =None):
def send_login_link(email: str, subject: str | None = None):
if not frappe.db.exists("User", email):
frappe.throw("No registered account with this email address")
frappe.throw(
_("User with email address {0} does not exist").format(email), frappe.DoesNotExistError
)
key = frappe.generate_hash("Login Link", 20)
minutes = 10
@ -167,7 +169,7 @@ def send_login_link(email: str, subject: str | None =None):
frappe.sendmail(
subject=subject,
recipients=email,
template="login_without_password",
template="passwordless_login",
args={"link": link, "minutes": minutes, "app_name": app_name},
)