seitime-frappe/frappe/patches/v13_0/encrypt_2fa_secrets.py
Sagar Vora 85a3837b14
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
2022-07-21 13:04:47 +05:30

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()