Beispiel #1
0
# String
# string matching list of int separated by ','
regex_string_as_list_of_int = Regexp(
    regex=(re.compile("^(\d+(,\d+)*)?$")))  # noqa: W605
# string matching list of string (without',') separated by ','
regex_string_as_list_of_string = Regexp(
    regex=(re.compile("^([^,]+(,[^,]+)*)?$")))  # noqa: W605

acp_validator = Length(min=2)
not_empty_string_validator = Length(min=1)
action_description_validator = OneOf(ActionDescription.allowed_values())
content_global_status_validator = OneOf(
    [status.value for status in GlobalStatus])
content_status_validator = OneOf(content_status_list.get_all_slugs_values())
user_profile_validator = OneOf(Profile.get_all_valid_slugs())
user_profile_validator_with_nobody = OneOf(
    Profile.get_all_valid_slugs(include_nobody=True))
agenda_type_validator = OneOf(
    [agenda_type.value for agenda_type in AgendaType])
user_timezone_validator = Length(max=User.MAX_TIMEZONE_LENGTH)
user_email_validator = Length(min=User.MIN_EMAIL_LENGTH,
                              max=User.MAX_EMAIL_LENGTH)
user_password_validator = Length(min=User.MIN_PASSWORD_LENGTH,
                                 max=User.MAX_PASSWORD_LENGTH)
user_public_name_validator = Length(min=User.MIN_PUBLIC_NAME_LENGTH,
                                    max=User.MAX_PUBLIC_NAME_LENGTH)
user_lang_validator = Length(min=User.MIN_LANG_LENGTH,
                             max=User.MAX_LANG_LENGTH)
user_role_validator = OneOf(UserRoleInWorkspace.get_all_role_slug())
Beispiel #2
0
    def get_parser(self, prog_name: str) -> argparse.ArgumentParser:

        parser = super().get_parser(prog_name)
        parser.add_argument(
            "-e",
            "--email",
            help="set the user's email address",
            dest="email",
            required=False,
            default=None,
            type=ValidatorType(user_email_validator),
        )
        parser.add_argument(
            "-u",
            "--username",
            help="set the user's username",
            dest="username",
            required=False,
            default=None,
            type=ValidatorType(user_username_validator),
        )
        parser.add_argument(
            "--public-name",
            help="set the user's public name",
            dest="public_name",
            required=False,
            default=None,
            type=ValidatorType(user_public_name_validator),
        )
        parser.add_argument(
            "--allowed_space",
            help="set thes user's allowed space in bytes",
            dest="allowed_space",
            required=False,
            default=None,
            type=int,
        )
        parser.add_argument(
            "--lang",
            help="set the user's language (ISO 639 format)",
            dest="lang",
            required=False,
            default=None,
            type=ValidatorType(user_lang_validator),
        )
        parser.add_argument(
            "-p",
            "--password",
            help="set the user's password",
            dest="password",
            required=False,
            default=None,
            type=ValidatorType(user_password_validator),
        )
        parser.add_argument(
            "--profile",
            help="set the user's profile. Valid values: {}".format(", ".join(
                Profile.get_all_valid_slugs())),
            dest="profile",
            default=None,
            type=ValidatorType(user_profile_validator),
        )
        parser.add_argument(
            "--timezone",
            help="set the user's timezone",
            dest="timezone",
            default=None,
            type=ValidatorType(user_timezone_validator),
        )
        return parser
Beispiel #3
0
 def test_profile__ok__get_profile_slugs__ok__nominal_case(self):
     profile_slugs = Profile.get_all_valid_slugs()
     assert set(profile_slugs) == {
         "administrators", "users", "trusted-users"
     }
Beispiel #4
0
 def test_profile__ok__get_profile_slugs__ok__include_nobody(self):
     profile_slugs = Profile.get_all_valid_slugs(include_nobody=True)
     assert set(profile_slugs) == {
         "nobody", "administrators", "users", "trusted-users"
     }
Beispiel #5
0
    def _check_global_config_validity(self) -> None:
        """
        Check config for global stuff
        """
        self.check_mandatory_param("SQLALCHEMY__URL", self.SQLALCHEMY__URL)
        self.check_mandatory_param("SESSION__TYPE", self.SESSION__TYPE)
        if self.SESSION__TYPE == "file":
            self.check_mandatory_param(
                "SESSION__DATA_DIR",
                self.SESSION__DATA_DIR,
                when_str="if session type is file",
            )
            self.check_directory_path_param("SESSION__DATA_DIR",
                                            self.SESSION__DATA_DIR,
                                            writable=True)
        elif self.SESSION__TYPE in [
                "ext:database",
                "ext:mongodb",
                "ext:redis",
                "ext:memcached",
        ]:
            self.check_mandatory_param(
                "SESSION__URL",
                self.SESSION__URL,
                when_str="if session type is {}".format(self.SESSION__TYPE),
            )
        self.check_mandatory_param("SESSION__LOCK_DIR", self.SESSION__LOCK_DIR)
        self.check_directory_path_param("SESSION__LOCK_DIR",
                                        self.SESSION__LOCK_DIR,
                                        writable=True)
        # INFO - G.M - 2019-04-03 - check color file validity
        self.check_mandatory_param("COLOR__CONFIG_FILE_PATH",
                                   self.COLOR__CONFIG_FILE_PATH)
        if not os.path.exists(self.COLOR__CONFIG_FILE_PATH):
            raise ConfigurationError(
                "ERROR: {} file does not exist. "
                'please create it or set "COLOR__CONFIG_FILE_PATH"'
                "with a correct value".format(self.COLOR__CONFIG_FILE_PATH))

        try:
            with open(self.COLOR__CONFIG_FILE_PATH) as json_file:
                self.APPS_COLORS = json.load(json_file)
        except Exception as e:
            raise ConfigurationError(
                "Error: {} file could not be load as json".format(
                    self.COLOR__CONFIG_FILE_PATH)) from e

        try:
            self.APPS_COLORS["primary"]
        except KeyError as e:
            raise ConfigurationError(
                "Error: primary color is required in {} file".format(
                    self.COLOR__CONFIG_FILE_PATH)) from e

        self.check_mandatory_param("DEPOT_STORAGE_DIR", self.DEPOT_STORAGE_DIR)
        self.check_directory_path_param("DEPOT_STORAGE_DIR",
                                        self.DEPOT_STORAGE_DIR,
                                        writable=True)

        self.check_mandatory_param("DEPOT_STORAGE_NAME",
                                   self.DEPOT_STORAGE_NAME)

        self.check_mandatory_param("PREVIEW_CACHE_DIR", self.PREVIEW_CACHE_DIR)
        self.check_directory_path_param("PREVIEW_CACHE_DIR",
                                        self.PREVIEW_CACHE_DIR,
                                        writable=True)

        if AuthType.REMOTE is self.AUTH_TYPES:
            raise ConfigurationError(
                'ERROR: "remote" auth not allowed in auth_types'
                " list, use remote_user_header instead")

        self.check_mandatory_param("WEBSITE__BASE_URL", self.WEBSITE__BASE_URL)

        self.check_mandatory_param("BACKEND__I18N_FOLDER_PATH",
                                   self.BACKEND__I18N_FOLDER_PATH)
        self.check_directory_path_param("BACKEND__I18N_FOLDER_PATH",
                                        self.BACKEND__I18N_FOLDER_PATH,
                                        readable=True)

        # INFO - G.M - 2018-08-06 - We check dist folder existence
        if self.FRONTEND__SERVE:
            self.check_mandatory_param(
                "FRONTEND__DIST_FOLDER_PATH",
                self.FRONTEND__DIST_FOLDER_PATH,
                when_str="if frontend serving is activated",
            )
            self.check_directory_path_param("FRONTEND__DIST_FOLDER_PATH",
                                            self.FRONTEND__DIST_FOLDER_PATH)

        if self.USER__DEFAULT_PROFILE not in Profile.get_all_valid_slugs():
            profile_str_list = ", ".join([
                '"{}"'.format(profile_name)
                for profile_name in Profile.get_all_valid_slugs()
            ])
            raise ConfigurationError(
                'ERROR user.default_profile given "{}" is invalid,'
                "valids values are {}.".format(self.USER__DEFAULT_PROFILE,
                                               profile_str_list))