diff options
Diffstat (limited to 'stashbox/models.py')
-rw-r--r-- | stashbox/models.py | 91 |
1 files changed, 80 insertions, 11 deletions
diff --git a/stashbox/models.py b/stashbox/models.py index 47b7ef2..41a58d2 100644 --- a/stashbox/models.py +++ b/stashbox/models.py @@ -4,7 +4,7 @@ db = web.database(dbn='sqlite', db='stashbox.db') def get_folders(): folder_result = db.query(""" -SELECT d.id, d.name, u.username as owner +SELECT DISTINCT d.id, d.name, u.username as owner FROM directory d JOIN user u ON d.owner_id = u.id ORDER BY d.name @@ -20,7 +20,7 @@ SELECT d.id, d.name, u.username as owner folder['users'] = [] user_result = db.query(""" - SELECT u.username + SELECT DISTINCT u.username FROM user u, directory_user a WHERE a.user_id = u.id AND a.directory_id = %s @@ -34,24 +34,93 @@ SELECT d.id, d.name, u.username as owner return folders -def new_folder(name, owner): - result = db.select('directory', where="name=$name", vars=locals()) +def add_folder(name, owner): + where_vars = {'name': name} + folders = db.select('directory', where=web.db.sqlwhere(where_vars)) - if not result: + if not folders: return db.insert('directory', name=name.replace("/",""), owner_id=owner) + else: + # Can't add non-unique folders + return False -def del_folder(id): +def get_folder(id): + where_vars = {'id': id} + directories = db.select('directory', where=web.db.sqlwhere(where_vars)) + return get_single(directories) + +def update_folder(update_values): + db.update('directory', where="id=$id", vars={'id':update_values['id']}, + name=update_values['name'], owner_id=update_values['owner_id']) + + db.delete('directory_user', where="directory_id=$did", + vars={'did':update_values['id']}) + + for id in update_values['users']: + db.insert('directory_user', directory_id=update_values['id'], + user_id=id) + +def get_folder_users(folder_id): + where_vars = {'directory_id': folder_id} + result = db.select('directory_user', where=web.db.sqlwhere(where_vars)) + users = [] + + for item in result: + users.append(item.user_id) + + return users + +def delete_folder(id): db.delete('directory', where="id=$id", vars=locals()) db.delete('directory_user', where="directory_id=$id", vars=locals()) -def get_users(): - return db.select('user') +def delete_user(id): + db.delete('user', where="id=$id", vars=locals()) + db.delete('directory_user', where="user_id=$id", vars=locals()) + db.delete('directory', where="owner_id=$id", vars=locals()) + +def get_users(as_list=False): + result = db.select('user') + + if as_list: + users = [] + + for user in result: + users.append((user.id, user.username)) + + return users + else: + return result + +def get_user(id): + where_vars = {'id': id} + return get_single(db.select('user', where=web.db.sqlwhere(where_vars))) + +def update_user(id, name, password): + db.update('user', where="id=$id", vars=locals(), + name=name, password=password) def authorize_user(user_id, folder_id): - return db.insert('directory_user', directory_id=folder_id, user_id=user_id) + if not is_authorized(user_id, folder_id): + db.insert('directory_user', directory_id=folder_id, user_id=user_id) + +def is_authorized(user_id, folder_id): + where_vars = {'directory_id': folder_id, 'user_id': user_id} + auths = db.select('directory_user', where=web.db.sqlwhere(where_vars)) + + if not auths: + return False + else: + return True def add_user(username, password): - result = db.select('user', where="username=$username", vars=locals()) + users = db.select('user', where="username=$username", vars=locals()) - if not result: + if not users: return db.insert('user', username=username, password=password) + else: + user = users.list().pop() + return user["id"] + +def get_single(obj): + return obj[0] |