Ejemplo n.º 1
0
 def download(self):
     """ Download module if not present on disk """
     if not self.downloaded:
         assert self._desc['module']['file']
         logger.info("Download module: %s" % self.slug)
         if ModuleManager()._token:
             headers = [('Authorization', 'Token ' + ModuleManager()._token)]
         url = self._desc['module']['file']
         ProcessManager().download_module(url, headers=headers, callback=self.end_download)
Ejemplo n.º 2
0
 def authenticate(self, login, password):
     token = ModuleManager().authenticate(login, password)
     if token:
         # set authentication cookie
         self.setCookie('Token', token)
         return True
     return False
Ejemplo n.º 3
0
 def packages(self):
     """ get packages for module """
     if getattr(self, "_packages", None) is None:
         # get packages for current arch
         self._packages = []
         targets = self._desc.get("packages", [])
         for target in targets:
             if (target['name'] == "all"
                     or target['name'] == ModuleManager().arch):
                 self._packages.extend(target.get("rpms", []))
     return self._packages
Ejemplo n.º 4
0
 def check_installed(self):
     """ check if module is installed """
     if not self.downloaded:
         self.installed = False
         return
     packages = set(self.packages)
     # check if packages are installed
     if len(packages) == len(packages.intersection(ModuleManager().packages)):
         self.installed = True
     else:
         self.installed = False
Ejemplo n.º 5
0
 def repositories(self):
     """ get module repositories """
     self._repositories = []
     repositories = self._desc.get("repositories", [])
     if repositories:
         # Don't return repositories already installed
         for repository in repositories:
             repository['url'] = repository['url'].replace('@ARCH@', ModuleManager().arch)
             if 'url' in repository and not grep(repository['url'].split('://')[1], '/etc/urpmi/urpmi.cfg'):
                 repository['module_slug'] = self.slug
                 self._repositories.append(Media(**repository))
     return self._repositories
Ejemplo n.º 6
0
    def _dispatch(self, method, params):
        self.cookies = []

        if method == 'authenticate':
            return self.authenticate(*params)
        elif method in UNAUTHENTICATED_METHODS or self.check_token():
            try:
                return ModuleManager()._dispatch(method, params)
            except Exception:
                logger.exception("Error while calling ModuleManager.%s" % method)
                raise
        else:
            raise Exception(u"Authentication failed")
Ejemplo n.º 7
0
    def valid_config(self, user_config):
        """ valid user configuration for module """
        if not getattr(self, "config", None):
            self.get_config()

        validated_config = copy.deepcopy(self.config)
        errors = False

        for field in validated_config:
            field_name = field.get("name")
            field_type = field.get("type")
            if field_name:
                # set value for networks fields
                if field_type == "network":
                    field_value = []
                    for user_field, user_value in user_config.items():
                        match = re.match(
                            "^" + self.slug + "_" + field_name +
                            "_([0-9]?)_ip$", user_field)
                        if match:
                            net = match.group(1)
                            ip = user_config.get(
                                self.slug + "_" + field_name + "_" + net +
                                "_ip", '')
                            mask = user_config.get(
                                self.slug + "_" + field_name + "_" + net +
                                "_mask", '')
                            field_value.append((ip, mask))
                # handle multi text fields
                elif "multi" in field:
                    field_value = []
                    for user_field, user_value in user_config.items():
                        f = re.match(
                            "^" + self.slug + "_" + field_name +
                            "_([0-9]?)_field$", user_field)
                        if f:
                            nb = f.group(1)
                            value = user_config.get(self.slug + "_" +
                                                    field_name + "_" + nb +
                                                    "_field").strip()
                            if value:
                                field_value.append(value)
                # handle checkboxes
                elif field_type == "check":
                    # if box uncheck, set default to off otherwise value is None
                    field_value = user_config.get(self.slug + "_" + field_name,
                                                  "off")
                # set values for text,password,options fields
                else:
                    field_value = user_config.get(self.slug + "_" + field_name)

                # set default value
                field["default"] = field_value

                # check if field is not empty
                if field.get("require", "no") == "yes":
                    if not field_value:
                        errors = True
                        field["error"] = _("This field can't be empty.",
                                           "agent")
                    elif field_name.endswith("passwd") and field.get(
                            "confirm", "yes") != "no":
                        field_value2 = user_config.get(self.slug + "_" +
                                                       field_name + "2")
                        if field_value != field_value2:
                            errors = True
                            field["error"] = _("Password mismatch.", "agent")
                    else:
                        if field.get("error"):
                            del field["error"]

                # validate field data
                if field.get("validation"):
                    # get global validation method
                    method = getattr(Validation(), field.get("validation"),
                                     None)
                    module = "agent"
                    if not method:
                        # get module validation method
                        method = getattr(self._module, field.get("validation"),
                                         None)
                        module = self.slug
                    # run the validation method
                    if method and field_value:
                        result = method(field_value)
                        if result:
                            errors = True
                            field["error"] = _(result, module)
                        elif field.get("error"):
                            del field["error"]

                # store the field value in the DB
                if not 'error' in field and 'store' in field:
                    ModuleManager().set_option(field["name"], field["default"])

        # store config if no errors
        if not errors:
            self.config = validated_config

        return {
            "slug": self.slug,
            "config": validated_config,
            "errors": errors
        }
Ejemplo n.º 8
0
 def check_token(self):
     if self.headers.has_key('Token'):
         # handle cookie based authentication
         token = self.headers.get('Token')
         return ModuleManager().check_token(token)
     return False