Exemple #1
0
    def set_rules(self, rules, really=False):
        rules = json.loads(rules)
        rule_objects = []
        log.debug(rules)
        log.debug(really)

        def listify(rule, field):
            if field not in rule:
                rule[field] = []
            elif not isinstance(r[field], list):
                rule[field] = [rule[field]]

        for r in rules:
            grant = r['grant'] == "true"
            inverse = r['inverse'] == "true"
            if r['type'] == "list":
                listify(r, 'names')
                cls = ACLList.target_class(r['kind'])
                ids = [
                    cls.objects(name=name).first().identifier
                    for name in r['names']
                ]
                rule_objects.append(
                    ACLList(grant=grant,
                            inverse=inverse,
                            kind=r['kind'],
                            ids=ids))
            elif r['type'] == "key":
                rule_objects.append(
                    ACLKey(grant=grant, inverse=inverse, kind=r['kind']))
            elif r['type'] == "title":
                listify(r, 'titles')
                rule_objects.append(
                    ACLTitle(grant=grant, inverse=inverse, titles=r['titles']))
            elif r['type'] == "role":
                listify(r, 'roles')
                rule_objects.append(
                    ACLRole(grant=grant, inverse=inverse, roles=r['roles']))
            elif r['type'] == "mask":
                rule_objects.append(
                    ACLMask(grant=grant, inverse=inverse, mask=r['mask']))

        log.debug(rule_objects)

        if not really:
            log.debug("not really")
            return "json:", "\n".join(
                [r.human_readable_repr() for r in rule_objects])

        log.debug("really!")
        self.group.rules = rule_objects
        success = self.group.save()
        log.debug(success)
        if success:
            return 'json:', dict(success=True)
        return 'json:', dict(success=True, message=_("unimplemented"))
Exemple #2
0
    def add_character(self, name=None):
        if not name:
            return 'json:', dict(success=False,
                                 message=_("character name required"))
        q = EVECharacter.objects(name=name)
        assert q.count() <= 1
        if q.count() != 1:
            return 'json:', dict(success=False,
                                 message=_("character not found"))
        c = q.first()

        r = self.group.rules[-1] if len(self.group.rules) else None
        if not r or not (isinstance(r, ACLList) and r.grant and not r.inverse
                         and r.kind == 'c'):
            r = ACLList(grant=True, inverse=False, kind='c', ids=[])
            self.group.rules.append(r)

        if c.identifier in r.ids:
            return 'json:', dict(success=False,
                                 message=_("Character already in rule"))
        r.ids.append(c.identifier)
        success = self.group.save()

        if success:
            return 'json:', dict(success=True)
        return 'json:', dict(success=False,
                             message=_("Failure updating group"))
Exemple #3
0
    def set_rules(self, rules, really=False):
        rules = json.loads(rules)
        rule_objects = []
        log.debug(rules)
        log.debug(really)

        def listify(rule, field):
            if field not in rule:
                rule[field] = []
            elif not isinstance(r[field], list):
                rule[field] = [rule[field]]

        for r in rules:
            grant = r['grant'] == "true"
            inverse = r['inverse'] == "true"
            if r['type'] == "list":
                listify(r, 'names')
                cls = ACLList.target_class(r['kind'])
                ids = [cls.objects(name=name).first().identifier for name in r['names']]
                rule_objects.append(ACLList(grant=grant, inverse=inverse, kind=r['kind'], ids=ids))
            elif r['type'] == "key":
                rule_objects.append(ACLKey(grant=grant, inverse=inverse, kind=r['kind']))
            elif r['type'] == "title":
                listify(r, 'titles')
                rule_objects.append(ACLTitle(grant=grant, inverse=inverse, titles=r['titles']))
            elif r['type'] == "role":
                listify(r, 'roles')
                rule_objects.append(ACLRole(grant=grant, inverse=inverse, roles=r['roles']))
            elif r['type'] == "mask":
                rule_objects.append(ACLMask(grant=grant, inverse=inverse, mask=r['mask']))

        log.debug(rule_objects)

        if not really:
            log.debug("not really")
            return "json:", "\n".join([r.human_readable_repr() for r in rule_objects])

        log.debug("really!")
        self.group.rules = rule_objects
        success = self.group.save()
        log.debug(success)
        if success:
            return 'json:', dict(success=True)
        return 'json:', dict(success=True,
                             message=_("unimplemented"))
Exemple #4
0
 def check_rule_reference_exists(self, kind, name):
     cls = ACLList.target_class(kind)
     return "json:", dict(exists=bool(cls.objects(name=name)))
Exemple #5
0
 def check_rule_reference_exists(self, kind, name):
     cls = ACLList.target_class(kind)
     return "json:", dict(exists=bool(cls.objects(name=name)))