mirror of
https://github.com/nikdoof/test-auth.git
synced 2025-12-14 14:52:15 +00:00
Services now use UID by default.
This commit is contained in:
@@ -90,10 +90,10 @@ class Service(models.Model):
|
|||||||
class ServiceAccount(models.Model):
|
class ServiceAccount(models.Model):
|
||||||
user = models.ForeignKey(User, blank=False)
|
user = models.ForeignKey(User, blank=False)
|
||||||
service = models.ForeignKey(Service, blank=False)
|
service = models.ForeignKey(Service, blank=False)
|
||||||
username = models.CharField("Service Username", max_length=200, blank=True)
|
service_uid = models.CharField("Service UID", max_length=200, blank=False)
|
||||||
service_uid = models.CharField("Service UID", max_length=200, blank=True)
|
|
||||||
active = models.BooleanField(default=True)
|
active = models.BooleanField(default=True)
|
||||||
|
|
||||||
|
username = None
|
||||||
password = None
|
password = None
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
@@ -102,19 +102,26 @@ class ServiceAccount(models.Model):
|
|||||||
def save(self):
|
def save(self):
|
||||||
""" Override default save to setup accounts as needed """
|
""" Override default save to setup accounts as needed """
|
||||||
|
|
||||||
|
# If no username has been specified, use the default
|
||||||
if not self.username:
|
if not self.username:
|
||||||
self.username = self.user.username
|
self.username = self.user.username
|
||||||
|
|
||||||
|
# Grab the API class
|
||||||
api = self.service.api_class
|
api = self.service.api_class
|
||||||
|
|
||||||
if self.active:
|
if not self.service_uid:
|
||||||
if not api.check_user(self.username):
|
# Create a account if we've not got a UID
|
||||||
self.service_uid = api.add_user(self.username, self.password)
|
if self.active:
|
||||||
|
if not api.check_user(self.username):
|
||||||
|
self.service_uid = api.add_user(self.username, self.password)
|
||||||
|
else:
|
||||||
|
raise ExistingUser('Username %s has already been took' % self.username)
|
||||||
else:
|
else:
|
||||||
raise ExistingUser('Username %s has already been took' % self.username)
|
return
|
||||||
else:
|
|
||||||
if api.check_user(self.username):
|
# Disable account marked as inactive
|
||||||
api.delete_user(self.username)
|
if self.service_uid and not self.active:
|
||||||
|
api.disable_user(self.service_uid)
|
||||||
|
|
||||||
# All went OK, save to the DB
|
# All went OK, save to the DB
|
||||||
return models.Model.save(self)
|
return models.Model.save(self)
|
||||||
@@ -122,7 +129,7 @@ class ServiceAccount(models.Model):
|
|||||||
@staticmethod
|
@staticmethod
|
||||||
def pre_delete_listener( **kwargs ):
|
def pre_delete_listener( **kwargs ):
|
||||||
api = kwargs['instance'].service.api_class
|
api = kwargs['instance'].service.api_class
|
||||||
if api.check_user(kwargs['instance'].username):
|
if api.check_user(kwargs['instance'].service_uid):
|
||||||
api.delete_user(kwargs['instance'].username)
|
api.delete_user(kwargs['instance'].service_uid)
|
||||||
|
|
||||||
signals.pre_delete.connect(ServiceAccount.pre_delete_listener, sender=ServiceAccount)
|
signals.pre_delete.connect(ServiceAccount.pre_delete_listener, sender=ServiceAccount)
|
||||||
|
|||||||
@@ -31,25 +31,25 @@ class BaseService():
|
|||||||
'provide_login': False }
|
'provide_login': False }
|
||||||
|
|
||||||
def add_user(self, username, password):
|
def add_user(self, username, password):
|
||||||
""" Add a user """
|
""" Add a user, returns a UID for that user """
|
||||||
pass
|
|
||||||
|
|
||||||
def delete_user(self, username):
|
|
||||||
""" Delete a user """
|
|
||||||
pass
|
|
||||||
|
|
||||||
def disable_user(self, username):
|
|
||||||
""" Disable a user """
|
|
||||||
pass
|
|
||||||
|
|
||||||
def enable_user(self, username, password):
|
|
||||||
""" Enable a user """
|
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def check_user(self, username):
|
def check_user(self, username):
|
||||||
""" Check if the username exists """
|
""" Check if the username exists """
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def login(username):
|
def delete_user(self, uid):
|
||||||
|
""" Delete a user by uid """
|
||||||
|
pass
|
||||||
|
|
||||||
|
def disable_user(self, uid):
|
||||||
|
""" Disable a user by uid """
|
||||||
|
pass
|
||||||
|
|
||||||
|
def enable_user(self, uid, password):
|
||||||
|
""" Enable a user by uid """
|
||||||
|
pass
|
||||||
|
|
||||||
|
def login(uid):
|
||||||
""" Login the user and provide cookies back """
|
""" Login the user and provide cookies back """
|
||||||
pass
|
pass
|
||||||
|
|||||||
@@ -30,27 +30,6 @@ class JabberService(BaseService):
|
|||||||
if self.ejctl.register(username.lower(), settings.JABBER_SERVER, password):
|
if self.ejctl.register(username.lower(), settings.JABBER_SERVER, password):
|
||||||
return '%s@%s' % (username, settings.JABBER_SERVER)
|
return '%s@%s' % (username, settings.JABBER_SERVER)
|
||||||
|
|
||||||
def delete_user(self, username):
|
|
||||||
""" Delete a user """
|
|
||||||
if self.method == "xmpp":
|
|
||||||
return self.jabberadmin.deluser('%s@%s' % (username, settings.JABBER_SERVER))
|
|
||||||
else:
|
|
||||||
return self.ejctl.unregister(username.lower(), settings.JABBER_SERVER)
|
|
||||||
|
|
||||||
def disable_user(self, username):
|
|
||||||
""" Disable a user """
|
|
||||||
if self.method == "xmpp":
|
|
||||||
return False
|
|
||||||
else:
|
|
||||||
return self.ejctl.ban_user(settings.JABBER_SERVER, username.lower())
|
|
||||||
|
|
||||||
def enable_user(self, username):
|
|
||||||
""" Enable a user """
|
|
||||||
if self.method == "xmpp":
|
|
||||||
return False
|
|
||||||
else:
|
|
||||||
return self.ejctl.enable_user(settings.JABBER_SERVER, username.lower(), password)
|
|
||||||
|
|
||||||
def check_user(self, username):
|
def check_user(self, username):
|
||||||
""" Check if the username exists """
|
""" Check if the username exists """
|
||||||
if self.method == "xmpp":
|
if self.method == "xmpp":
|
||||||
@@ -60,4 +39,28 @@ class JabberService(BaseService):
|
|||||||
else:
|
else:
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
def delete_user(self, uid):
|
||||||
|
""" Delete a user """
|
||||||
|
if self.method == "xmpp":
|
||||||
|
return self.jabberadmin.deluser(uid)
|
||||||
|
else:
|
||||||
|
username, server = uid.split("@")
|
||||||
|
return self.ejctl.unregister(username, server)
|
||||||
|
|
||||||
|
def disable_user(self, uid):
|
||||||
|
""" Disable a user """
|
||||||
|
if self.method == "xmpp":
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
username, server = uid.split("@")
|
||||||
|
return self.ejctl.ban_user(server, username)
|
||||||
|
|
||||||
|
def enable_user(self, uid, password):
|
||||||
|
""" Enable a user """
|
||||||
|
if self.method == "xmpp":
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
username, server = uid.split("@")
|
||||||
|
return self.ejctl.enable_user(server, username, password)
|
||||||
|
|
||||||
ServiceClass = 'JabberService'
|
ServiceClass = 'JabberService'
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ class MediawikiService(BaseService):
|
|||||||
|
|
||||||
settings = { 'require_user': False,
|
settings = { 'require_user': False,
|
||||||
'require_password': False,
|
'require_password': False,
|
||||||
'provide_login': True }
|
'provide_login': False }
|
||||||
|
|
||||||
|
|
||||||
SQL_ADD_USER = r"INSERT INTO user (user_name, user_password, user_newpassword, user_options, user_email) VALUES (%s, %s, '', '', '')"
|
SQL_ADD_USER = r"INSERT INTO user (user_name, user_password, user_newpassword, user_options, user_email) VALUES (%s, %s, '', '', '')"
|
||||||
@@ -55,29 +55,27 @@ class MediawikiService(BaseService):
|
|||||||
self._db.connection.commit()
|
self._db.connection.commit()
|
||||||
return self._clean_username(username)
|
return self._clean_username(username)
|
||||||
|
|
||||||
def delete_user(self, username):
|
|
||||||
""" Delete a user """
|
|
||||||
self.disable_user(username)
|
|
||||||
|
|
||||||
def disable_user(self, username):
|
|
||||||
""" Disable a user """
|
|
||||||
self._dbcursor.execute(self.SQL_DIS_USER, [self._clean_username(username)])
|
|
||||||
self._db.connection.commit()
|
|
||||||
|
|
||||||
def enable_user(self, username, password):
|
|
||||||
""" Enable a user """
|
|
||||||
pwhash = self._gen_mw_hash(password)
|
|
||||||
self._dbcursor.execute(self.SQL_ENABLE_USER, [pwhash, self._clean_username(username)])
|
|
||||||
pass
|
|
||||||
|
|
||||||
def check_user(self, username):
|
def check_user(self, username):
|
||||||
""" Check if the username exists """
|
""" Check if the username exists """
|
||||||
self._dbcursor.execute(self.SQL_CHECK_USER, [self._clean_username(username)])
|
self._dbcursor.execute(self.SQL_CHECK_USER, [self._clean_username(username)])
|
||||||
row = self._dbcursor.fetchone()
|
row = self._dbcursor.fetchone()
|
||||||
|
|
||||||
if row:
|
if row:
|
||||||
return True
|
return True
|
||||||
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
def delete_user(self, uid):
|
||||||
|
""" Delete a user """
|
||||||
|
self.disable_user(uid)
|
||||||
|
|
||||||
|
def disable_user(self, uid):
|
||||||
|
""" Disable a user """
|
||||||
|
self._dbcursor.execute(self.SQL_DIS_USER, [uid])
|
||||||
|
self._db.connection.commit()
|
||||||
|
|
||||||
|
def enable_user(self, uid, password):
|
||||||
|
""" Enable a user """
|
||||||
|
pwhash = self._gen_mw_hash(password)
|
||||||
|
self._dbcursor.execute(self.SQL_ENABLE_USER, [pwhash, uid])
|
||||||
|
pass
|
||||||
|
|
||||||
ServiceClass = 'MediawikiService'
|
ServiceClass = 'MediawikiService'
|
||||||
|
|||||||
Reference in New Issue
Block a user