def ping_client(self, request): user_id = get_current_user_id(self.headers) if user_id is None: return BaseResponse(code=401, message="Unauthorized to ping client") gcm_id = request.mobile_id # Find a Client for the current user with the passed GCM ID clients = MobileClient.query(MobileClient.messaging_id == gcm_id, ancestor=ndb.Key(Account, user_id)).fetch(1) if len(clients) == 0: # No Client for user with that push token - bailing return BaseResponse(code=404, message="Invalid push token for user") else: client = clients[0] response = NotificationHelper.send_ping(client) # If we got a response from the send_ping method, it was sent via TBANS # We'll bubble up any errors we got back if response: if response.code == 200: return BaseResponse(code=200, message="Ping sent") else: return BaseResponse( code=response.code, message="Error pinging client - {}".format( response.message)) else: return BaseResponse(code=200, message="Ping sent")
def register_client(self, request): user_id = get_current_user_id(self.headers) if user_id is None: return BaseResponse(code=401, message="Unauthorized to register") gcm_id = request.mobile_id os = ClientType.enums[request.operating_system] name = request.name uuid = request.device_uuid query = MobileClient.query(MobileClient.user_id == user_id, MobileClient.device_uuid == uuid, MobileClient.client_type == os) # trying to figure out an elusive dupe bug logging.info("DEBUGGING") logging.info("User ID: {}".format(user_id)) logging.info("UUID: {}".format(uuid)) logging.info("Count: {}".format(query.count())) if query.count() == 0: # Record doesn't exist yet, so add it MobileClient(parent=ndb.Key(Account, user_id), user_id=user_id, messaging_id=gcm_id, client_type=os, device_uuid=uuid, display_name=name).put() return BaseResponse(code=200, message="Registration successful") else: # Record already exists, update it client = query.fetch(1)[0] client.messaging_id = gcm_id client.display_name = name client.put() return BaseResponse(code=304, message="Client already exists")
def suggest_team_media(self, request): current_user = endpoints.get_current_user() if current_user is None: return BaseResponse(code=401, message="Unauthorized to make suggestions") user_id = PushHelper.user_email_to_id(current_user.email()) # For now, only allow team media suggestions if request.reference_type != "team": # Trying to suggest a media for an invalid model type return BaseResponse(code=400, message="Bad model type") # Need to split deletehash out into its own private dict. Don't want that to be exposed via API... private_details_json = None if request.details_json: incoming_details = json.loads(request.details_json) private_details = None if 'deletehash' in incoming_details: private_details = {'deletehash': incoming_details.pop('deletehash')} private_details_json = json.dumps(private_details) if private_details else None status = SuggestionCreator.createTeamMediaSuggestion( author_account_key=ndb.Key(Account, user_id), media_url=request.media_url, team_key=request.reference_key, year_str=str(request.year), private_details_json=private_details_json) if status != 'bad_url': if status == 'success': return BaseResponse(code=200, message="Suggestion added") else: return BaseResponse(code=304, message="Suggestion already exists") else: return BaseResponse(code=400, message="Bad suggestion url")
def ping_client(self, request): current_user = endpoints.get_current_user() if current_user is None: return BaseResponse(code=401, message="Unauthorized to ping client") user_id = PushHelper.user_email_to_id(current_user.email()) gcm_id = request.mobile_id # Find a Client for the current user with the passed GCM ID clients = MobileClient.query(MobileClient.messaging_id == gcm_id, ancestor=ndb.Key(Account, user_id)).fetch(1) if len(clients) == 0: # No Client for user with that push token - bailing return BaseResponse(code=404, message="Invalid push token for user") else: client = clients[0] from helpers.tbans_helper import TBANSHelper success = TBANSHelper.ping(client) if success: return BaseResponse(code=200, message="Ping sent") else: return BaseResponse(code=500, message="Failed to ping client")
def unregister_client(self, request): current_user = endpoints.get_current_user() if current_user is None: return BaseResponse(code=401, message="Unauthorized to unregister") userID = PushHelper.user_email_to_id(current_user.email()) gcmId = request.mobile_id query = MobileClient.query(MobileClient.messaging_id == gcmId, ancestor=ndb.Key(Account, userID)).fetch(keys_only=True) if len(query) == 0: # Record doesn't exist, so we can't remove it return BaseResponse(code=404, message="User doesn't exist. Can't remove it") else: ndb.delete_multi(query) return BaseResponse(code=200, message="User deleted")
def unregister_client(self, request): user_id = get_current_user_id(self.headers) if user_id is None: return BaseResponse(code=401, message="Unauthorized to unregister") gcm_id = request.mobile_id query = MobileClient.query(MobileClient.messaging_id == gcm_id, ancestor=ndb.Key(Account, user_id))\ .fetch(keys_only=True) if len(query) == 0: # Record doesn't exist, so we can't remove it return BaseResponse(code=404, message="User doesn't exist. Can't remove it") else: ndb.delete_multi(query) return BaseResponse(code=200, message="User deleted")
def suggest_team_media(self, request): current_user = endpoints.get_current_user() if current_user is None: return BaseResponse(code=401, message="Unauthorized to make suggestions") user_id = PushHelper.user_email_to_id(current_user.email()) # For now, only allow team media suggestions if request.reference_type != "team": # Trying to suggest a media for an invalid model type return BaseResponse(code=400, message="Bad model type") media_dict = MediaParser.partial_media_dict_from_url( request.media_url.strip()) if media_dict is not None: existing_media = Media.get_by_id( Media.render_key_name(media_dict['media_type_enum'], media_dict['foreign_key'])) if existing_media is None \ or request.reference_key not in [reference.id() for reference in existing_media.references]: media_dict['year'] = request.year media_dict['reference_type'] = request.reference_type media_dict['reference_key'] = request.reference_key # Need to split deletehash out into its own private dict. Don't want that to be exposed via API... if request.details_json: incoming_details = json.loads(request.details_json) private_details = None if 'deletehash' in incoming_details: private_details = { 'deletehash': incoming_details.pop('deletehash') } media_dict['private_details_json'] = json.dumps( private_details) if private_details else None media_dict['details_json'] = json.dumps(incoming_details) suggestion = Suggestion(author=ndb.Key(Account, user_id), target_model="media") suggestion.contents = media_dict suggestion.put() return BaseResponse(code=200, message="Suggestion added") else: return BaseResponse(code=304, message="Suggestion already exists") else: return BaseResponse(code=400, message="Bad suggestion url")
def test(self, request): user_id = get_current_user_id(self.headers) return BaseResponse(code=200, message="User id: {}".format(user_id))
def update_model_preferences(self, request): user_id = get_current_user_id(self.headers) if user_id is None: return BaseResponse( code=401, message="Unauthorized to update model preferences") model_key = request.model_key model_type = request.model_type output = {} code = 0 if request.favorite: fav = Favorite(parent=ndb.Key(Account, user_id), user_id=user_id, model_key=model_key, model_type=model_type) result = MyTBAHelper.add_favorite(fav, request.device_key) if result == 200: output['favorite'] = {"code": 200, "message": "Favorite added"} code += 100 elif result == 304: output['favorite'] = { "code": 304, "message": "Favorite already exists" } code += 304 else: output['favorite'] = { "code": 500, "message": "Unknown error adding favorite" } code += 500 else: result = MyTBAHelper.remove_favorite(user_id, model_key, model_type, request.device_key) if result == 200: output['favorite'] = { "code": 200, "message": "Favorite deleted" } code += 100 elif result == 404: output['favorite'] = { "code": 404, "message": "Favorite not found" } code += 404 else: output['favorite'] = { "code": 500, "message": "Unknown error removing favorite" } code += 500 if request.notifications: sub = Subscription( parent=ndb.Key(Account, user_id), user_id=user_id, model_key=model_key, model_type=request.model_type, notification_types=PushHelper.notification_enums_from_string( request.notifications)) result = MyTBAHelper.add_subscription(sub, request.device_key) if result == 200: output['subscription'] = { "code": 200, "message": "Subscription updated" } code += 100 elif result == 304: output['subscription'] = { "code": 304, "message": "Subscription already exists" } code += 304 else: output['subscription'] = { "code": 500, "message": "Unknown error adding favorite" } code += 500 else: result = MyTBAHelper.remove_subscription(user_id, model_key, model_type, request.device_key) if result == 200: output['subscription'] = { "code": 200, "message": "Subscription removed" } code += 100 elif result == 404: output['subscription'] = { "code": 404, "message": "Subscription not found" } code += 404 else: output['subscription'] = { "code": 500, "message": "Unknown error removing subscription" } code += 500 return BaseResponse(code=code, message=json.dumps(output))