def put(self): """ Se necesita autenticacion y es por ello que se lanza la excepcion si no hay usuario autenticado :param self: :return: """ _, usuario = get_user_from_token(self.request.headers.get('bearer'), raise_for_unauthenticated=True) # Solo un usuario tipo 3 puede puede validar eventos if usuario.tipo != 3: raise AgendamlgException.sin_permisos(usuario) # Se espera recibir un json de la forma {"id":"idEvento"} contenido_json = self.json_body() if contenido_json.get('id', None) is None: raise AgendamlgNotFoundException.evento_no_existe(None) # Si tiene id y demas se procede a su validacion validar_evento(contenido_json['id']) self.response.write( util.json.to_json( evento_corto_clave(clave_evento_o_fallo( contenido_json['id']))))
def delete(self, claveEvento): """ :param claveEvento: clave del evento como urlSafe :return: JSON de exito """ # Para borrar un evento hay que estar autenticado _, usuario = get_user_from_token(self.request.headers.get('bearer'), raise_for_unauthenticated=True) # Obtener el evento eventoDic = clave_evento_o_fallo(claveEvento).get() if eventoDic is None: raise AgendamlgNotFoundException.evento_no_existe(None) # Comprobar que el evento pertenece al usuario o que este es tipo 3 if usuario.tipo != 3 and eventoDic.key.parent() != usuario.key: # Excepcion por no tener permiso raise AgendamlgException.sin_permisos(usuario) # Proceder al borrado del evento eventoDic.key.delete() # Si se elimina con exito se devuelve este json self.response.write(r'{"status": "ok"}')
def get(self, eid): _, usuario_sesion = get_user_from_token( self.request.headers.get('bearer'), raise_for_unauthenticated=False) evento = ComentarioHandler.__evento_o_fallo(eid) comentarios = comentario.buscar_comentarios_evento( usuario_sesion, evento) self.response.write( ComentarioHandler.__comentarios_a_json(comentarios))
def put(self, eid): _, usuario_sesion = get_user_from_token( self.request.headers.get('bearer')) nuevo_comentario = self.json_body() evento = ComentarioHandler.__evento_o_fallo(eid) comentarios = comentario.crear_comentario(usuario_sesion, evento, nuevo_comentario) self.response.write( ComentarioHandler.__comentarios_a_json([comentarios]))
def delete(self, uid): _, usuario_sesion = get_user_from_token( self.request.headers.get('bearer')) usuario = Usuario.query(Usuario.idGoogle == uid).fetch() if not usuario: raise AgendamlgNotFoundException.usuario_no_existe(uid) if usuario_sesion.tipo != 3 or usuario_sesion.key == usuario.key: raise AgendamlgException.sin_permisos(usuario_sesion.idGoogle) usuario[0].key.remove() self.response.write(u'{"status": "ok"}')
def get(self): # Obtener usuario para mostrar eventos validados o no _, usuario = get_user_from_token(self.request.headers.get('bearer'), raise_for_unauthenticated=True) # Usuario para la id de Google proporcionada # Si hay una excepcion es que no se ha encontrado el usuario eventosUsuario = buscar_eventos_usuario(usuario, True) self.response.write(eventos_json(eventosUsuario, True))
def get(self): _, usuario_sesion = get_user_from_token( self.request.headers.get('bearer')) categorias = [] for categoria in cat.buscar_preferencias_usuario(usuario_sesion): categoria_nueva = { 'id': categoria.key.urlsafe(), 'nombre': categoria.nombre } categorias.append(categoria_nueva) self.response.write(to_json(categorias))
def delete(self, categoria_key): _, usuario_sesion = get_user_from_token( self.request.headers.get('bearer')) try: k = ndb.Key(urlsafe=categoria_key) if not k.get(): raise AgendamlgNotFoundException.categoria_no_existe( categoria_key) cat.eliminar_preferencia_usuario(usuario_sesion, k) self.response.write(u'{"deleted": true}') except Exception: raise AgendamlgNotFoundException.categoria_no_existe(categoria_key)
def put(self, uid): _, usuario_sesion = get_user_from_token( self.request.headers.get('bearer')) usuario = Usuario.query(Usuario.idGoogle == uid).fetch() if not usuario: raise AgendamlgNotFoundException.usuario_no_existe(uid) else: usuario = usuario[0] if usuario_sesion.tipo != 3 or usuario_sesion.key == usuario.key: raise AgendamlgException.sin_permisos(usuario_sesion.idGoogle) nueva_info = self.json_body() nuevo_tipo = int(nueva_info.get(u'tipo', usuario.tipo)) if nuevo_tipo == 0 or nuevo_tipo > 3: raise AgendamlgException.evento_campos_invalidos() usuario.tipo = nuevo_tipo usuario.put() self.response.write(usuario_a_json( (from_json(usuario.extra), usuario)))
def get(self): user, _ = get_user_from_token(self.request.GET['token']) if 'token' in self.request.GET else (None, None) newcomer = self.request.GET['newcomer'] if 'newcomer' in self.request.GET else False if user: self.response.write(u"""<html> <body> <p>{} {}, your user id is {} {}</p> <p>{}</p> <p><a href="/agendamlg-api/session/test">Logout</a></p> </body> </html> """.format(u'Welcome' if newcomer else u'Hello', user[u'displayName'], user[u'id'], _.tipo, self.request.GET['token'])) else: self.response.write(u"""<html> <body> <p>I don't know you :/</p> <p><a href="/agendamlg-api/session/">Login</a></p> </body> </html>""")
def get(self, claveEvento): # Esta ruta requiere de las mismas condiciones de permisos que la visualizacion de un # evento concreto # Obtener usuario para mostrar evento validado o no _, usuario = get_user_from_token(self.request.headers.get('bearer'), raise_for_unauthenticated=False) # Devuelve un evento concreto en version larga, proporcionada su clave en urlsafe claveEvento = clave_evento_o_fallo(claveEvento) eventoDic = evento_largo_clave(claveEvento, usuario) # Si el evento no esta validado lanzar excepcion, al no ser que el usuario este logueado y # sea o el creador o periodista if (not eventoDic['validado'] and usuario is None) or ( not eventoDic['validado'] and usuario.tipo != 3 and usuario.key != claveEvento.parent()): # El usuario no tiene permisos para ver un evento sin validar raise AgendamlgException.sin_permisos(usuario) # Proceder a obtener el PhotoSet fotos_respuesta = {'fotos': []} # Si el evento tiene user id y album id se procede a obtener sus fotos if eventoDic.get('flickrUserID', None) is not None and eventoDic.get( 'flickrAlbumID', None) is not None: # Imprimimos lo que devuelve la peticion photo_set_photos = get_photos(eventoDic['flickrUserID'], eventoDic['flickrAlbumID']) # Si el objeto photoset no es None, proceder a rellenar la lista if photo_set_photos is not None: fotos_respuesta[ 'fotoPrimariaUrl'] = photo_set_photos.primary.kind_large_size_url fotos_respuesta['fotos'] = [{ 'titulo': foto.title, 'url': foto.kind_large_size_url } for foto in photo_set_photos.photos] self.response.write(util.to_json(fotos_respuesta))
def get(self, idGoogle): # Obtener usuario para mostrar eventos validados o no _, usuario = get_user_from_token(self.request.headers.get('bearer'), raise_for_unauthenticated=False) # Usuario para la id de Google proporcionada # Si hay una excepsion es que no se ha encontrado el usuario otro_usuario = None try: otro_usuario = Usuario.query(Usuario.idGoogle == idGoogle).fetch()[0] except: raise AgendamlgNotFoundException.usuario_no_existe(idGoogle) mostrarTodos = False # Si quiero ver mis eventos o bien se es periodista, se muestran todos if usuario is not None and (usuario.tipo == 3 or usuario.idGoogle == otro_usuario.idGoogle): mostrarTodos = True eventosUsuario = buscar_eventos_usuario(otro_usuario, mostrarTodos) self.response.write(eventos_json(eventosUsuario))
def get(self): filtrado = self.request.GET # Lista de claves de categorias en URLSafe categorias = self.request.get_all('categoriasSeleccionadas') # Si el usuario no esta autenticado no se lanza excepcion, de ahi el False # La barra baja indica que no se interesa asignar esa parte de la tupla _, usuario = get_user_from_token(self.request.headers.get('bearer'), raise_for_unauthenticated=False) if usuario and self.request.get('mostrarDeMiPreferencia', '') == 'true': # La lista de categorias se rellena en base a las preferencias del usuario filtrado['categorias'] = usuario.preferencias else: # El metodo de la fachada espera recibir una lista de claves de categoria, por la URL # se va a pasar la clave de categoria como urlSafe filtrado['categorias'] = [ndb.Key(urlsafe=categoria_clave) for categoria_clave in categorias] # Se procede a obtener la lista de resultados eventos = buscar_evento_categorias(usuario, **filtrado) self.response.write(eventos_json(eventos))
def get(self, claveEvento): # Obtener usuario para mostrar evento validado o no _, usuario = get_user_from_token(self.request.headers.get('bearer'), raise_for_unauthenticated=False) # Devuelve un evento concreto en version larga, proporcionada su clave en urlsafe claveEvento = clave_evento_o_fallo(claveEvento) eventoDic = evento_largo_clave(claveEvento, usuario) # Si el evento no esta validado lanzar excepcion, al no ser que el usuario este logueado y # sea o el creador o periodista if (not eventoDic['validado'] and usuario is None) or ( not eventoDic['validado'] and usuario.tipo != 3 and usuario.key != claveEvento.parent()): # El usuario no tiene permisos para ver un evento sin validar raise AgendamlgException.sin_permisos(usuario) # Muy importante, poner a este evento su fotoUrl foto_url = obtener_foto_url(eventoDic) if foto_url is not None: eventoDic['fotoUrl'] = foto_url self.response.write(util.to_json(eventoDic))
def get(self): self.response.write( usuario_a_json( get_user_from_token(self.request.headers.get('bearer'))))
def put(self, eid): _, usuario_sesion = get_user_from_token( self.request.headers.get('bearer')) evento = MeGustaHandler.__evento_o_fallo(eid) megusta.crear_me_gusta(usuario_sesion, evento) self.response.write(u'{"me_gusta": true}')
def delete(self, eid): _, usuario_sesion = get_user_from_token( self.request.headers.get('bearer')) evento = ComentarioHandler.__evento_o_fallo(eid) comentario.eliminar_comentario(usuario_sesion, evento) self.response.write(u'{"deleted": true}')