def update_users_table(self): """Add the quota col on the users table Update the users table for the instance who don't have this column """ default_quota = Utils.humansize_to_bytes(self.settings.get("askomics", "quota")) query = ''' ALTER TABLE users ADD quota INTEGER NOT NULL DEFAULT {} '''.format(default_quota) try: self.execute_sql_query(query) except Exception: pass
def set_quota(self, quota, username): """Set a new quota to a user Parameters ---------- quota : int New quota username : string The concerned username """ database = Database(self.app, self.session) query = ''' UPDATE users SET quota=? WHERE username=? ''' database.execute_sql_query(query, (Utils.humansize_to_bytes(quota), username))
def persist_user(self, inputs, ldap_login=False, return_password=False): """ Persist user in the TS Parameters ---------- inputs : dict User infos ldap_login : bool, optional If True, user is ldap Returns ------- dict The user """ database = Database(self.app, self.session) # Check if user is the first. if yes, set him admin if self.get_number_of_users() == 0: admin = True blocked = False else: admin = False blocked = self.settings.getboolean('askomics', 'default_locked_account') api_key = Utils.get_random_string(20) if "apikey" not in inputs else inputs["apikey"] query = ''' INSERT INTO users VALUES( NULL, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, NULL ) ''' salt = None sha512_pw = None email = None fname = None lname = None if not ldap_login: # Create a salt salt = Utils.get_random_string(20) if "salt" not in inputs else inputs["salt"] # Concat askomics_salt + user_password + salt salted_pw = self.settings.get('askomics', 'password_salt') + inputs['password'] + salt # hash sha512_pw = hashlib.sha512(salted_pw.encode('utf8')).hexdigest() email = inputs["email"] fname = inputs["fname"] lname = inputs["lname"] # Store user in db user_id = database.execute_sql_query( query, (ldap_login, fname, lname, inputs['username'], email, sha512_pw, salt, api_key, admin, blocked, Utils.humansize_to_bytes(self.settings.get("askomics", "quota")), int(time.time())), True) user = { 'id': user_id, 'ldap': ldap_login, 'fname': fname, 'lname': lname, 'username': inputs['username'], 'email': email, 'admin': admin, 'blocked': blocked, 'quota': Utils.humansize_to_bytes(self.settings.get("askomics", "quota")), 'apikey': api_key, 'galaxy': None } if return_password and not ldap_login: user["password"] = inputs["password"] # Return user infos return user