X-Git-Url: http://git.datanom.net/securemail.git/blobdiff_plain/b19ca6eb7be045fb938832c054940dce14180531..7084ca4a5f3492bbf750e685063f2267b97c9ac1:/db.py diff --git a/db.py b/db.py index 45863bc..9715b89 100644 --- a/db.py +++ b/db.py @@ -17,6 +17,13 @@ # You should have received a copy of the GNU General Public License # along with SecureMail. If not, see . +# sqlite +# create table account ( +# id int auto_increment, +# token char(128) unique not null, +# cipher text not null, +# primary key (id)); +# # mysql # create table account ( # id int auto_increment, @@ -32,7 +39,26 @@ # primary key (id)); import base64 -from config import DBTYPE, DBHOST, DBPORT, DBUID, DBPWD, DBNAME +from config import DBTYPE, DBNAME +try: + from config import DBUID +except ImportError: + DBUID = 'backend' +try: + from config import DBPWD +except ImportError: + DBPWD = 'clV77B2ZJQxr' +try: + from config import DBHOST +except ImportError: + DBHOST = 'localhost' +try: + from config import DBPORT +except ImportError: + if DBTYPE == 'mysql': + DBPORT = 3306 + elif DBTYPE == 'postgresql': + DBPORT = 5432 from cryptonize import Cryptonize class Singleton: @@ -52,12 +78,14 @@ class DB: def get_connection(self): if self.conn is None: if DBTYPE == 'mysql': - #import MySQLdb import MySQLdb self.conn = MySQLdb.connect(host=DBHOST, port=DBPORT, user=DBUID, password=DBPWD, database=DBNAME) elif DBTYPE == 'postgresql': import psycopg2 self.conn = psycopg2.connect(host=DBHOST, port=DBPORT, user=DBUID, password=DBPWD, dbname=DBNAME) + elif DBTYPE == 'sqlite': + import apsw + self.conn = apsw.Connection('./{0}.db'.format(DBNAME)) else: raise ValueError('{0}: Unsupported database'.format(DBTYPE)) return self.conn @@ -89,15 +117,25 @@ class DBInterface: from MySQLdb import Error as DBError elif DBTYPE == 'postgresql': from psycopg2 import Error as DBError + elif DBTYPE == 'sqlite': + from apsw import Error as DBError conn = DB().get_connection() cursor = conn.cursor() raw = base64.b64encode(cipher) try: - cursor.execute("insert into account(token, cipher) values(%s, %s)", (key, raw)) - conn.commit() + if DBTYPE != 'sqlite': + cursor.execute("insert into account(token, cipher) values(%s, %s)", (key, raw)) + conn.commit() + else: + cursor.execute('begin') + cursor.execute("insert into account(token, cipher) values(?, ?)", (key, raw)) + cursor.execute('commit') except DBError as e: print (e) - conn.rollback() + if DBTYPE != 'sqlite': + conn.rollback() + else: + cursor.execute('rollback') raise e finally: cursor.close()