diff --git a/sso/services/__init__.py b/sso/services/__init__.py index e1d858f..dd58f3d 100644 --- a/sso/services/__init__.py +++ b/sso/services/__init__.py @@ -57,3 +57,33 @@ class BaseService(): def login(uid): """ Login the user and provide cookies back """ pass + + +class BaseDBService(BaseService): + + @property + def _db(self): + if not hasattr(self, '_db'): + # Use the master DB settings, bar the database name + backend = load_backend(settings.DATABASE_ENGINE) + self._db = backend.DatabaseWrapper({ + 'DATABASE_HOST': settings.DATABASE_HOST, + 'DATABASE_NAME': self.settings['database_name'], + 'DATABASE_OPTIONS': {}, + 'DATABASE_PASSWORD': settings.DATABASE_PASSWORD, + 'DATABASE_PORT': settings.DATABASE_PORT, + 'DATABASE_USER': settings.DATABASE_USER, + 'TIME_ZONE': settings.TIME_ZONE,}) + + return self._db + + @property + def _dbcursor(self): + return self._db.dbcursor() + + def __del__(self): + if hasattr(self, '_db'): + self._db.connection.commit() + self._db.close() + self._db = None + diff --git a/sso/services/miningbuddy/__init__.py b/sso/services/miningbuddy/__init__.py index 6151c33..5369bfc 100644 --- a/sso/services/miningbuddy/__init__.py +++ b/sso/services/miningbuddy/__init__.py @@ -2,10 +2,10 @@ import crypt import random import time from django.db import load_backend, transaction -from sso.services import BaseService +from sso.services import BaseDBService import settings -class MiningBuddyService(BaseService): +class MiningBuddyService(BaseDBService): """ Mining Buddy Class, allows registration and sign-in @@ -25,25 +25,6 @@ class MiningBuddyService(BaseService): SQL_CHECK_USER = r"SELECT username from users WHERE username = %s and deleted = 0" SQL_DEL_USER = r"UPDATE users set deleted = 1 WHERE username = %s" - def __init__(self): - - # Use the master DB settings, bar the database name - backend = load_backend(settings.DATABASE_ENGINE) - self._db = backend.DatabaseWrapper({ - 'DATABASE_HOST': settings.DATABASE_HOST, - 'DATABASE_NAME': self.settings['database_name'], - 'DATABASE_OPTIONS': {}, - 'DATABASE_PASSWORD': settings.DATABASE_PASSWORD, - 'DATABASE_PORT': settings.DATABASE_PORT, - 'DATABASE_USER': settings.DATABASE_USER, - 'TIME_ZONE': settings.TIME_ZONE,}) - - self._dbcursor = self._db.cursor() - - def __del__(self): - self._db.close() - self._db = None - def _gen_salt(self): return self.settings['password_salt'] diff --git a/sso/services/phpbb/__init__.py b/sso/services/phpbb/__init__.py index e03d15f..229e286 100644 --- a/sso/services/phpbb/__init__.py +++ b/sso/services/phpbb/__init__.py @@ -4,7 +4,7 @@ from django.db import load_backend, transaction, IntegrityError from sso.services import BaseService import settings -class PhpBBService(BaseService): +class PhpBBService(BaseDBService): """ PHPBB Class, allows registration and sign-in @@ -22,26 +22,6 @@ class PhpBBService(BaseService): SQL_GET_GROUP = r"SELECT group_id from phpbb_groups WHERE group_name = %s" SQL_ADD_GROUP = r"INSERT INTO phpbb_groups (group_name) VALUES (%s)" - - def __init__(self): - - # Use the master DB settings, bar the database name - backend = load_backend(settings.DATABASE_ENGINE) - self._db = backend.DatabaseWrapper({ - 'DATABASE_HOST': settings.DATABASE_HOST, - 'DATABASE_NAME': settings.PHPBB_DATABASE, - 'DATABASE_OPTIONS': {}, - 'DATABASE_PASSWORD': settings.DATABASE_PASSWORD, - 'DATABASE_PORT': settings.DATABASE_PORT, - 'DATABASE_USER': settings.DATABASE_USER, - 'TIME_ZONE': settings.TIME_ZONE,}) - - self._dbcursor = self._db.cursor() - - def __del__(self): - self._db.close() - self._db = None - def _gen_salt(self): return "%x" % random.randint(0, 2147483647) diff --git a/sso/services/qms/__init__.py b/sso/services/qms/__init__.py index e9b2ecf..8a8a6eb 100644 --- a/sso/services/qms/__init__.py +++ b/sso/services/qms/__init__.py @@ -20,25 +20,6 @@ class QMSService(BaseService): SQL_ENABLE_USER = r"UPDATE users SET passhash = %s, salt = %s, certificate = %s WHERE ssoid = %s" SQL_CHECK_USER = r"SELECT ssoid from users WHERE ssoid = %s" - def __init__(self): - - # Use the master DB settings, bar the database name - backend = load_backend(settings.DATABASE_ENGINE) - self._db = backend.DatabaseWrapper({ - 'DATABASE_HOST': settings.DATABASE_HOST, - 'DATABASE_NAME': self.settings['database_name'], - 'DATABASE_OPTIONS': {}, - 'DATABASE_PASSWORD': settings.DATABASE_PASSWORD, - 'DATABASE_PORT': settings.DATABASE_PORT, - 'DATABASE_USER': settings.DATABASE_USER, - 'TIME_ZONE': settings.TIME_ZONE,}) - - self._dbcursor = self._db.cursor() - - def __del__(self): - self._db.close() - self._db = None - def _gen_salt(self): return hashlib.md5("%x" % random.randint(0, 2147483647)).hexdigest()[:6] diff --git a/sso/services/wiki/__init__.py b/sso/services/wiki/__init__.py index 91760b8..8b84d67 100644 --- a/sso/services/wiki/__init__.py +++ b/sso/services/wiki/__init__.py @@ -25,25 +25,6 @@ class MediawikiService(BaseService): SQL_DEL_REV = r"UPDATE revision SET rev_user = (SELECT user_id FROM user WHERE user_name = 'DeletedUser'), rev_user_text = 'DeletedUser' WHERE rev_user = (SELECT user_id FROM user WHERE user_name = %s)" SQL_DEL_USER = r"DELETE FROM user WHERE user_name = %s" - def __init__(self): - - # Use the master DB settings, bar the database name - backend = load_backend(settings.DATABASE_ENGINE) - self._db = backend.DatabaseWrapper({ - 'DATABASE_HOST': settings.DATABASE_HOST, - 'DATABASE_NAME': self.settings['database_name'], - 'DATABASE_OPTIONS': {}, - 'DATABASE_PASSWORD': settings.DATABASE_PASSWORD, - 'DATABASE_PORT': settings.DATABASE_PORT, - 'DATABASE_USER': settings.DATABASE_USER, - 'TIME_ZONE': settings.TIME_ZONE,}) - - self._dbcursor = self._db.cursor() - - def __del__(self): - self._db.close() - self._db = None - def _gen_salt(self): return "%x" % random.randint(0, 2147483647)