Beispiel #1
0
 def test_get_one_by_key(self):
     option_entity = Option_Entity()
     option = option_entity.insert_one({
         "key": "key7",
         "value": "value7",
         "autoload": True
     })
     self.assertEqual(option_entity.get_one_by_key("key7"), option)
     self.assertEqual(option_entity.get_one_by_key("key7").key, "key7")
     self.assertFalse(option_entity.get_one_by_key("not_found_key"))
Beispiel #2
0
class Forgot_Password():

    __reset_request_entity = None
    __option_entity = None
    __user_entity = None
    __job_entity = None
    __helpers = None

    __reset_expire_option = 24
    __messages_count_option = 5

    def __init__(self):
        self.__reset_request_entity = Reset_Request_Entity()
        self.__option_entity = Option_Entity()
        self.__helpers = Helpers()
        self.__user_entity = User_Entity()
        self.__job_entity = Job_Entity()

        messages_count_option = self.__option_entity.get_one_by_key(
            "reset_mails_messages_count")
        reset_expire_option = self.__option_entity.get_one_by_key(
            "reset_mails_expire_after")

        if messages_count_option != False:
            self.__messages_count_option = int(messages_count_option.value)

        if reset_expire_option != False:
            self.__reset_expire_option = int(reset_expire_option.value)

    def check_email(self, email):
        return True if self.__user_entity.get_one_by_email(
            email) != False else False

    def reset_request_exists(self, email):
        return self.__reset_request_entity.get_one_by_email(email)

    def is_spam(self, request):
        if request.messages_count >= self.__messages_count_option and timezone.now(
        ) < request.expire_at:
            return True
        return False

    def update_request(self, request):

        # Delete Old Request
        self.__reset_request_entity.delete_one_by_id(request.id)

        # Create a Fresh Request
        if timezone.now() > request.expire_at:
            return self.create_request(request.email)

        # Create from the Old Request
        request = self.__reset_request_entity.insert_one({
            "email":
            request.email,
            "expire_at":
            request.expire_at,
            "messages_count":
            request.messages_count + 1
        })
        return request.token if request != False else False

    def create_request(self, email):
        request = self.__reset_request_entity.insert_one({
            "email": email,
            "expire_after": self.__reset_expire_option,
            "messages_count": 0
        })
        return request.token if request != False else False

    def send_message(self, email, token):
        return self.__job_entity.insert_one({
            "name":
            "reset_password_msg_for_%s" % (email),
            "executor":
            "forgot_password_email.Forgot_Password_Email",
            "parameters": {
                "recipient_list": [email],
                "token": token
            },
            "interval": {
                "type": Job_Entity.ONCE
            }
        })
Beispiel #3
0
class Install():

    __options = [
        {"key": "app_installed", "value": "true", "autoload": True},
        {"key": "app_description", "value": "", "autoload": False},
        {"key": "google_analytics_account", "value": "", "autoload": True},
        {"key": "reset_mails_messages_count", "value": "5", "autoload": False},
        {"key": "reset_mails_expire_after", "value": "24", "autoload": False},
        {"key": "access_tokens_expire_after", "value": "48", "autoload": False},
        {"key": "prometheus_token", "value": "", "autoload": False}
    ]
    __admin = {
        "username": "",
        "email": "",
        "password": "",
        "is_superuser": True,
        "is_active": True,
        "is_staff": False
    }
    __option_entity = None
    __user_entity = None
    __helpers = None
    __logger = None
    __acl = None

    def __init__(self):
        self.__option_entity = Option_Entity()
        self.__user_entity = User_Entity()
        self.__helpers = Helpers()
        self.__acl = ACL()
        self.__logger = self.__helpers.get_logger(__name__)

    def is_installed(self):
        return False if self.__option_entity.get_one_by_key("app_installed") is False else True

    def set_app_data(self, name, email, url):
        self.__options.append({"key": "app_name", "value": name, "autoload": True})
        self.__options.append({"key": "app_email", "value": email, "autoload": True})
        self.__options.append({"key": "app_url", "value": url, "autoload": True})

    def set_admin_data(self, username, email, password):
        self.__admin["username"] = username
        self.__admin["email"] = email
        self.__admin["password"] = password

    def init_base_acl(self, user_id):
        self.__acl.truncate_default_permissions()
        self.__acl.new_role("super_admin")
        self.__acl.new_role("normal_user")
        self.__acl.new_permission("Manage Settings", self.__acl.get_content_type_id("auth", "user"), "manage_settings")
        self.__acl.add_permission_to_role("super_admin", "manage_settings")
        self.__acl.add_role_to_user("super_admin", user_id)
        return True

    def install(self):
        try:
            execute_from_command_line(["manage.py", "migrate"])
        except Exception as e:
            self.__logger.error("Error While Running Migrations: %s" % e)
            return False

        status = True
        status &= self.__option_entity.insert_many(self.__options)
        user = self.__user_entity.insert_one(self.__admin)
        status &= (user is not False)

        if user is not False:
            status &= self.init_base_acl(user.id)

        return status
Beispiel #4
0
class Forgot_Password():

    __reset_request_entity = None
    __option_entity = None
    __user_entity = None
    __task_core = None
    __helpers = None

    __reset_expire_option = 24
    __messages_count_option = 5

    def __init__(self):
        self.__reset_request_entity = Reset_Request_Entity()
        self.__option_entity = Option_Entity()
        self.__helpers = Helpers()
        self.__user_entity = User_Entity()
        self.__task_core = Task_Core()

        messages_count_option = self.__option_entity.get_one_by_key(
            "reset_mails_messages_count")
        reset_expire_option = self.__option_entity.get_one_by_key(
            "reset_mails_expire_after")

        if messages_count_option:
            self.__messages_count_option = int(messages_count_option.value)

        if reset_expire_option:
            self.__reset_expire_option = int(reset_expire_option.value)

    def check_email(self, email):
        return True if self.__user_entity.get_one_by_email(
            email) is not False else False

    def reset_request_exists(self, email):
        return self.__reset_request_entity.get_one_by_email(email)

    def is_spam(self, request):
        if request.messages_count >= self.__messages_count_option and timezone.now(
        ) < request.expire_at:
            return True
        return False

    def update_request(self, request):

        # Delete Old Request
        self.__reset_request_entity.delete_one_by_id(request.id)

        # Create a Fresh Request
        if timezone.now() > request.expire_at:
            return self.create_request(request.email)

        # Create from the Old Request
        request = self.__reset_request_entity.insert_one({
            "email":
            request.email,
            "expire_at":
            request.expire_at,
            "messages_count":
            request.messages_count + 1
        })
        return request.token if request is not False else False

    def create_request(self, email):
        request = self.__reset_request_entity.insert_one({
            "email": email,
            "expire_after": self.__reset_expire_option,
            "messages_count": 0
        })
        return request.token if request is not False else False

    def send_message(self, email, token):

        app_name = self.__option_entity.get_value_by_key("app_name")
        app_email = self.__option_entity.get_value_by_key("app_email")
        app_url = self.__option_entity.get_value_by_key("app_url")
        user = self.__user_entity.get_one_by_email(email)

        return self.__task_core.delay(
            "forgot_password_email", {
                "app_name": app_name,
                "app_email": app_email,
                "app_url": app_url,
                "recipient_list": [email],
                "token": token,
                "subject": _("%s Password Reset") % (app_name),
                "template": "mails/reset_password.html",
                "fail_silently": False
            }, user.id)
Beispiel #5
0
class Notification():

    PENDING = "pending"
    FAILED = "failed"
    PASSED = "passed"
    ERROR = "error"
    MESSAGE = "message"

    __notification_entity = None
    __option_entity = None
    __helpers = None
    __humanize = None
    __app_name = None
    __logger = None

    def __init__(self):
        self.__notification_entity = Notification_Entity()
        self.__option_entity = Option_Entity()
        self.__helpers = Helpers()
        self.__humanize = Humanize()
        self.__logger = self.__helpers.get_logger(__name__)
        option = self.__option_entity.get_one_by_key("app_name")
        self.__app_name = option.value if option is not False else ""

    def create_notification(self, data):
        return self.__notification_entity.insert_one(data)

    def user_latest_notifications(self, user_id, count=5):

        notifications = self.__notification_entity.get_many_by_user(
            user_id, "created_at", False, count)

        result = {"notifications": [], "status": "read"}

        for notification in notifications:
            if not notification.delivered:
                result["status"] = "unread"

            result["notifications"].append({
                "id":
                notification.id,
                "type":
                notification.type,
                "highlight":
                self.__humanize_highlight(notification.highlight,
                                          notification.host),
                "description":
                notification.notification,
                "url":
                self.__get_url(notification.url, notification.host),
                "delivered":
                notification.delivered,
                "time":
                self.__humanize_updated_at(notification.created_at)
            })

        return result

    def update_task_notification(self, task_id, type, delivered=False):
        return self.__notification_entity.update_one_by_task_id(
            task_id, {
                "type": type,
                "delivered": delivered
            })

    def mark_notification(self, user_id, notification_id):
        if self.__notification_entity.get_one_by_id_and_user(
                notification_id, user_id):
            return self.__notification_entity.update_one_by_id(
                notification_id, {"delivered": True})

        return False

    def __get_url(self, url, host):
        if host:
            return reverse("app.web.admin.hosts.view",
                           kwargs={'host_slug': host.slug})
        return url

    def __humanize_highlight(self, highlight, host):
        if host:
            return host.name

        if highlight == "$APP_NAME":
            return self.__app_name

        return highlight

    def __humanize_updated_at(self, created_at):
        return self.__humanize.datetime(created_at)
Beispiel #6
0
class Install():

    __option_entity = None
    __user_entity = None
    __options = [{
        "key": "app_installed",
        "value": "true",
        "autoload": True
    }, {
        "key": "app_description",
        "value": "",
        "autoload": False
    }, {
        "key": "google_analytics_account",
        "value": "",
        "autoload": True
    }, {
        "key": "reset_mails_messages_count",
        "value": "5",
        "autoload": False
    }, {
        "key": "reset_mails_expire_after",
        "value": "24",
        "autoload": False
    }, {
        "key": "access_tokens_expire_after",
        "value": "48",
        "autoload": False
    }]
    __admin = {
        "username": "",
        "email": "",
        "password": "",
        "is_superuser": True,
        "is_active": True,
        "is_staff": False
    }
    __helpers = None
    __logger = None

    def __init__(self):
        self.__option_entity = Option_Entity()
        self.__user_entity = User_Entity()
        self.__helpers = Helpers()
        self.__logger = self.__helpers.get_logger(__name__)

    def is_installed(self):
        return False if self.__option_entity.get_one_by_key(
            "app_installed") == False else True

    def set_app_data(self, name, email, url):
        self.__options.append({
            "key": "app_name",
            "value": name,
            "autoload": True
        })
        self.__options.append({
            "key": "app_email",
            "value": email,
            "autoload": True
        })
        self.__options.append({
            "key": "app_url",
            "value": url,
            "autoload": True
        })

    def set_admin_data(self, username, email, password):
        self.__admin["username"] = username
        self.__admin["email"] = email
        self.__admin["password"] = password

    def install(self):
        try:
            execute_from_command_line(["manage.py", "migrate"])
        except Exception as e:
            self.__logger.error("Error While Running Migrations: %s" % e)
            return False

        status = True
        status &= self.__option_entity.insert_many(self.__options)
        status &= (self.__user_entity.insert_one(self.__admin) != False)
        return status