* 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
45 lines
1 KiB
Python
45 lines
1 KiB
Python
import frappe
|
|
import frappe.defaults
|
|
from frappe.cache_manager import clear_defaults_cache
|
|
from frappe.twofactor import PARENT_FOR_DEFAULTS
|
|
from frappe.utils.password import encrypt
|
|
|
|
DOCTYPE = "DefaultValue"
|
|
OLD_PARENT = "__default"
|
|
|
|
|
|
def execute():
|
|
table = frappe.qb.DocType(DOCTYPE)
|
|
|
|
# set parent for `*_otplogin`
|
|
(
|
|
frappe.qb.update(table)
|
|
.set(table.parent, PARENT_FOR_DEFAULTS)
|
|
.where(table.parent == OLD_PARENT)
|
|
.where(table.defkey.like("%_otplogin"))
|
|
).run()
|
|
|
|
# update records for `*_otpsecret`
|
|
secrets = {
|
|
key: value
|
|
for key, value in frappe.defaults.get_defaults_for(parent=OLD_PARENT).items()
|
|
if key.endswith("_otpsecret")
|
|
}
|
|
|
|
if not secrets:
|
|
return
|
|
|
|
defvalue_cases = frappe.qb.terms.Case()
|
|
|
|
for key, value in secrets.items():
|
|
defvalue_cases.when(table.defkey == key, encrypt(value))
|
|
|
|
(
|
|
frappe.qb.update(table)
|
|
.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()
|