mirror of
https://github.com/nikdoof/test-auth.git
synced 2025-12-14 06:42:16 +00:00
Various changes to several aspects of the model base.
* Added SSOUser extension profile for auth * Now checks for Corp membership and executes required commands * Various small fixups
This commit is contained in:
@@ -1,40 +1,80 @@
|
||||
from django.db import models
|
||||
from django.db.models import signals
|
||||
from django.contrib.auth.models import User
|
||||
from django.contrib.auth.models import User, UserManager
|
||||
|
||||
from sso.service import get_api
|
||||
from services import get_api
|
||||
|
||||
## Exceptions
|
||||
|
||||
class CorporateOnlyService(Exception):
|
||||
pass
|
||||
|
||||
## Models
|
||||
|
||||
class SSOUser(User):
|
||||
""" Extended SSO User Profile options """
|
||||
|
||||
user = models.ForeignKey(User, unique=True, related_name='profile')
|
||||
|
||||
default_service_passwd = models.CharField(max_length=200)
|
||||
default_service_username = models.CharField(max_length=200)
|
||||
|
||||
website = models.CharField(max_length=200)
|
||||
aim = models.CharField(max_length=64)
|
||||
msn = models.CharField(max_length=200)
|
||||
icq = models.CharField(max_length=15)
|
||||
xmpp = models.CharField(max_length=200)
|
||||
|
||||
def __str__(self):
|
||||
return self.user
|
||||
|
||||
@staticmethod
|
||||
def create_user_profile(sender, instance, created, **kwargs):
|
||||
if created:
|
||||
profile, created = SSOUser.objects.get_or_create(user=instance)
|
||||
|
||||
signals.post_save.connect(SSOUser.create_user_profile, sender=User)
|
||||
|
||||
class Service(models.Model):
|
||||
name = models.CharField(max_length=200)
|
||||
url = models.CharField(max_length=200)
|
||||
active = models.BooleanField()
|
||||
api = models.CharField(max_length=200)
|
||||
|
||||
def __str__(self):
|
||||
return "%s: %s" % (self.name, self.api)
|
||||
|
||||
class ServiceAccount(models.Model):
|
||||
user = models.ForeignKey(User,blank=False)
|
||||
service = models.ForeignKey(Service,blank=False)
|
||||
username = models.CharField(max_length=200,blank=False)
|
||||
user = models.ForeignKey(User, blank=False)
|
||||
service = models.ForeignKey(Service, blank=False)
|
||||
username = models.CharField(max_length=200, blank=False)
|
||||
password = models.CharField(max_length=200, blank=False)
|
||||
active = models.BooleanField()
|
||||
|
||||
def __str__(self):
|
||||
return "%s: %s (%s)" % (self.service.name, self.user.username, self.username)
|
||||
|
||||
def save(self):
|
||||
""" Override default save to setup accounts as needed """
|
||||
|
||||
if not self.service:
|
||||
raise DoesNotExist('No Service set on this account!')
|
||||
|
||||
if not self.user:
|
||||
raise DoesNotExist('No User set on this account!')
|
||||
|
||||
if not self.username:
|
||||
self.username = self.user.name
|
||||
self.username = self.user.username
|
||||
|
||||
api = get_api(self.service.api)
|
||||
|
||||
if api.corp_only:
|
||||
if not self.user.get_profile().corp_user:
|
||||
raise CorporateOnlyService()
|
||||
|
||||
if self.active:
|
||||
if not api.check_user(self.username):
|
||||
api.add_user(self.username, self.password)
|
||||
else:
|
||||
if api.check_user(self.username):
|
||||
api.del_user(self.username)
|
||||
api.delete_user(self.username)
|
||||
|
||||
if self.user.get_profile().corp_user:
|
||||
api.set_corp(self.username)
|
||||
|
||||
# All went OK, save to the DB
|
||||
return models.Model.save(self)
|
||||
@@ -43,6 +83,6 @@ class ServiceAccount(models.Model):
|
||||
def pre_delete_listener( **kwargs ):
|
||||
api = get_api(kwargs['instance'].service.api)
|
||||
if api.check_user(kwargs['instance'].username):
|
||||
api.del_user(kwargs['instance'].username)
|
||||
api.delete_user(kwargs['instance'].username)
|
||||
|
||||
signals.pre_delete.connect(ServiceAccount.pre_delete_listener, sender=ServiceAccount)
|
||||
|
||||
Reference in New Issue
Block a user