def vote_post(postid): data = request.get_json() user = retrieve_user_from_request(request) if (user is None): return generate_error_response(ERR_403_vote, 403) # checks for necessary data params if ('vote' not in data): return generate_error_response(ERR_400, 400) # create a new post and add it to the db session vote = int(data['vote']) # find the post to vote on post = Post.find_post(postid) if (post is None): return generate_error_response(ERR_404, 404) # Call apply_vote userid = user.get_user_id() post.apply_vote(userid, postid, vote) return post.to_json_fields_for_FE(userid), 200
def get_post(postid): post = Post.find_post(postid) if (post is None): return generate_error_response(ERR_404, 404) user = retrieve_user_from_request(request) if (user is None): return generate_error_response(ERR_403, 403) return post.to_json_fields_for_FE(user.get_user_id()), 200
def delete_post(postid): # no checking of authentication is happening yet... post = Post.find_post(postid) if (post is None): return generate_error_response(ERR_404, 404) user = retrieve_user_from_request(request) if (user is None or post.get_poster_id() != user.get_user_id()): return generate_error_response(ERR_403, 403) jsonified_post = post.to_json_fields_for_FE(user.get_user_id()) post.delete_post() return jsonified_post, 200
def create_post(): data = request.get_json() # checks for necessary data params if ('location' not in data or 'type' not in data or 'latitude' not in data['location'] or 'longitude' not in data['location']): return generate_error_response(ERR_400, 400) try: lon = (float)(data['location']['longitude']) lat = (float)(data['location']['latitude']) except: # Either the params are not there, or they are not convertable to floats return generate_error_response(ERR_400, 400) user = retrieve_user_from_request(request) if (user is None): return generate_error_response(ERR_400, 400) user_id = user.get_user_id() # create a new post and add it to the db session # 0 for text, 1 for image, anything else is invalid post_type = data['type'] if (post_type == 0): text = data['text'] if (not validate_text(text)): return generate_error_response(ERR_400, 400) # image is empty post = Post(text, lon, lat, user_id, 0) post.save_post() elif (post_type == 1): post_type = 1 img_data = data['image'] # empty text post = Post('', lon, lat, user_id, 1) post.save_post() post.upload_img_to_s3(img_data) else: return generate_error_response(ERR_400, 400) return post.to_json_fields_for_FE(user_id), 200
def get_post_by_location(): try: # query db for all posts in this area lat = (float)(request.args.get('latitude')) lon = (float)(request.args.get('longitude')) except: # Either the params are not there, or they are not convertable to floats return generate_error_response(ERR_400, 400) radius = 1 # TODO find out what number this should be user = retrieve_user_from_request(request) if (user is None): return generate_error_response(ERR_403, 403) try: # if time_before is given, return 15 posts before specified time # otherwise, return 15 newest posts time_before = (float)(request.args.get('time_before')) posts = Post.find_limited_posts_within_loc_before_time(\ lon, lat, radius, time_before) except: posts = Post.find_limited_posts_within_loc(lon, lat, radius) # map from poster_id to img_tags of the poster img_tags = {} for post in posts: poster_id = post.get_poster_id() if poster_id not in img_tags: img_tags[poster_id] = User.find_user_by_id(poster_id)\ .get_image_tag() user_id = user.get_user_id() to_ret = {} jsonified_posts = [] for post in posts: # passes in the already loaded image tag jsonified_posts.append(json.loads(post.to_json_fields_for_FE(\ user_id, img_tags[post.get_poster_id()]))) to_ret['posts'] = jsonified_posts return json.dumps(to_ret), 200
def user_login(): user = retrieve_user_from_request(request) if (user): # login with idToken passed in through header if (user.get_username() == ''): is_new_user = True is_new_user = False else: # create new User object with next userId and empty strings for other # fields. Also checks for necessary parameters to make a new user info = request.environ['META_INFO'] if ('audCode' in info and 'email' in info): user = User('', info['audCode'], '', '', info['email'], '') else: return generate_error_response(ERR_401, 401) user.save_user() is_new_user = True # return whether its a new user and the associated user object return json.dumps( dict(new_user=is_new_user, user=json.loads(user.to_json_fields_for_FE()))), 200
def update_user(userid): # checks for necessary data params try: data = request.get_json() except: # if there is no data with the PUT request return generate_error_response(ERR_400_invalid, 400) if (not data or 'userid' not in data): return generate_error_response(ERR_400_invalid, 400) user = retrieve_user_from_request(request) if (user is None): return generate_error_response(ERR_404, 404) if (int(data['userid']) != userid and user.get_user_id() != userid): return generate_error_response(ERR_403_update, 403) # Call set functions and update good_inputs good_inputs = True # checks if a user with specified username already exists username = data['username'] existing = User.find_user_by_username(username) username_taken = False # If the user wants to change their username to an existing username if (user.get_username() != username and existing): username_taken = True else: good_inputs = good_inputs and user.set_username(username) # Not sure if all these checks are necessary? if ('name' in data and data['name'] != user.get_name()): good_inputs = good_inputs and user.set_name(data['name']) if ('phone_number' in data and \ data['phone_number'] != user.get_phone_number()): good_inputs = good_inputs and user.set_phone_number( data['phone_number']) if ('bio' in data and data['bio'] != user.get_bio() and len(data['bio']) < 160): good_inputs = good_inputs and user.set_bio(data['bio']) # save user before check email because even if user wants to change email, # the other fields should still be modified. user.save_user() # saving image tag because there is no point of uploading it and then # re-downloading it to pass back to the FE img_tag = [] if ('img_tag' in data): img_tag = data['img_tag'] good_inputs = good_inputs and user.set_image_tag(img_tag) if ('email' in data and data['email'] != user.get_email()): return generate_error_response(ERR_403_email, 403) # Evaluate bools if (username_taken): return generate_error_response(ERR_400_taken, 400) if (not good_inputs): return generate_error_response(ERR_400_invalid, 400) return user.to_json_fields_for_FE(img_tag), 200