Exemple #1
0
        def callback(ch, method, properties, body):
            event = json_serializer.body_to_dic(body.decode('utf-8'))
            if(len(validator.validateSchema(EVENT, event)) > 0):
                return

            if (event["type"] == "article-change"):

                message = event["message"]

                if(len(validator.validateSchema(MSG_ARTICLE_CHANGE, message)) > 0):
                    return

                article_id = message['_id']
                print("RabbitMQ Pricing POST article-change article_id: {}".format(article_id))

                try:
                    price = {}
                    price['max_price'] = message['price']
                    price['min_price'] = message['price']
                    price['price'] = message['price']
                    price['price_currency'] = 'ARS'
                    price['article_id'] = article_id
                    price['state'] = ACTIVE
                    crud._addOrUpdatePrice(price)

                except Exception:
                    print('Cannot handle article-change')
Exemple #2
0
def isValidToken(authKey):
    """
    Obtiene el currentUser desde el servicio de autentificación
    authKey: string El header Authorization enviado por el cliente
    return dict<property, value> CurrentUser
    """
    if (not isinstance(authKey, str) or len(authKey) == 0):
        raise errors.InvalidAuth()

    headers = {"Authorization".encode("utf-8"): authKey.encode("utf-8")}

    conn = http.client.HTTPConnection(
        socket.gethostbyname(config.get_security_server_url()),
        config.get_security_server_port(),
    )

    conn.request("GET", "/v1/users/current", {}, headers)
    response = conn.getresponse()

    if (response.status != 200):
        raise errors.InvalidAuth()

    result = json.body_to_dic(response.read().decode('utf-8'))
    if (len(result) == 0):
        raise errors.InvalidAuth()

    return result
Exemple #3
0
        def callback(ch, method, properties, body):
            event = json_serializer.body_to_dic(body.decode('utf-8'))
            if(len(json_serializer.validateSchema(EVENT, event)) > 0):
                return

            if (event["type"] == "logout"):
                security.invalidateSession(event["message"])
Exemple #4
0
        def callback(ch, method, properties, body):
            event = json.body_to_dic(body.decode('utf-8'))
            if len(validator.validateSchema(EVENT, event)) > 0:
                return

            if event["type"] == "logout":
                security.invalidate_session(event["message"])
Exemple #5
0
 def create_review(id_article):
     user = security.isValidToken(flask.request.headers.get("Authorization"))
     parameters = json.body_to_dic(flask.request.data)
     parameters.update({'id_article': id_article})
     parameters = rest_validator.validateAddorEditReview(parameters)
     common_service.get_article(id_article)
     common_service.get_order(flask.request.headers.get("Authorization"), id_article)
     result = service.add_review(parameters, user["id"])
     return json.dic_to_json(result)
Exemple #6
0
    def modifyLevel(levelId):
        try:
            security.validateAdminRole(
                flask.request.headers.get("Authorization"))
            params = json.body_to_dic(flask.request.data)
            result = crud.modifyLevel(levelId, params)

            return json.dic_to_json(result)
        except Exception as err:
            return errors.handleError(err)
Exemple #7
0
 def manageScore():
     try:
         security.validateAdminRole(
             flask.request.headers.get("Authorization"))
         params = json.body_to_dic(flask.request.data)
         userId = params['userId']
         result = crud.manageScore(userId, params)
         return result
     except Exception as err:
         return errors.handleError(err)
Exemple #8
0
        def callback(ch, method, properties, body):
            event = json.body_to_dic(body.decode('utf-8'))
            if (len(validator.validateSchema(EVENT_CALLBACK, event)) > 0):
                return

            if (event["type"] == "article-exist"):
                message = event["message"]
                if (len(validator.validateSchema(MSG_ARTICLE_EXIST, message)) >
                        0):
                    return

                exchange = event["exchange"]
                queue = event["queue"]
                referenceId = message["referenceId"]
                articleId = message["articleId"]

                print(
                    "RabbitMQ Catalog GET article-exist catalogId:%r , articleId:%r",
                    referenceId, articleId)

                try:
                    articleValidation.validateArticleExist(articleId)
                    sendArticleValid(exchange, queue, referenceId, articleId,
                                     True)
                except Exception:
                    sendArticleValid(exchange, queue, referenceId, articleId,
                                     False)

            if (event["type"] == "article-data"):
                message = event["message"]
                if (len(validator.validateSchema(MSG_ARTICLE_EXIST, message)) >
                        0):
                    return

                exchange = event["exchange"]
                queue = event["queue"]
                referenceId = message["referenceId"]
                articleId = message["articleId"]

                print(
                    "RabbitMQ Catalog GET article-data catalogId:%r , articleId:%r",
                    referenceId, articleId)

                try:
                    article = crud.getArticle(articleId)
                    valid = ("enabled" in article and article["enabled"])
                    stock = article["stock"]
                    price = article["price"]
                    articleValidation.validateArticleExist(articleId)
                    sendArticleData(exchange, queue, referenceId, articleId,
                                    valid, stock, price)
                except Exception:
                    sendArticleData(exchange, queue, referenceId, articleId,
                                    False, 0, 0)
Exemple #9
0
        def callback(ch, method, properties, body):
            event = json.body_to_dic(body.decode('utf-8'))
            if (len(validator.validateSchema(EVENT, event)) > 0):
                return

            if (event["type"] == "Delete_article"):
                message = event["message"]
                if (len(validator.validateSchema(MSG_DELETE_ARTICLE, message))
                        > 0):
                    return
                articleId = message["articleId"]

                results = db.category.find({"validation": True})
                for r in results:
                    listArticle = r["articlesCategory"]
                    for element in listArticle:
                        if (element["_id"] == articleId):
                            listArticle.remove(element)
                            r["articlesCategory"] = listArticle
                            r["updated"] = datetime.datetime.utcnow()
                            db.category.replace_one(
                                {"_id": bson.ObjectId(r["_id"])}, r)

            if (event["type"] == "Updated_article"):
                message = event["message"]
                if (len(validator.validateSchema(MSG_UPDATE_ARTICLE, message))
                        > 0):
                    return
                articleId = message["articleId"]
                new_element = {
                    "_id": message["articleId"],
                    "name": message["name"],
                    "description": message["description"],
                    "image": message["image"],
                    "price": message["price"],
                    "stock": message["stock"],
                    "updated": message["updated"],
                    "created": message["created"],
                    "enabled": message["enabled"]
                }

                results = db.category.find({"validation": True})
                for r in results:
                    listArticle = r["articlesCategory"]
                    for element in listArticle:
                        if (element["_id"] == articleId):
                            n = listArticle.index(element)
                            listArticle.remove(element)
                            listArticle.insert(n, new_element)
                            r["articlesCategory"] = listArticle
                            r["updated"] = datetime.datetime.utcnow()
                            db.category.replace_one(
                                {"_id": bson.ObjectId(r["_id"])}, r)
Exemple #10
0
 def delete_review(id_article):
     if flask.request.data:
         parameters = json.body_to_dic(flask.request.data)
         if "id_user" in parameters:
             security.validateAdminRole(flask.request.headers.get("Authorization"))
             common_service.get_article(id_article)
             return json.dic_to_json(service.disable_review(id_article, parameters['id_user']))
     user = security.isValidToken(flask.request.headers.get("Authorization"))
     common_service.get_article(id_article)
     common_service.get_order(flask.request.headers.get("Authorization"), id_article)
     result = service.disable_review(id_article, user['id'])
     return json.dic_to_json(result)
Exemple #11
0
    def updateValuePoint():
        try:
            security.validateAdminRole(
                flask.request.headers.get("Authorization"))

            params = json.body_to_dic(flask.request.data)

            result = crud.updateValuePoint(params)

            return result
        except Exception as err:
            return errors.handleError(err)
 def notificationMercadoPago():
     '''
     Metodo para recibir notificaciones acerca de creaciones de pagos
     '''
     try:
         # validar que la request sea de mercadopago
         # TODO : Validar lo que entra por este endpoint
         params = json.body_to_dic(flask.request.data)
         #creo el evento de rabbit y lo mando
         rabbit_service.postTransactions(params)
         return flask.Response(status=200)
     except Exception as err:
         return errors.handleError(err)
Exemple #13
0
 def cancelPayment(paymentId):
     try:
         security.isValidToken(flask.request.headers.get("Authorization"))
         params = json.body_to_dic(flask.request.data)
         params = restValidator.validateCancelPaymentParams(params)
         params['status'] = 'cancelled'
         # aca hago el crud yo pero tendria que hacerse cuando llegue la notificacion de mp
         # llamo a mp y cancelo
         updated_payment = payments_crud.addStatus(paymentId, params)
         res = payments_crud.updatePayment(paymentId, updated_payment)
         return json.dic_to_json(res)
     except Exception as err:
         return errors.handleError(err)
Exemple #14
0
    def updateArticle(articleId):
        try:
            security.validateAdminRole(flask.request.headers.get("Authorization"))

            params = json.body_to_dic(flask.request.data)

            params = restValidator.validateEditArticleParams(articleId, params)

            result = crud.updateArticle(articleId, params)

            return json.dic_to_json(result)
        except Exception as err:
            return errors.handleError(err)
Exemple #15
0
    def add_discount():
        try:
            security.validateAdminRole(
                flask.request.headers.get("Authorization"))
            token = flask.request.headers.get("Authorization")
            params = json.body_to_dic(flask.request.data)

            validated_discount = restValidator.validateAddDiscountParams(
                params)

            result = crud.add_discount(validated_discount)

            return json.dic_to_json(result)
        except Exception as err:
            return errors.handleError(err)
Exemple #16
0
def get_article(id_article):
    conn = http.client.HTTPConnection(
        socket.gethostbyname(config.get_catalog_server_url()),
        config.get_catalog_server_port(),
    )

    try:
        conn.request("GET", "/v1/articles/{}".format(id_article), {})
        response = conn.getresponse()
        if response.status != 200 or (not json.body_to_dic(
                response.read().decode('utf-8'))['enabled']):
            raise errors.InvalidArgument('id_article', 'Invalido')
        return json.dic_to_json(response.read().decode('utf-8'))
    except Exception:
        raise Exception
Exemple #17
0
    def addPayment():
        try:
            # TODO Duda : Como sacar las busquedas order y user en otro lado? se puede hacer?
            token = flask.request.headers.get("Authorization")
            user = security.isValidToken(token)
            params = json.body_to_dic(flask.request.data)
            params = restValidator.validateAddPaymentParams(params)

            order = orders.getOrder(params['id_order'], token)

            # se comunica con un servicio externo
            result = payments_crud.addPayment(params, order, user)

            return json.dic_to_json(result)
        except Exception as err:
            return errors.handleError(err)
Exemple #18
0
    def add_price():
        try:
            security.validateAdminRole(
                flask.request.headers.get("Authorization"))
            token = flask.request.headers.get("Authorization")
            params = json.body_to_dic(flask.request.data)
            responses = []

            for price in params:
                validated_price = restValidator.validateAddPriceParams(price)
                result = crud.add_price(validated_price)
                responses.append(result.copy())

            return json.dic_to_json(responses)
        except Exception as err:
            return errors.handleError(err)
Exemple #19
0
 def callback(ch, method, properties, body):
     print(" [x] %r:%r" % (method.routing_key, body))
     event = json.body_to_dic(body.decode('utf-8'))
     """if(len(validator.validateSchema(EVENT_CALLBACK, event)) > 0):
         return
     """
     if (event["type"] == "order-payed"):
         message = event["message"]
         exchange = event["exchange"]
         queue = event["queue"]
         orderId = message["orderId"]
         userId = message["userId"]
         amount = message["amount"]
         print("RabbitMQ order-placed orderId:", orderId, "userId: ",
               userId, " amount= $", amount)
         crud.updateScore(userId, amount)
         print("Score Updated Succesfully")
Exemple #20
0
def get_specific_order(token, id_order, id_article):
    headers = {"Authorization".encode("utf-8"): token.encode("utf-8")}
    conn = http.client.HTTPConnection(
        socket.gethostbyname(config.get_order_server_url()),
        config.get_order_server_port())

    try:
        conn.request("GET", "/v1/orders/{}".format(id_order), {}, headers)
        response = conn.getresponse()
        if response.status != 200:
            raise errors.InvalidRequest('No existe una orden con ese id')
        else:
            order = json.body_to_dic(response.read().decode('utf-8'))
            for article in order['articles']:
                if article['id'] == id_article:
                    return order
            return ""
    except Exception:
        raise Exception
Exemple #21
0
        def callback(ch, method, properties, body):
            event = json_serializer.body_to_dic(body.decode('utf-8'))
            if(len(validator.validateSchema(EVENT, event)) > 0):
                return

            if (event["type"] == "article-exist"):
                message = event.get('message')

                if(len(validator.validateSchema(MSG_ARTICLE_EXIST, message)) > 0):
                    return

                article_id = message.get('articleId')
                print("RabbitMQ Catalog POST article-exist article_id: {}".format(article_id))

                try:
                    if not message['valid']:
                        crud.del_price(article_id)

                except Exception:
                    print('Cannot handle article-exist')
def get_article(articleId, authKey):
 
  if (not isinstance(authKey, str) or len(authKey) == 0):
    raise errors.InvalidAuth()

  headers = {"Authorization".encode("utf-8"): authKey.encode("utf-8")}

  conn = http.client.HTTPConnection(
    socket.gethostbyname(config.get_connection_catalog_server_url()),
    config.get_connection_catalog_server_port(),
  )
  
  conn.request('GET',"/v1/articles/" + articleId, {}, headers)
  response = conn.getresponse()

  if (response.status != 200):
    raise errors.InvalidAuth()

  result = json.body_to_dic(response.read().decode('utf-8'))
  if (len(result) == 0):
    raise errors.InvalidAuth()

  return result
Exemple #23
0
def get_order(token, id_article):
    conn = http.client.HTTPConnection(
        socket.gethostbyname(config.get_order_server_url()),
        config.get_order_server_port())

    try:
        headers = {"Authorization".encode("utf-8"): token.encode("utf-8")}

        conn.request("GET", "/v1/orders", {}, headers)
        response = conn.getresponse()
    except Exception:
        raise Exception

    if response.status == 200:
        for obj in json.body_to_dic(response.read().decode('utf-8')):
            if obj['status'] == 'PAYMENT_DEFINED':
                order = get_specific_order(token, obj['id'], id_article)
                if order != "":
                    return order
        raise errors.InvalidRequest(
            'No existen ordenes pagadas para este articulo')
    else:
        raise errors.InvalidRequest("Invalid Request")
def getOrder(orderId, authKey):
    """
    Obtiene el order desde el servicio orders
    orderId: string id de order enviado por el cliente
    authKey: string El header Authorization enviado por el cliente
    return dict<property, value> Order
    """
    headers = {"Authorization".encode("utf-8"): authKey.encode("utf-8")}
    conn = http.client.HTTPConnection(
        socket.gethostbyname(config.get_orders_server_url()),
        config.get_orders_server_port(),
    )

    conn.request("GET", "/v1/orders/"+orderId,{}, headers)
    response = conn.getresponse()
    if (response.status != 200):
        raise errors.InvalidAuth()

    result = json.body_to_dic(response.read().decode('utf-8'))
    if result == None:
        raise errors.InvalidArgument('orderId', 'No order with that id')
    # for res in result:
        # if orderId == res['id']:
    return result
Exemple #25
0
 def callback(ch, method, properties, body):
     params = json.body_to_dic(body.decode('utf-8'))
     transactions_service.process_transaction(params)
     ch.basic_ack(delivery_tag=method.delivery_tag)
 def callback(ch, method, properties, body):
     
     event = json.body_to_dic(body.decode('utf-8'))
     resp = service.saveOrders(event) ## Se recibe una orden y se calcula la estadistica y se guarda los articulos en la base de datos.
     statsService.sendStats()## Se envia a la cola de rabbit , luego de que se haya calculado la estadistica al recibir una orden.
Exemple #27
0
 def callback(ch, method, properties, body):
     event = json.body_to_dic(body.decode('utf-8'))
     print("Payment Failed!")
     print(event)