From 85a3837b14c78816c9647f180d761e09d18bce2d Mon Sep 17 00:00:00 2001 From: Sagar Vora Date: Thu, 21 Jul 2022 07:34:47 +0000 Subject: [PATCH] fix: ensure 2FA patch sets parent only for 2FA keys (#17575) * fix: ensure 2FA patch sets parent only for 2FA keys * fix: try to rebuild defaults * fix: set other app defaults as well * fix: set POS profile defaults * fix: exists params * chore: remove unnecessary change * fix: handle case where POS Profile doesnt exist * chore: move erpnext code to erpnext --- .../system_settings/system_settings.py | 15 +++++---- frappe/patches.txt | 1 + frappe/patches/v13_0/encrypt_2fa_secrets.py | 1 + .../patches/v13_0/reset_corrupt_defaults.py | 33 +++++++++++++++++++ 4 files changed, 44 insertions(+), 6 deletions(-) create mode 100644 frappe/patches/v13_0/reset_corrupt_defaults.py diff --git a/frappe/core/doctype/system_settings/system_settings.py b/frappe/core/doctype/system_settings/system_settings.py index fbdc188742..4bd41be974 100644 --- a/frappe/core/doctype/system_settings/system_settings.py +++ b/frappe/core/doctype/system_settings/system_settings.py @@ -44,12 +44,7 @@ class SystemSettings(Document): frappe.flags.update_last_reset_password_date = True def on_update(self): - for df in self.meta.get("fields"): - if df.fieldtype not in no_value_fields and self.has_value_changed(df.fieldname): - frappe.db.set_default(df.fieldname, self.get(df.fieldname)) - - if self.language: - set_default_language(self.language) + self.set_defaults() frappe.cache().delete_value("system_settings") frappe.cache().delete_value("time_zone") @@ -57,6 +52,14 @@ class SystemSettings(Document): if frappe.flags.update_last_reset_password_date: update_last_reset_password_date() + def set_defaults(self): + for df in self.meta.get("fields"): + if df.fieldtype not in no_value_fields and self.has_value_changed(df.fieldname): + frappe.db.set_default(df.fieldname, self.get(df.fieldname)) + + if self.language: + set_default_language(self.language) + def update_last_reset_password_date(): frappe.db.sql( diff --git a/frappe/patches.txt b/frappe/patches.txt index f79cadae87..ee2eb0d2a1 100644 --- a/frappe/patches.txt +++ b/frappe/patches.txt @@ -184,6 +184,7 @@ frappe.patches.v13_0.jinja_hook frappe.patches.v13_0.update_notification_channel_if_empty frappe.patches.v13_0.set_first_day_of_the_week frappe.patches.v13_0.encrypt_2fa_secrets +frappe.patches.v13_0.reset_corrupt_defaults execute:frappe.reload_doc('custom', 'doctype', 'custom_field') frappe.patches.v14_0.update_workspace2 # 20.09.2021 frappe.patches.v14_0.save_ratings_in_fraction #23-12-2021 diff --git a/frappe/patches/v13_0/encrypt_2fa_secrets.py b/frappe/patches/v13_0/encrypt_2fa_secrets.py index 3b220f485f..1814ff50c5 100644 --- a/frappe/patches/v13_0/encrypt_2fa_secrets.py +++ b/frappe/patches/v13_0/encrypt_2fa_secrets.py @@ -39,6 +39,7 @@ def execute(): .set(table.parent, PARENT_FOR_DEFAULTS) .set(table.defvalue, defvalue_cases) .where(table.parent == OLD_PARENT) + .where(table.defkey.like("%_otpsecret")) ).run() clear_defaults_cache() diff --git a/frappe/patches/v13_0/reset_corrupt_defaults.py b/frappe/patches/v13_0/reset_corrupt_defaults.py new file mode 100644 index 0000000000..10e81c7ff1 --- /dev/null +++ b/frappe/patches/v13_0/reset_corrupt_defaults.py @@ -0,0 +1,33 @@ +import frappe +from frappe.patches.v13_0.encrypt_2fa_secrets import DOCTYPE +from frappe.patches.v13_0.encrypt_2fa_secrets import PARENT_FOR_DEFAULTS as TWOFACTOR_PARENT +from frappe.utils import cint + + +def execute(): + """ + This patch is needed to fix parent incorrectly set as `__2fa` because of + https://github.com/frappe/frappe/commit/a822092211533ff17ff9b92dd86f6f868ed63e2e + """ + + if not frappe.db.get_value( + DOCTYPE, {"parent": TWOFACTOR_PARENT, "defkey": ("not like", "%_otp%")}, "defkey" + ): + return + + # system settings + system_settings = frappe.get_single("System Settings") + system_settings.set_defaults() + + # home page + frappe.db.set_default( + "desktop:home_page", "workspace" if cint(system_settings.setup_complete) else "setup-wizard" + ) + + # letter head + try: + letter_head = frappe.get_doc("Letter Head", {"is_default": 1}) + letter_head.set_as_default() + + except frappe.DoesNotExistError: + pass