Esempio n. 1
0
class UserAssetGrantedTreeNodeRelation(OrgModelMixin, FamilyMixin, models.JMSBaseModel):
    class NodeFrom(ChoiceSet):
        granted = 'granted', 'Direct node granted'
        child = 'child', 'Have children node'
        asset = 'asset', 'Direct asset granted'

    user = models.ForeignKey('users.User', db_constraint=False, on_delete=models.CASCADE)
    node = models.ForeignKey('assets.Node', default=None, on_delete=models.CASCADE,
                             db_constraint=False, null=False, related_name='granted_node_rels')
    node_key = models.CharField(max_length=64, verbose_name=_("Key"), db_index=True)
    node_parent_key = models.CharField(max_length=64, default='', verbose_name=_('Parent key'), db_index=True)
    node_from = models.CharField(choices=NodeFrom.choices, max_length=16, db_index=True)
    node_assets_amount = models.IntegerField(default=0)

    @property
    def key(self):
        return self.node_key

    @property
    def parent_key(self):
        return self.node_parent_key

    @classmethod
    def get_node_granted_status(cls, user, key):
        ancestor_keys = set(cls.get_node_ancestor_keys(key, with_self=True))
        ancestor_rel_nodes = cls.objects.filter(user=user, node_key__in=ancestor_keys)

        for rel_node in ancestor_rel_nodes:
            if rel_node.key == key:
                return rel_node.node_from, rel_node
            if rel_node.node_from == cls.NodeFrom.granted:
                return cls.NodeFrom.granted, None
        return '', None
Esempio n. 2
0
class UserGrantedMappingNode(FamilyMixin, models.JMSBaseModel):
    node = models.ForeignKey('assets.Node', default=None, on_delete=models.CASCADE,
                             db_constraint=False, null=True, related_name='mapping_nodes')
    key = models.CharField(max_length=64, verbose_name=_("Key"), db_index=True)  # '1:1:1:1'
    user = models.ForeignKey('users.User', db_constraint=False, on_delete=models.CASCADE)
    granted = models.BooleanField(default=False, db_index=True)
    asset_granted = models.BooleanField(default=False, db_index=True)
    parent_key = models.CharField(max_length=64, default='', verbose_name=_('Parent key'), db_index=True)  # '1:1:1:1'
    assets_amount = models.IntegerField(default=0)

    GRANTED_DIRECT = 1
    GRANTED_INDIRECT = 2
    GRANTED_NONE = 0

    @classmethod
    def get_node_granted_status(cls, key, user):
        ancestor_keys = Node.get_node_ancestor_keys(key, with_self=True)
        has_granted = UserGrantedMappingNode.objects.filter(
            key__in=ancestor_keys, user=user
        ).values_list('granted', flat=True)
        if not has_granted:
            return cls.GRANTED_NONE
        if any(list(has_granted)):
            return cls.GRANTED_DIRECT
        return cls.GRANTED_INDIRECT
Esempio n. 3
0
class TempToken(models.JMSModel):
    username = models.CharField(max_length=128, verbose_name=_("Username"))
    secret = models.CharField(max_length=64, verbose_name=_("Secret"))
    verified = models.BooleanField(default=False, verbose_name=_("Verified"))
    date_verified = models.DateTimeField(null=True,
                                         verbose_name=_("Date verified"))
    date_expired = models.DateTimeField(verbose_name=_("Date expired"))

    class Meta:
        verbose_name = _("Temporary token")

    @property
    def user(self):
        from users.models import User
        return User.objects.filter(username=self.username).first()

    @property
    def is_valid(self):
        not_expired = self.date_expired and self.date_expired > timezone.now()
        return not self.verified and not_expired
Esempio n. 4
0
class K8sApp(OrgModelMixin, models.JMSModel):
    class TYPE(models.ChoiceSet):
        K8S = 'k8s', _('Kubernetes')

    name = models.CharField(max_length=128, verbose_name=_('Name'))
    type = models.CharField(default=TYPE.K8S,
                            choices=TYPE.choices,
                            max_length=128,
                            verbose_name=_('Type'))
    cluster = models.CharField(max_length=1024, verbose_name=_('Cluster'))
    comment = models.TextField(max_length=128,
                               default='',
                               blank=True,
                               verbose_name=_('Comment'))

    def __str__(self):
        return self.name

    class Meta:
        unique_together = [
            ('org_id', 'name'),
        ]
        verbose_name = _('KubernetesApp')
        ordering = ('name', )