Add services page.
[cas.git] / src / services / models.py
index c7a5d97..3261257 100644 (file)
@@ -2,6 +2,7 @@ import secrets
 from django.conf import settings
 from django.contrib.auth.models import User
 from django.db import models
+from django.urls import reverse
 from django.utils.translation import ugettext_lazy as _
 
 
@@ -10,6 +11,11 @@ class Service(models.Model):
     url = models.URLField(_('URL'), blank=True)
     key = models.CharField(_('key'), max_length=255, blank=True)
     uses_ssh = models.BooleanField(_('uses SSH'), default=False)
+
+    for_all = models.BooleanField(_('for all'), default=False)
+    description = models.TextField(_('description'), blank=True)
+    icon = models.FileField(_('icon'), blank=True, upload_to='service/icon')
+
     groups = models.ManyToManyField('auth.Group', verbose_name=_('groups'), blank=True)
     users = models.ManyToManyField(settings.AUTH_USER_MODEL, verbose_name=_('users'), blank=True)
 
@@ -21,6 +27,9 @@ class Service(models.Model):
     def __str__(self):
         return self.name
 
+    def get_absolute_url(self):
+        return reverse('service_detail', args=[self.pk])
+    
     def save(self, *args, **kwargs):
         if not self.key:
             self.key = secrets.token_urlsafe()
@@ -34,7 +43,9 @@ class Service(models.Model):
 
     @classmethod
     def for_user(cls, user):
-        return cls.objects.filter(models.Q(users=user) | models.Q(groups__user=user))
+        return cls.objects.filter(
+            models.Q(for_all=True) | models.Q(users=user) | models.Q(groups__user=user)
+        )
 
 
 class Hook(models.Model):