Exemplo n.º 1
0
class HealthCheck(View, Controller):
    """Health Check Page Controller"""
    def get(self, request):

        self.__health = Health()
        self.__helpers = Helpers()
        self.__logger = self.__helpers.get_logger(__name__)

        status = Health.OK
        errors = []
        errors.extend(self.__health.check_db())
        errors.extend(self.__health.check_io())
        errors.extend(self.__health.check_workers())

        if len(errors) > 0:
            status = Health.NOT_OK
            self.__logger.error(
                _("Health Check Result: %(status)s %(errors)s") % {
                    "status": status,
                    "errors": self.__helpers.json_dumps(errors)
                })
        else:
            self.__logger.info(
                _("Health Check Result: %(status)s %(errors)s") % {
                    "status": status,
                    "errors": self.__helpers.json_dumps(errors)
                })

        return JsonResponse({
            "status": status,
            "messages": []
        },
                            status=200 if status == Health.OK else 503)
Exemplo n.º 2
0
class Response():

    __private = {}
    __public = {}
    __helpers = None
    __logger = None

    def __init__(self):
        self.__helpers = Helpers()
        self.__logger = self.__helpers.get_logger(__name__)

    def send_private_success(self, messages, payload={}):
        self.__private["status"] = "success"
        self.__private["messages"] = messages
        if len(payload) > 0:
            self.__private["payload"] = payload

        self.__logger.debug(
            _("App Response: ") + self.__helpers.json_dumps(self.__private) +
            "\n")
        return self.__private

    def send_private_failure(self, messages, payload={}):
        self.__private["status"] = "failure"
        self.__private["messages"] = messages
        if len(payload) > 0:
            self.__private["payload"] = payload

        self.__logger.debug(
            _("App Response: ") + self.__helpers.json_dumps(self.__private) +
            "\n")
        return self.__private

    def send_public_success(self, messages, payload={}):
        self.__public["status"] = "success"
        self.__public["messages"] = messages
        if len(payload) > 0:
            self.__public["payload"] = payload

        self.__logger.debug(
            _("App Response: ") + self.__helpers.json_dumps(self.__public) +
            "\n")
        return self.__public

    def send_public_failure(self, messages, payload={}):
        self.__public["status"] = "failure"
        self.__public["messages"] = messages
        if len(payload) > 0:
            self.__public["payload"] = payload

        self.__logger.debug(
            _("App Response: ") + self.__helpers.json_dumps(self.__public) +
            "\n")
        return self.__public
Exemplo n.º 3
0
class Request():

    __request = None
    __helpers = None
    __logger = None

    def __init__(self, request=None):
        self.__request = request
        self.__helpers = Helpers()
        self.__logger = self.__helpers.get_logger(__name__)

    def set_request(self, request):
        self.__request = request

    def get_request_data(self, method, predicted):
        request_data = {}
        data_bag = self.__request.POST if method.lower(
        ) == "post" else self.__request.GET

        for key, default in predicted.items():
            request_data[key] = data_bag[key] if key in data_bag else default

        self.__logger.debug(
            _("App Incoming Request: ") +
            self.__helpers.json_dumps(request_data))
        return request_data
Exemplo n.º 4
0
class Request():

    def __init__(self, request=None):
        self.__request = request
        self.__helpers = Helpers()
        self.__logger = self.__helpers.get_logger(__name__)

    def set_request(self, request):
        self.__request = request

    def get_request_data(self, method, predicted):
        request_data = {}
        log_data = {}
        data_bag = self.__request.POST if method.lower() == "post" else self.__request.GET

        for key, default in predicted.items():
            if "password" in key:
                log_data[key] = "<hidden>" if key in data_bag else default
            elif "token" in key:
                log_data[key] = "<hidden>" if key in data_bag else default
            else:
                log_data[key] = data_bag[key] if key in data_bag else default
            request_data[key] = data_bag[key] if key in data_bag else default

        self.__logger.info(_("Required request data: %(data)s") % {
            "data": self.__helpers.json_dumps(log_data)
        })

        return request_data
Exemplo n.º 5
0
class Request():
    def __init__(self, request=None):
        self.__request = request
        self.__helpers = Helpers()
        self.__logger = self.__helpers.get_logger(__name__)

    def set_request(self, request):
        self.__request = request

    def get_request_data(self, method, predicted):
        request_data = {}
        log_data = {}
        correlation_id = self.__request.META[
            "X-Correlation-ID"] if "X-Correlation-ID" in self.__request.META else ""
        data_bag = self.__request.POST if method.lower(
        ) == "post" else self.__request.GET

        for key, default in predicted.items():
            if "password" in key:
                log_data[key] = "<hidden>" if key in data_bag else default
            elif "token" in key:
                log_data[key] = "<hidden>" if key in data_bag else default
            else:
                log_data[key] = data_bag[key] if key in data_bag else default
            request_data[key] = data_bag[key] if key in data_bag else default

        self.__logger.debug(
            _("App Incoming Request: %(data)s {'correlationId':'%(correlationId)s'}"
              ) % {
                  "data": self.__helpers.json_dumps(log_data),
                  "correlationId": correlation_id
              })

        return request_data
Exemplo n.º 6
0
class HealthCheck(View):

    __response = None
    __correlation_id = None
    __health = None
    __helpers = None
    __logger = None

    def get(self, request):

        self.__correlation_id = request.META[
            "X-Correlation-ID"] if "X-Correlation-ID" in request.META else ""
        self.__response = Response()
        self.__health = Health()
        self.__helpers = Helpers()
        self.__logger = self.__helpers.get_logger(__name__)

        status = Health.OK
        errors = []
        errors.extend(self.__health.check_db())
        errors.extend(self.__health.check_io())
        errors.extend(self.__health.check_workers())

        if len(errors) > 0:
            status = Health.NOT_OK
            self.__logger.error(
                _("Health Check Result: %(status)s %(errors)s {'correlationId':'%(correlationId)s'}"
                  ) % {
                      "status": status,
                      "errors": self.__helpers.json_dumps(errors),
                      "correlationId": self.__correlation_id
                  })
        else:
            self.__logger.debug(
                _("Health Check Result: %(status)s %(errors)s {'correlationId':'%(correlationId)s'}"
                  ) % {
                      "status": status,
                      "errors": self.__helpers.json_dumps(errors),
                      "correlationId": self.__correlation_id
                  })

        return JsonResponse(self.__response.send({"status": status},
                                                 self.__correlation_id),
                            status=200 if status == Health.OK else 503)
Exemplo n.º 7
0
class Host(View):

    __request = None
    __response = None
    __helpers = None
    __form = None
    __logger = None
    __user_id = None
    __host_id = None
    __host_module = None

    def __init__(self):
        self.__request = Request()
        self.__response = Response()
        self.__helpers = Helpers()
        self.__form = Form()
        self.__host_module = Host_Module()
        self.__logger = self.__helpers.get_logger(__name__)

    def post(self, request, host_id):

        self.__user_id = request.user.id
        self.__host_id = host_id

        if not self.__host_module.user_owns(self.__host_id, self.__user_id):
            return JsonResponse(
                self.__response.send_private_failure([{
                    "type":
                    "error",
                    "message":
                    _("Error! Invalid Request.")
                }]))

        self.__request.set_request(request)
        request_data = self.__request.get_request_data(
            "post", {
                "name": "",
                "slug": "",
                "server": "",
                "type": "",
                "auth_type": "",
                "tls_ca_certificate": "",
                "tls_certificate": "",
                "tls_key": ""
            })

        self.__form.add_inputs({
            'name': {
                'value': request_data["name"],
                'validate': {
                    'host_name': {
                        'error': _("Error! Host Name is invalid.")
                    },
                    'length_between': {
                        'param': [3, 41],
                        'error':
                        _("Error! Host slug length must be from 4 to 40 characters."
                          )
                    }
                }
            },
            'slug': {
                'value': request_data["slug"],
                'validate': {
                    'host_slug': {
                        'error': _('Error! Host slug is not valid.')
                    },
                    'length_between': {
                        'param': [3, 21],
                        'error':
                        _('Error! Host slug length must be from 4 to 20 characters.'
                          )
                    }
                }
            },
            'server': {
                'value': request_data["server"],
                'validate': {
                    'host_server': {
                        'error': _('Error! Host server is not valid.')
                    },
                    'length_between': {
                        'param': [3, 60],
                        'error':
                        _('Error! Host server length must be from 4 to 20 characters.'
                          )
                    }
                }
            },
            'type': {
                'value': request_data["type"],
                'validate': {
                    'any_of': {
                        'param': [["docker"]],
                        'error': _('Error! Host type is invalid.')
                    }
                }
            },
            'auth_type': {
                'value': request_data["auth_type"],
                'validate': {
                    'any_of': {
                        'param': [[
                            "no_auth", "tls_server_client", "tls_client_only",
                            "tls_server_only", "tls_only"
                        ]],
                        'error':
                        _('Error! Auth type is invalid.')
                    }
                }
            },
            'tls_ca_certificate': {
                'value': request_data["tls_ca_certificate"],
                'validate': {
                    'optional': {},
                    'tls_certificate': {
                        'error': _('Error! TLS CA Certificate is invalid.')
                    }
                }
            },
            'tls_certificate': {
                'value': request_data["tls_certificate"],
                'validate': {
                    'optional': {},
                    'tls_certificate': {
                        'error': _('Error! TLS Certificate is invalid.')
                    }
                }
            },
            'tls_key': {
                'value': request_data["tls_key"],
                'validate': {
                    'optional': {},
                    'tls_certificate': {
                        'error': _('Error! TLS Key is invalid.')
                    }
                }
            }
        })

        self.__form.process()

        if not self.__form.is_passed():
            return JsonResponse(
                self.__response.send_private_failure(
                    self.__form.get_errors(with_type=True)))

        if self.__host_module.slug_used_elsewhere(
                self.__host_id, self.__form.get_input_value("slug"),
                self.__user_id):
            return JsonResponse(
                self.__response.send_private_failure([{
                    "type":
                    "error",
                    "message":
                    _("Error! Host slug is already used.")
                }]))

        result = self.__host_module.update_one_by_id(
            self.__host_id, {
                "name":
                self.__form.get_input_value("name"),
                "slug":
                self.__form.get_input_value("slug"),
                "server":
                self.__form.get_input_value("server"),
                "type":
                self.__form.get_input_value("type"),
                "auth_data":
                self.__helpers.json_dumps({
                    "auth_type":
                    self.__form.get_input_value("auth_type"),
                    "tls_ca_certificate":
                    self.__form.get_input_value("tls_ca_certificate"),
                    "tls_certificate":
                    self.__form.get_input_value("tls_certificate"),
                    "tls_key":
                    self.__form.get_input_value("tls_key")
                }),
                "user_id":
                self.__user_id
            })

        if result:
            return JsonResponse(
                self.__response.send_private_success([{
                    "type":
                    "success",
                    "message":
                    _("Host updated successfully.")
                }]))

        else:
            return JsonResponse(
                self.__response.send_private_failure([{
                    "type":
                    "error",
                    "message":
                    _("Error! Something goes wrong while creating host.")
                }]))

    def delete(self, request, host_id):

        self.__user_id = request.user.id
        self.__host_id = host_id

        if not self.__host_module.user_owns(self.__host_id, self.__user_id):
            return JsonResponse(
                self.__response.send_private_failure([{
                    "type":
                    "error",
                    "message":
                    _("Error! Invalid Request.")
                }]))

        if self.__host_module.delete_host(self.__host_id):
            return JsonResponse(
                self.__response.send_private_success([{
                    "type":
                    "success",
                    "message":
                    _("Host deleted successfully.")
                }]))

        else:
            return JsonResponse(
                self.__response.send_private_failure([{
                    "type":
                    "error",
                    "message":
                    _("Error! Something goes wrong while deleting a host.")
                }]))
Exemplo n.º 8
0
class Hosts(View):

    __request = None
    __response = None
    __helpers = None
    __form = None
    __logger = None
    __user_id = None
    __host_module = None
    __status = None

    def __init__(self):
        self.__request = Request()
        self.__response = Response()
        self.__helpers = Helpers()
        self.__form = Form()
        self.__host_module = Host_Module()
        self.__status = Status()
        self.__logger = self.__helpers.get_logger(__name__)

    def get(self, request):

        self.__user_id = request.user.id

        return JsonResponse(
            self.__response.send_private_success(
                [], {
                    'hosts':
                    self.__format_host(
                        self.__host_module.get_many_by_user(
                            self.__user_id, "created_at", False))
                }))

    def post(self, request):

        self.__user_id = request.user.id

        self.__request.set_request(request)
        request_data = self.__request.get_request_data(
            "post", {
                "name": "",
                "slug": "",
                "server": "",
                "type": "",
                "auth_type": "",
                "tls_ca_certificate": "",
                "tls_certificate": "",
                "tls_key": ""
            })

        self.__form.add_inputs({
            'name': {
                'value': request_data["name"],
                'validate': {
                    'host_name': {
                        'error': _("Error! Host Name is invalid.")
                    },
                    'length_between': {
                        'param': [3, 41],
                        'error':
                        _("Error! Host slug length must be from 4 to 40 characters."
                          )
                    }
                }
            },
            'slug': {
                'value': request_data["slug"],
                'validate': {
                    'host_slug': {
                        'error': _('Error! Host slug is not valid.')
                    },
                    'length_between': {
                        'param': [3, 21],
                        'error':
                        _('Error! Host slug length must be from 4 to 20 characters.'
                          )
                    }
                }
            },
            'server': {
                'value': request_data["server"],
                'validate': {
                    'host_server': {
                        'error': _('Error! Host server is not valid.')
                    },
                    'length_between': {
                        'param': [3, 60],
                        'error':
                        _('Error! Host server length must be from 4 to 20 characters.'
                          )
                    }
                }
            },
            'type': {
                'value': request_data["type"],
                'validate': {
                    'any_of': {
                        'param': [["docker"]],
                        'error': _('Error! Host type is invalid.')
                    }
                }
            },
            'auth_type': {
                'value': request_data["auth_type"],
                'validate': {
                    'any_of': {
                        'param': [[
                            "no_auth", "tls_server_client", "tls_client_only",
                            "tls_server_only", "tls_only"
                        ]],
                        'error':
                        _('Error! Auth type is invalid.')
                    }
                }
            },
            'tls_ca_certificate': {
                'value': request_data["tls_ca_certificate"],
                'validate': {
                    'optional': {},
                    'tls_certificate': {
                        'error': _('Error! TLS CA Certificate is invalid.')
                    }
                }
            },
            'tls_certificate': {
                'value': request_data["tls_certificate"],
                'validate': {
                    'optional': {},
                    'tls_certificate': {
                        'error': _('Error! TLS Certificate is invalid.')
                    }
                }
            },
            'tls_key': {
                'value': request_data["tls_key"],
                'validate': {
                    'optional': {},
                    'tls_certificate': {
                        'error': _('Error! TLS Key is invalid.')
                    }
                }
            }
        })

        self.__form.process()

        if not self.__form.is_passed():
            return JsonResponse(
                self.__response.send_private_failure(
                    self.__form.get_errors(with_type=True)))

        if self.__host_module.slug_used(self.__form.get_input_value("slug"),
                                        self.__user_id):
            return JsonResponse(
                self.__response.send_private_failure([{
                    "type":
                    "error",
                    "message":
                    _("Error! Host slug is already used.")
                }]))

        result = self.__host_module.insert_one({
            "name":
            self.__form.get_input_value("name"),
            "slug":
            self.__form.get_input_value("slug"),
            "server":
            self.__form.get_input_value("server"),
            "type":
            self.__form.get_input_value("type"),
            "auth_data":
            self.__helpers.json_dumps({
                "auth_type":
                self.__form.get_input_value("auth_type"),
                "tls_ca_certificate":
                self.__form.get_input_value("tls_ca_certificate"),
                "tls_certificate":
                self.__form.get_input_value("tls_certificate"),
                "tls_key":
                self.__form.get_input_value("tls_key")
            }),
            "user_id":
            self.__user_id
        })

        if result:
            return JsonResponse(
                self.__response.send_private_success([{
                    "type":
                    "success",
                    "message":
                    _("Host created successfully.")
                }]))

        else:
            return JsonResponse(
                self.__response.send_private_failure([{
                    "type":
                    "error",
                    "message":
                    _("Error! Something goes wrong while creating host.")
                }]))

    def __format_host(self, hosts_list):
        _hosts_list = []

        for host in hosts_list:
            _status = "up" if self.__status.set_host(
                host.id).ping() else "down"
            _hosts_list.append({
                "id":
                host.id,
                "name":
                host.name,
                "slug":
                host.slug,
                "status":
                _status,
                "type":
                host.type.capitalize(),
                "created_at":
                host.created_at.strftime("%b %d %Y %H:%M:%S"),
                "view_url":
                reverse("app.web.admin.hosts.view",
                        kwargs={'host_slug': host.slug}),
                "edit_url":
                reverse("app.web.admin.hosts.edit",
                        kwargs={'host_slug': host.slug}),
                "delete_url":
                reverse("app.api.private.v1.admin.host.endpoint",
                        kwargs={'host_id': host.id})
            })

        return _hosts_list
Exemplo n.º 9
0
class Response():
    def __init__(self):
        self.__helpers = Helpers()
        self.__logger = self.__helpers.get_logger(__name__)

    def send_private_success(self, messages, payload={}, correlation_id=""):
        private = {}
        private["status"] = "success"
        private["messages"] = messages
        if len(payload) > 0:
            private["payload"] = payload

        self.__log_response(copy.deepcopy(private), correlation_id)

        return private

    def send_private_failure(self, messages, payload={}, correlation_id=""):
        private = {}
        private["status"] = "failure"
        private["messages"] = messages
        if len(payload) > 0:
            private["payload"] = payload

        self.__log_response(copy.deepcopy(private), correlation_id)

        return private

    def send_errors_failure(self, messages, payload={}, correlation_id=""):
        private = {}
        errors = []
        for input_key, error_list in messages.items():
            for error in error_list:
                errors.append({"type": "error", "message": error})
        private["status"] = "failure"
        private["messages"] = errors
        if len(payload) > 0:
            private["payload"] = payload

        self.__log_response(copy.deepcopy(private), correlation_id)

        return private

    def send_public_success(self, messages, payload={}, correlation_id=""):
        public = {}
        public["status"] = "success"
        public["messages"] = messages
        if len(payload) > 0:
            public["payload"] = payload

        self.__log_response(copy.deepcopy(public), correlation_id)

        return public

    def send_public_failure(self, messages, payload={}, correlation_id=""):
        public = {}
        public["status"] = "failure"
        public["messages"] = messages
        if len(payload) > 0:
            public["payload"] = payload

        self.__log_response(copy.deepcopy(public), correlation_id)

        return public

    def send(self, payload={}, correlation_id=""):
        self.__logger.debug(
            _("App Response: %(response)s {'correlationId':'%(correlationId)s'}\n"
              ) % {
                  "response": self.__helpers.json_dumps(payload),
                  "correlationId": correlation_id
              })
        return payload

    def __log_response(self, response, correlation_id):
        if "payload" in response:
            for key, value in response["payload"].items():
                if "password" in key:
                    response["payload"][key] = "<hidden>"
                elif "token" in key:
                    response["payload"][key] = "<hidden>"
                else:
                    response["payload"][key] = value

        self.__logger.debug(
            _("App Response: %(response)s {'correlationId':'%(correlationId)s'}\n"
              ) % {
                  "response": self.__helpers.json_dumps(response),
                  "correlationId": correlation_id
              })