Merge pull request #24271 from ruchamahabal/fix-user-slide
fix(setup wizard): allow setting user password for an existing user
This commit is contained in:
commit
53d4153bcd
2 changed files with 40 additions and 67 deletions
|
|
@ -476,18 +476,15 @@ frappe.setup.slides_settings = [
|
|||
|
||||
onload: function (slide) {
|
||||
if (frappe.session.user !== "Administrator") {
|
||||
slide.form.fields_dict.email.$wrapper.toggle(false);
|
||||
slide.form.fields_dict.password.$wrapper.toggle(false);
|
||||
|
||||
// remove password field
|
||||
delete slide.form.fields_dict.password;
|
||||
|
||||
if (frappe.boot.user.first_name || frappe.boot.user.last_name) {
|
||||
const { first_name, last_name, email } = frappe.boot.user;
|
||||
if (first_name || last_name) {
|
||||
slide.form.fields_dict.full_name.set_input(
|
||||
[frappe.boot.user.first_name, frappe.boot.user.last_name].join(" ").trim()
|
||||
[first_name, last_name].join(" ").trim()
|
||||
);
|
||||
}
|
||||
delete slide.form.fields_dict.email;
|
||||
slide.form.fields_dict.email.set_input(email);
|
||||
slide.form.fields_dict.email.df.read_only = 1;
|
||||
slide.form.fields_dict.email.refresh();
|
||||
} else {
|
||||
slide.form.fields_dict.email.df.reqd = 1;
|
||||
slide.form.fields_dict.email.refresh();
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ from frappe.utils.password import update_password
|
|||
from . import install_fixtures
|
||||
|
||||
|
||||
def get_setup_stages(args):
|
||||
def get_setup_stages(args): # nosemgrep
|
||||
|
||||
# App setup stage functions should not include frappe.db.commit
|
||||
# That is done by frappe after successful completion of all stages
|
||||
|
|
@ -104,18 +104,18 @@ def process_setup_stages(stages, user_input, is_background_task=False):
|
|||
frappe.flags.in_setup_wizard = False
|
||||
|
||||
|
||||
def update_global_settings(args):
|
||||
def update_global_settings(args): # nosemgrep
|
||||
if args.language and args.language != "English":
|
||||
set_default_language(get_language_code(args.lang))
|
||||
frappe.db.commit()
|
||||
frappe.clear_cache()
|
||||
|
||||
update_system_settings(args)
|
||||
update_user_name(args)
|
||||
create_or_update_user(args)
|
||||
set_timezone(args)
|
||||
|
||||
|
||||
def run_post_setup_complete(args):
|
||||
def run_post_setup_complete(args): # nosemgrep
|
||||
disable_future_access()
|
||||
frappe.db.commit()
|
||||
frappe.clear_cache()
|
||||
|
|
@ -124,20 +124,20 @@ def run_post_setup_complete(args):
|
|||
frappe.get_cached_doc("System Settings") and frappe.get_doc("System Settings")
|
||||
|
||||
|
||||
def run_setup_success(args):
|
||||
def run_setup_success(args): # nosemgrep
|
||||
for hook in frappe.get_hooks("setup_wizard_success"):
|
||||
frappe.get_attr(hook)(args)
|
||||
install_fixtures.install()
|
||||
|
||||
|
||||
def get_stages_hooks(args):
|
||||
def get_stages_hooks(args): # nosemgrep
|
||||
stages = []
|
||||
for method in frappe.get_hooks("setup_wizard_stages"):
|
||||
stages += frappe.get_attr(method)(args)
|
||||
return stages
|
||||
|
||||
|
||||
def get_setup_complete_hooks(args):
|
||||
def get_setup_complete_hooks(args): # nosemgrep
|
||||
return [
|
||||
{
|
||||
"status": "Executing method",
|
||||
|
|
@ -154,7 +154,7 @@ def get_setup_complete_hooks(args):
|
|||
]
|
||||
|
||||
|
||||
def handle_setup_exception(args):
|
||||
def handle_setup_exception(args): # nosemgrep
|
||||
frappe.db.rollback()
|
||||
if args:
|
||||
traceback = frappe.get_traceback(with_context=True)
|
||||
|
|
@ -163,7 +163,7 @@ def handle_setup_exception(args):
|
|||
frappe.get_attr(hook)(traceback, args)
|
||||
|
||||
|
||||
def update_system_settings(args):
|
||||
def update_system_settings(args): # nosemgrep
|
||||
number_format = get_country_info(args.get("country")).get("number_format", "#,###.##")
|
||||
|
||||
# replace these as float number formats, as they have 0 precision
|
||||
|
|
@ -194,72 +194,48 @@ def update_system_settings(args):
|
|||
frappe.db.set_default("session_recording_start", now())
|
||||
|
||||
|
||||
def update_user_name(args):
|
||||
def create_or_update_user(args): # nosemgrep
|
||||
email = args.get("email")
|
||||
first_name, last_name = args.get("full_name", ""), ""
|
||||
if " " in first_name:
|
||||
first_name, last_name = first_name.split(" ", 1)
|
||||
|
||||
if args.get("email"):
|
||||
if frappe.db.exists("User", args.get("email")):
|
||||
# running again
|
||||
return
|
||||
|
||||
args["name"] = args.get("email")
|
||||
|
||||
if user := frappe.db.get_value("User", email, ["first_name", "last_name"], as_dict=True):
|
||||
if user.first_name != first_name or user.last_name != last_name:
|
||||
(
|
||||
frappe.qb.update("User")
|
||||
.set("first_name", first_name)
|
||||
.set("last_name", last_name)
|
||||
.set("full_name", args.get("full_name"))
|
||||
).run()
|
||||
else:
|
||||
_mute_emails, frappe.flags.mute_emails = frappe.flags.mute_emails, True
|
||||
doc = frappe.get_doc(
|
||||
|
||||
user = frappe.new_doc("User")
|
||||
user.update(
|
||||
{
|
||||
"doctype": "User",
|
||||
"email": args.get("email"),
|
||||
"email": email,
|
||||
"first_name": first_name,
|
||||
"last_name": last_name,
|
||||
}
|
||||
)
|
||||
user.append_roles(*_get_default_roles())
|
||||
user.flags.no_welcome_mail = True
|
||||
user.insert()
|
||||
|
||||
doc.append_roles(*_get_default_roles())
|
||||
doc.flags.no_welcome_mail = True
|
||||
doc.insert()
|
||||
frappe.flags.mute_emails = _mute_emails
|
||||
update_password(args.get("email"), args.get("password"))
|
||||
|
||||
elif first_name:
|
||||
args.update({"name": frappe.session.user, "first_name": first_name, "last_name": last_name})
|
||||
|
||||
frappe.db.sql(
|
||||
"""update `tabUser` SET first_name=%(first_name)s,
|
||||
last_name=%(last_name)s WHERE name=%(name)s""",
|
||||
args,
|
||||
)
|
||||
|
||||
if args.get("attach_user"):
|
||||
attach_user = args.get("attach_user").split(",")
|
||||
if len(attach_user) == 3:
|
||||
filename, filetype, content = attach_user
|
||||
_file = frappe.get_doc(
|
||||
{
|
||||
"doctype": "File",
|
||||
"file_name": filename,
|
||||
"attached_to_doctype": "User",
|
||||
"attached_to_name": args.get("name"),
|
||||
"content": content,
|
||||
"decode": True,
|
||||
}
|
||||
)
|
||||
_file.save()
|
||||
fileurl = _file.file_url
|
||||
frappe.db.set_value("User", args.get("name"), "user_image", fileurl)
|
||||
|
||||
if args.get("name"):
|
||||
add_all_roles_to(args.get("name"))
|
||||
if args.get("password"):
|
||||
update_password(email, args.get("password"))
|
||||
|
||||
|
||||
def set_timezone(args):
|
||||
def set_timezone(args): # nosemgrep
|
||||
if args.get("timezone"):
|
||||
for name in frappe.STANDARD_USERS:
|
||||
frappe.db.set_value("User", name, "time_zone", args.get("timezone"))
|
||||
|
||||
|
||||
def parse_args(args):
|
||||
def parse_args(args): # nosemgrep
|
||||
if not args:
|
||||
args = frappe.local.form_dict
|
||||
if isinstance(args, str):
|
||||
|
|
@ -344,7 +320,7 @@ def load_user_details():
|
|||
}
|
||||
|
||||
|
||||
def prettify_args(args):
|
||||
def prettify_args(args): # nosemgrep
|
||||
# remove attachments
|
||||
for key, val in args.items():
|
||||
if isinstance(val, str) and "data:image" in val:
|
||||
|
|
@ -357,7 +333,7 @@ def prettify_args(args):
|
|||
return pretty_args
|
||||
|
||||
|
||||
def email_setup_wizard_exception(traceback, args):
|
||||
def email_setup_wizard_exception(traceback, args): # nosemgrep
|
||||
if not frappe.conf.setup_wizard_exception_email:
|
||||
return
|
||||
|
||||
|
|
@ -402,7 +378,7 @@ def email_setup_wizard_exception(traceback, args):
|
|||
)
|
||||
|
||||
|
||||
def log_setup_wizard_exception(traceback, args):
|
||||
def log_setup_wizard_exception(traceback, args): # nosemgrep
|
||||
with open("../logs/setup-wizard.log", "w+") as setup_log:
|
||||
setup_log.write(traceback)
|
||||
setup_log.write(json.dumps(args))
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue