From 45f4808148f18fb2803dee97e2dc95af46d28a30 Mon Sep 17 00:00:00 2001 From: Andrew Williams Date: Mon, 22 Mar 2010 14:00:02 +0000 Subject: [PATCH] Added mining buddy service --- sso/services/miningbuddy/__init__.py | 89 ++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 sso/services/miningbuddy/__init__.py diff --git a/sso/services/miningbuddy/__init__.py b/sso/services/miningbuddy/__init__.py new file mode 100644 index 0000000..decbe17 --- /dev/null +++ b/sso/services/miningbuddy/__init__.py @@ -0,0 +1,89 @@ +import crypt +import random +from django.db import load_backend, transaction +from sso.services import BaseService +import settings + +class MiningBuddyService(BaseService): + """ + Mining Buddy Class, allows registration and sign-in + + """ + + settings = { 'require_user': False, + 'require_password': False, + 'provide_login': False } + + + SQL_ADD_USER = r"INSERT INTO users (username, password, email, emailvalid, confirmed) VALUES (%s, %s, '', 0, 1)" + SQL_ADD_API = r"INSERT INTO api_keys (userid, time, apiID, apiKey, api_valid) values (%s, %s, %s, %s, 1) + SQL_DIS_USER = r"UPDATE users SET canLogin = 0 WHERE username = %s" + SQL_ENABLE_USER = r"UPDATE users SET canLogin = 1 WHERE username = %s" + 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': settings.MINING_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 _gen_salt(self): + return settings.MINING_SALT + + def _gen_mb_hash(self, password, salt=None): + if not salt: + salt = _gen_salt() + return crypt.crypt(password, salt) + + def _clean_username(self, username): + username = username.strip() + return username[0].upper() + username[1:] + + def add_user(self, username, password): + """ Add a user """ + pwhash = self._gen_mb_hash(password) + self._dbcursor.execute(self.SQL_ADD_USER, [self._clean_username(username), pwhash]) + self._db.connection.commit() + return self._clean_username(username) + + def check_user(self, username): + """ Check if the username exists """ + self._dbcursor.execute(self.SQL_CHECK_USER, [self._clean_username(username)]) + row = self._dbcursor.fetchone() + if row: + return True + return False + + def delete_user(self, uid): + """ Delete a user """ + self._dbcursor.execute(self.SQL_DEL_USER, [uid]) + self._db.connection.commit() + + 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]) + self._db.connection.commit() + return True + + def reset_password(self, uid, password): + """ Reset the user's password """ + return self.enable_user(uid, password) + + +ServiceClass = 'MiningBuddyService'