def channel_addowner(token, channel_id, u_id): global channels try: # Get user information userID = decodeToken(token) users = getUser(int(u_id)) target = {'u_id':int(u_id), 'name_first':users['name_first'], 'name_last':users['name_last'], "profile_img_url": users['profile_img_url']} grantusers = getUser(userID) granter = {'u_id':userID, 'name_first':grantusers['name_first'], 'name_last':grantusers['name_last'], "profile_img_url": grantusers['profile_img_url']} permissions = grantusers['permission_id'] # Channel operations channel = getChannel(channel_id) if granter in channel['owner_members'] or permissions < 3: if target in channel['owner_members']: raise ValueError("User already an owner") elif target in channel['all_members']: channel['owner_members'].append(target) return {} else: channel['owner_members'].append(target) channel['all_members'].append(target) return {} raise AccessError("User is not an owner") except ValueError as e: raise e except AccessError as e: raise e
def channel_join(token, channel_id): global channels try: # Get user information u_id = decodeToken(token) users = getUser(u_id) permission = users['permission_id'] userDetails = { "u_id": u_id, "name_first": users['name_first'], "name_last": users['name_last'], "profile_img_url": users['profile_img_url'] } # Channel operations channel = getChannel(channel_id) if not channel[ 'is_public'] and permission == 3: #Checks if channel is public raise AccessError("You do not have access to this channel") else: channel['all_members'].append(userDetails) if userDetails not in channel['owner_members'] and permission < 3: channel['owner_members'].append(userDetails) return {} except ValueError as e: raise e except AccessError as e: raise e
def admin_userpermission_change(token, u_id, permission_id): try: # Check if user is authenticated and get the requesting user ID from token granterID = decodeToken(token) # Check if the target uID format is valid if not u_id.isdigit(): raise ValueError("Invalid user ID!") # Check if the target permission ID is valid if int(permission_id) > 3 or int(permission_id) < 1: raise ValueError("Invalid permission id") # Find the requesting user permissions = getUser(granterID)['permission_id'] # Check if requesting user has permissions for the action if permissions < 3: setPermission(u_id, permission_id) return {} raise AccessError("Granter is not an admin or owner") except ValueError as e: raise e except AccessError as e: raise e
def channels_create(token, name, is_public): try: if len(name) > 20: raise ValueError("Name must be 20 characters or less.") # Get user information channel_id = len(channels) u_id = decodeToken(token) users = getUser(u_id) name_first = users['name_first'] name_last = users['name_last'] profile_img_url = users['profile_img_url'] owner_members = [{ "u_id": u_id, "name_first": name_first, "name_last": name_last, "profile_img_url": profile_img_url }] all_members = [{ "u_id": u_id, "name_first": name_first, "name_last": name_last, "profile_img_url": profile_img_url }] newChannel(channel_id, name, is_public, owner_members, all_members) return channel_id except ValueError as e: raise e except AccessError as e: raise e
def channel_invite(token, channel_id, u_id): try: # Get user information userID = decodeToken(token) grant_user = getUser(userID) granter = {'u_id':userID, 'name_first':grant_user['name_first'], 'name_last':grant_user['name_last'], "profile_img_url": grant_user['profile_img_url']} target_user = getUser(int(u_id)) target = {'u_id':int(u_id), 'name_first':target_user['name_first'], 'name_last':target_user['name_last'], 'profile_img_url': target_user['profile_img_url']} # Can't invite yourself... if granter == target: raise ValueError("Can't invite yourself!") # Channel operations channel = getChannel(channel_id) if granter in channel['all_members']: channel['all_members'].append(target) return {} raise AccessError("User not a member of channel") except ValueError as e: raise e except AccessError as e: raise e
def channel_details(token, channel_id): try: # Get user details u_id = decodeToken(token) user = getUser(u_id) permissions = user['permission_id'] # Get channel details channel = getChannel(channel_id) if channel['is_public'] == 'true' or permissions < 3: return { "name": channel['name'], "owner_members": channel['owner_members'], "all_members": channel['all_members'] } raise AccessError("User is not member of channel") except ValueError as e: raise e except AccessError as e: raise e
def message_edit(token, message_id, new_message): global channels try: u_id = decodeToken(token) message = getMessage(message_id) channel = getMessageChannel(message_id) if message["u_id"] == u_id: #check if user is the sender doEdit(message, new_message, token) return {} for members in channel["owner_members"]: #user is owner of channel if members["u_id"] == u_id: doEdit(message, new_message, token) return {} users = getUser(u_id) #user is admin if users["permission_id"] == 1 or users["permission_id"] == 2: doEdit(message, new_message, token) return {} raise AccessError("User does not have permission to edit message!") except ValueError as e: raise e except AccessError as e: raise e