device detection

This commit is contained in:
aitzol 2023-04-04 20:26:56 +02:00
parent 93f79cb4f0
commit 6968957159
6 changed files with 16 additions and 15 deletions

31
app.py
View File

@ -186,8 +186,8 @@ def post_signup():
elif form('password') != form('confirm-password'): elif form('password') != form('confirm-password'):
return error(i18n.msg[7]) return error(i18n.msg[7])
try: try:
account_request(username, firstname, surname, form('password'), email, isFake) account_request(username, firstname, surname, form('password'), email, isFake, get_dev())
except Error as e: except Error as e:
LOG.warning("Unsuccessful attempt to create an account for %s: %s" % (form('username'), e)) LOG.warning("Unsuccessful attempt to create an account for %s: %s" % (form('username'), e))
return error(str(e)) return error(str(e))
@ -444,14 +444,14 @@ def logout_user_ldap(conf, username):
LOG.info("%s LOGED OUT" % (username)) LOG.info("%s LOGED OUT" % (username))
#SIGN UP #SIGN UP
def account_request(username, firstname, surname, password, email, isFake): def account_request(username, firstname, surname, password, email, isFake, device):
created = [] created = []
for key in (key for key in CONF.sections() for key in (key for key in CONF.sections()
if key == 'ldap' or key.startswith('ldap:')): if key == 'ldap' or key.startswith('ldap:')):
LOG.debug("Creating account for %s on %s server" % (username, key)) LOG.debug("Creating account for %s on %s server" % (username, key))
try: try:
new_user_account(CONF[key], username, firstname, surname, password, email, isFake) new_user_account(CONF[key], username, firstname, surname, password, email, isFake, device)
created.append(key) created.append(key)
except Error as e: except Error as e:
for key in reversed(created): for key in reversed(created):
@ -478,7 +478,7 @@ def new_user_account(conf, *args):
LOG.error('{}: {!s}'.format(e.__class__.__name__, e)) LOG.error('{}: {!s}'.format(e.__class__.__name__, e))
raise Error(i18n.msg[23]) raise Error(i18n.msg[23])
def register(conf, username, firstname, surname, password, email, isFake): def register(conf, username, firstname, surname, password, email, isFake, device):
def to_ascii(str): def to_ascii(str):
ascii_str="" ascii_str=""
@ -509,7 +509,8 @@ def register(conf, username, firstname, surname, password, email, isFake):
uidNumber = find_uid_number(conf,c)+1 uidNumber = find_uid_number(conf,c)+1
directory = 'home/user/'+to_ascii(username) directory = 'home/user/'+to_ascii(username)
OBJECT_CLASS = ['top', 'inetOrgPerson', 'posixAccount', 'accountsManagement'] OBJECT_CLASS = ['top', 'inetOrgPerson', 'posixAccount', 'accountsManagement']
attributes = {'gidNumber': '501', 'uidNumber': uidNumber, 'homeDirectory': directory, 'givenName': firstname, 'sn': surname, 'uid' : username, 'mail': email, 'active': False, 'fakeCn': isFake} attributes = {'gidNumber': '501', 'uidNumber': uidNumber, 'homeDirectory': directory, 'givenName':
firstname, 'sn': surname, 'uid' : username, 'mail': email, 'active': False, 'fakeCn': isFake, 'device':device}
new_user_dn = "cn="+firstname+" "+surname+" - "+username+",cn=users,"+conf['base'] new_user_dn = "cn="+firstname+" "+surname+" - "+username+",cn=users,"+conf['base']
c.add(dn=new_user_dn,object_class=OBJECT_CLASS, attributes=attributes) c.add(dn=new_user_dn,object_class=OBJECT_CLASS, attributes=attributes)
#create/change user password #create/change user password
@ -785,7 +786,7 @@ def get_user_email_array(user_dn, conn, old_email, new_email):
def get_user_data(user_dn, conn): def get_user_data(user_dn, conn):
search_filter = '(objectClass=*)' search_filter = '(objectClass=*)'
conn.search(user_dn, search_filter, attributes=['active','fakeCn','givenName','sn','uid','mail']) conn.search(user_dn, search_filter, attributes=['active','fakeCn','givenName','sn','uid','mail','device'])
data = [] data = []
data.append(conn.entries[0].active.values[0]) data.append(conn.entries[0].active.values[0])
data.append(conn.entries[0].fakeCn.values[0]) data.append(conn.entries[0].fakeCn.values[0])
@ -793,6 +794,7 @@ def get_user_data(user_dn, conn):
data.append(conn.entries[0].sn.values[0]) data.append(conn.entries[0].sn.values[0])
data.append(conn.entries[0].uid.values[0]) data.append(conn.entries[0].uid.values[0])
data.append(conn.entries[0].mail.values[0]) data.append(conn.entries[0].mail.values[0])
data.append(conn.entries[0].device.values)
return(data) return(data)
def read_config(): def read_config():
@ -818,6 +820,12 @@ def reg():
allowed = reg() allowed = reg()
def get_dev():
ua_string = bottle.request.environ.get('HTTP_USER_AGENT')
user_agent = parse(ua_string)
return str(user_agent)
class Error(Exception): class Error(Exception):
pass pass
@ -835,14 +843,6 @@ def newSession():
global i18n global i18n
i18n = LocalizeTo(self.lang, CONF) i18n = LocalizeTo(self.lang, CONF)
self.device = self.get_dev()
def get_dev(self):
ua_string = bottle.request.environ.get('HTTP_USER_AGENT')
user_agent = parse(ua_string)
return str(user_agent)
def get_lang(self): def get_lang(self):
if 'HTTP_ACCEPT_LANGUAGE' in bottle.request.environ: if 'HTTP_ACCEPT_LANGUAGE' in bottle.request.environ:
lang = bottle.request.get('HTTP_ACCEPT_LANGUAGE') lang = bottle.request.get('HTTP_ACCEPT_LANGUAGE')
@ -863,6 +863,7 @@ def newSession():
self.surname = data[3] self.surname = data[3]
self.username = data[4] self.username = data[4]
self.mail = data[5] self.mail = data[5]
self.device = data[6]
self.data['active'] = self.active self.data['active'] = self.active
self.data['fakeCn'] = self.fakeCn self.data['fakeCn'] = self.fakeCn

Binary file not shown.