fix otp method to default in User doctype

This commit is contained in:
crossxcell99 2017-07-07 12:27:29 +01:00
parent 9741ca7dcf
commit fbd8218dff
3 changed files with 13 additions and 23 deletions

View file

@ -139,13 +139,14 @@ class LoginManager:
restrict_method = frappe.db.get_value('System Settings', None, 'fix_2fa_method')
verification_meth = frappe.db.get_value('User', self.user, 'two_factor_method')
fixed_method = [frappe._dict()]
if restrict_method:
if int(restrict_method):
try:
fixed_method = frappe.db.sql('''SELECT DEFAULT(two_factor_method) AS 'default_method' FROM
(SELECT 1) AS dummy LEFT JOIN tabUser on True LIMIT 1;''', as_dict=1)
except OperationalError:
fixed_method = [frappe._dict()]
pass
if not verification_meth:
verification_method = fixed_method[0].default_method or 'OTP App'
@ -167,7 +168,7 @@ class LoginManager:
elif verification_method == 'OTP App':
totp_uri = False
if frappe.db.get_default(self.user + '_otpsecret', otp_secret):
if frappe.db.get_default(self.user + '_otplogin'):
totp_uri = pyotp.TOTP(otp_secret).provisioning_uri(self.user, issuer_name="Estate Manager")
verification_obj = {'token_delivery': True,
@ -194,7 +195,7 @@ class LoginManager:
'token_delivery': True,
'prompt': False,
'totp_uri': totp_uri,
'restrict_method': fixed_method[0].default_method or 'OTP App'
'restrict_method': int(restrict_method) and (fixed_method[0].default_method or 'OTP App')
}
tmp_id = frappe.generate_hash(length=8)
@ -211,7 +212,7 @@ class LoginManager:
frappe.cache().set(tmp_id + '_user', self.user)
for field in [tmp_id + nm for nm in ['_usr', '_pwd', '_otp_secret', '_user']]:
frappe.cache().expire(field,120)
frappe.cache().expire(field,180)
frappe.local.response['tmp_id'] = tmp_id
@ -228,8 +229,8 @@ class LoginManager:
}
self.authenticate(user=tmp_info['usr'], pwd=tmp_info['pwd'])
except:
frappe.log_error(frappe.get_traceback(),"AUTHENTICATION PROBLEM")
pass
# frappe.log_error(frappe.get_traceback(),"AUTHENTICATION PROBLEM")
self.post_login()
def post_login(self,no_two_auth=False):
@ -247,9 +248,9 @@ class LoginManager:
def confirm_token(self,otp=None, tmp_id=None, hotp_token=False):
try:
otp_secret = frappe.cache().get(tmp_id + '_otp_secret') or frappe.db.get_default(self.user + '_otpsecret')
otp_secret = frappe.cache().get(tmp_id + '_otp_secret')
if not otp_secret:
return False
frappe.throw('Login session expired, please refresh page to try again')
except AttributeError:
return False

View file

@ -1729,7 +1729,7 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
"default": "OTP App",
"default": "SMS",
"fieldname": "two_factor_method",
"fieldtype": "Select",
"hidden": 0,
@ -2003,8 +2003,8 @@
"istable": 0,
"max_attachments": 5,
"menu_index": 0,
"modified": "2017-07-04 15:53:25.877843",
"modified_by": "Administrator",
"modified": "2017-07-07 11:31:54.900879",
"modified_by": "crossxcell99@gmail.com",
"module": "Core",
"name": "User",
"owner": "Administrator",

View file

@ -57,7 +57,6 @@ class User(Document):
self.validate_email_type(self.name)
self.add_system_manager_role()
self.set_system_user()
self.set_two_factor_auth()
self.set_full_name()
self.check_enable_disable()
self.ensure_unique_roles()
@ -147,16 +146,6 @@ class User(Document):
else:
self.user_type = 'Website User'
def set_two_factor_auth(self):
'''Set two factor authentication for user'''
if (len(frappe.db.sql("""select name
from `tabRole` where two_factor_auth=1
and name in ({0}) limit 1""".format(', '.join(['%s'] * len(self.roles))),
[d.role for d in self.roles]))):
self.two_factor_auth = 1
else:
self.two_factor_auth = 0
def has_desk_access(self):
'''Return true if any of the set roles has desk access'''
if not self.roles: