Esempio n. 1
0
    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']))))
Esempio n. 2
0
    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"}')
Esempio n. 3
0
 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))
Esempio n. 4
0
 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]))
Esempio n. 5
0
 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"}')
Esempio n. 6
0
    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))
Esempio n. 7
0
 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))
Esempio n. 8
0
 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)
Esempio n. 9
0
    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)))
Esempio n. 10
0
     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>""")
Esempio n. 11
0
    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))
Esempio n. 12
0
    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))
Esempio n. 13
0
    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))
Esempio n. 14
0
    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))
Esempio n. 15
0
 def get(self):
     self.response.write(
         usuario_a_json(
             get_user_from_token(self.request.headers.get('bearer'))))
Esempio n. 16
0
 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}')
Esempio n. 17
0
 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}')