Example #1
0
def get_user(token):
    try:
        user_info = auth.get_account_info(token)
        user_uid = user_info['users'][0]['localId']
        user = Usuario.objects.get(uid=user_uid)
        user.ultima_conexion = timezone_now()
        user.save()
        return user
    except:
        return None
def BorradoProducto(token,productId):
	user_info = auth.get_account_info(token)
	user_uid = user_info['users'][0]['localId']
	user = Usuario.objects.get(uid=user_uid)
	product = Producto.objects.get(id=productId)
	if product.vendido_por == user:
		product.delete()
		return 'Ok'
	else:
		return 'Unauthorized'
def ProductosFavoritos(token,ultimo_indice,elementos_pagina):
	user_info = auth.get_account_info(token)
	user_uid = user_info['users'][0]['localId']
	user = Usuario.objects.get(uid=user_uid)
	products = Producto.objects.filter(le_gusta_a=user, estado_venta=True)
	ultimo_indice = int(ultimo_indice)
	elementos_pagina = int(elementos_pagina)
	if(elementos_pagina != -1):
		products = itertools.islice(products, ultimo_indice, ultimo_indice + elementos_pagina)
	serializer = ProductoSerializerList(products, many=True, read_only=True, context = {"user": user})
	return serializer
Example #4
0
def check_user_logged_in(token):
    try:
        user_info = auth.get_account_info(token)
        user_uid = user_info['users'][0]['localId']
        user = Usuario.objects.get(uid=user_uid)
        user.ultima_conexion = timezone_now()
        user.save()
        #auth.refresh(token)
        return True
    except:
        return False
Example #5
0
def CrearChat(token, otroUserUid, productId):
    user_info = auth.get_account_info(token)
    user_uid = user_info['users'][0]['localId']
    user = Usuario.objects.get(uid=user_uid)
    otroUser = Usuario.objects.get(uid=otroUserUid)
    product = Producto.objects.get(pk=int(productId))
    #Comprobamos que no exista el chat previamente
    try:
        chat = Chat.objects.get(vendedor=otroUser,
                                comprador=user,
                                producto=product)
    except:
        chat = Chat.objects.create(vendedor=otroUser,
                                   comprador=user,
                                   producto=product)
    return chat
Example #6
0
def BorradoChat(token, chatId):
    user_info = auth.get_account_info(token)
    user_uid = user_info['users'][0]['localId']
    user = Usuario.objects.get(uid=user_uid)
    chat = Chat.objects.get(id=chatId)
    if chat.vendedor == user:
        chat.borrado_vendedor = True
        chat.save()
        if chat.borrado_comprador == True:
            chat.delete()
        return 'Ok'
    elif chat.comprador == user:
        chat.borrado_comprador = True
        chat.save()
        if chat.borrado_vendedor == True:
            chat.delete()
        return 'Ok'
    else:
        return 'Unauthorized'
def EditarProducto(biblio,id_producto, movil):
	token = biblio['token']
	user_info = auth.get_account_info(token)
	user_uid = user_info['users'][0]['localId']	
	try:
		user = Usuario.objects.get(uid=user_uid)
	except:
		return 'Not found'
	if user == None:
		return 'Not found'
	#Get all the required parameters for the product
	files = biblio['files']
	latitud = biblio['latitud']
	longitud = biblio['longitud']
	nombre = biblio['nombre']
	precio = biblio['precio']
	estado_producto = biblio['estado_producto']
	tipo_envio = biblio['tipo_envio']
	descripcion = biblio['descripcion']
	tags = biblio['tags']
	isbn = biblio['isbn']
	#Check that the request is correct
	if tags != '':
		lista_tags = [x.strip() for x in tags.split(',')]
	#Prueba si el precio es un numero o no
	try:
		if precio != '':
			precio = precio.replace(',', '.')
			precio = Decimal(precio)
		if latitud != '' and longitud != '':
			latitud = latitud.replace(',', '.')
			longitud = longitud.replace(',', '.')
	except:
		return 'Bad request'
	#Selecciona si el usuario ha creado el producto para enviar a domicilio o no
	if tipo_envio != '':
		if tipo_envio == 'True':
			tipo_envio = True
		else:
			tipo_envio = False
	#Selecciona el estado en el que se encuentra el producto, entre Nuevo, Seminuevo o Usado
	if estado_producto != '' and estado_producto != 'Nuevo' and estado_producto != 'Seminuevo' and estado_producto != 'Usado':
		return 'Bad request'

	try:
		producto = Producto.objects.get(pk=id_producto)
	except:
		return 'Bad request'
	if latitud != '' and longitud != '':
		producto.latitud = Decimal(latitud)
		producto.longitud = Decimal(longitud)
	if nombre != '':
		producto.nombre = nombre
	if precio != '':
		producto.precio = precio
	if estado_producto != '':
		producto.estado_producto = estado_producto
	if tipo_envio != '':
		producto.tipo_envio = tipo_envio
	if descripcion != '':
		producto.descripcion = descripcion
	if isbn != '':
		producto.isbn = isbn
	producto.save()
	if tags != '':
		if movil == 'true':
			tags_in_producto = producto.tiene_tags.all()
			for tag in tags_in_producto:
				tag.number_of_uses = tag.number_of_uses - 1
				tag.save()
				producto.tiene_tags.remove(tag)
		for tag in lista_tags:
			tag_estandar = re.sub('[^A-Za-z0-9á-źÁ-Źüñ]+', '', tag)
			tag_estandar = strip_accents(tag_estandar)
			tag_estandar = tag_estandar.lower()
			try:
				t = Tag.objects.get(nombre=tag_estandar)
			except:
				t = Tag.objects.create(nombre=tag_estandar)
			producto.tiene_tags.add(t)
			t.number_of_uses = t.number_of_uses + 1
			t.save()

	if files != []:
		if movil == 'true':
			ContenidoMultimedia.objects.filter(producto=producto).delete()
			i = 0
		else:
			multiExistentes = ContenidoMultimedia.objects.filter(producto=producto)
			i = multiExistentes.count()
		for file in files:
			multi = ContenidoMultimedia(contenido=file, producto=producto, orden_en_producto=i)
			multi.save()
			i = i + 1
	return 'Modified'
def CreacionProducto(biblio):
	token = biblio['token']
	user_info = auth.get_account_info(token)
	user_uid = user_info['users'][0]['localId']	
	try:
		user = Usuario.objects.get(uid=user_uid)
	except:
		return 'Not found'
	if user == None:
		return 'Not found'
	#Get all the required parameters for the product
	files = biblio['files']
	latitud = biblio['latitud']
	longitud = biblio['longitud']
	nombre = biblio['nombre']
	precio = biblio['precio']
	estado_producto = biblio['estado_producto']
	tipo_envio = biblio['tipo_envio']
	descripcion = biblio['descripcion']
	tags = biblio['tags']
	isbn = biblio['isbn']
	#Check that the request is correct
	if latitud == '' or longitud == '' or nombre == '' or precio == '' or estado_producto == '' or tipo_envio == '' or descripcion == '':
		return 'Bad request'
	if tags != '':
		lista_tags = [x.strip() for x in tags.split(',')]
	#Prueba si el precio es un numero o no
	try:
		precio = precio.replace(',', '.')
		precio = Decimal(precio)
		latitud = latitud.replace(',', '.')
		longitud = longitud.replace(',', '.')
	except:
		return 'Bad request'
	#Selecciona si el usuario ha creado el producto para enviar a domicilio o no
	if tipo_envio == 'True':
		tipo_envio = True
	else:
		tipo_envio = False
	#Selecciona el estado en el que se encuentra el producto, entre Nuevo, Seminuevo o Usado
	if estado_producto != 'Nuevo' and estado_producto != 'Seminuevo' and estado_producto != 'Usado':
		return 'Bad request'
	producto = Producto(vendido_por=user, 
						latitud=Decimal(latitud), 
						longitud=Decimal(longitud), 
						nombre=nombre, 
						precio=precio, 
						estado_producto=estado_producto, 
						estado_venta=True,
						tipo_envio=tipo_envio,
						descripcion=descripcion,
						isbn=isbn)
	producto.save()
	producto = Producto.objects.get(pk=producto.pk)
	print(producto)
	if tags != '':
		for tag in lista_tags:
			print(tag)
			tag_estandar = re.sub('[^A-Za-z0-9á-źÁ-Źüñ]+', '', tag)
			tag_estandar = strip_accents(tag_estandar)
			tag_estandar = tag_estandar.lower()
			try:
				t = Tag.objects.get(nombre=tag_estandar)
				producto.tiene_tags.add(t)
				t.number_of_uses = t.number_of_uses + 1
				t.save()
			except:
				t = Tag.objects.create(nombre=tag_estandar)
				producto.tiene_tags.add(t)
				t.number_of_uses = t.number_of_uses + 1
				t.save()
	i = 0
	for file in files:
		multi = ContenidoMultimedia(contenido=file, producto=producto, orden_en_producto=i)
		multi.save()
		i = i + 1
	return 'Created'
Example #9
0
def usuario_login(token, token_fcm, latitude, longitude, fcm_type, movil):
    if latitude == '-1':
        latitud_registro = 41.683490
    else:
        latitud_registro = Decimal(latitude)

    if longitude == '-1':
        longitud_registro = -0.888479
    else:
        longitud_registro = Decimal(longitude)

    if token == 'nothing':
        return 'Error'
    else:
        try:
            user_info = auth.get_account_info(token)
            user_uid = user_info['users'][0]['localId']
            try:
                name = user_info['users'][0]['displayName']
                if name == '':
                    name = user_info['users'][0]['email'].split("@")[0]
            except:
                name = user_info['users'][0]['email'].split("@")[0]
            try:
                profile_image = user_info['users'][0]['providerUserInfo'][0][
                    'photoUrl']
            except:
                profile_image = 'https://www.iconsdb.com/icons/preview/black/book-xxl.png'
        except:
            print("Error con firebase en login social")
            return 'Error'
        try:
            geolocator = Nominatim(user_agent="bookalo")
            location = geolocator.reverse(
                str(latitud_registro) + ',' + str(longitud_registro))
            try:
                ciudad = location.raw['address']['city']
            except:
                ciudad = location.raw['address']['county']
        except:
            ciudad = 'Zaragoza'
        try:
            user = Usuario.objects.get(uid=user_uid)

            if user.esta_baneado:
                return status.HTTP_401_UNAUTHORIZED
            else:
                user.latitud_registro = latitud_registro
                user.longitud_registro = longitud_registro
                user.ciudad = ciudad
                user.save()
                update_last_connection(user)
                try:
                    if movil == 'true':
                        es_movil = True
                    else:
                        es_movil = False
                    sessions = Sesion.objects.filter(usuario=user)
                    if sessions:
                        for session in sessions:
                            if session_needs_deleting(session):
                                session.delete()
                        user = Usuario.objects.get(uid=user_uid)
                        try:
                            sesion = Sesion.objects.get(token_fcm=token_fcm,
                                                        usuario=user)
                            sesion.token = token
                            sesion.save()
                        except Exception as ex:
                            Sesion.objects.create(token=token,
                                                  token_fcm=token_fcm,
                                                  usuario=user,
                                                  es_movil=es_movil)
                    else:
                        try:
                            user = Usuario.objects.get(uid=user_uid)
                            Sesion.objects.create(token=token,
                                                  token_fcm=token_fcm,
                                                  usuario=user,
                                                  es_movil=es_movil)
                        except Exception as ex:
                            user = Usuario.objects.get(uid=user_uid)
                            Sesion.objects.create(token=token,
                                                  token_fcm=str(ex),
                                                  usuario=user,
                                                  es_movil=es_movil)
                except Exception as ex:
                    print("Error while looking for active sessions")
                return UserSerializer(user).data

        except Usuario.DoesNotExist:

            new_user_data = Usuario.objects.create(
                username=user_uid,
                uid=user_uid,
                token_fcm=token_fcm,
                nombre=name,
                latitud_registro=latitud_registro,
                longitud_registro=longitud_registro,
                imagen_perfil=profile_image,
                ciudad=ciudad)
            Sesion.objects.create(token=token,
                                  token_fcm=token_fcm,
                                  usuario=new_user_data)
            update_last_connection(new_user_data)
            return UserSerializer(new_user_data).data