# You should have received a copy of the GNU General Public License
# along with SecureMail. If not, see <https://www.gnu.org/licenses/>.
+# 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,
# token char(128) unique not null,
-# cipher blob not null,
+# cipher text not null,
# primary key (id));
#
# postgresql
# 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:
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
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()