123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 |
- import re
- import sqlite3 as db
- import sys
- import uuid
- import db_setup
- from game import money_amount
- from util import debug
- connection = None
- cursor = None
- db_name = None
- def query_save_name():
- global db_name
- if debug:
- db_name = 'test.db'
- return
- while True:
- save_name = input('Name of the savegame: ')
- if re.match(r"[A-Za-z0-9.-]{0,50}", save_name):
- db_name = save_name + '.db'
- return
- def connect(reconnect=False):
- global connection
- global cursor
- global db_name
- if reconnect:
- connection.commit()
- connection.close()
- cursor = None
- connection = None
- db_name = None
- if connection is None or cursor is None:
- query_save_name()
- try:
- connection = db.connect(db_name)
- cursor = connection.cursor()
- except db.Error as e:
- print("Database error %s:" % e.args[0])
- sys.exit(1)
- # finally:
- # if con is not None:
- # con.close()
- def setup():
- connect()
- db_setup.setup()
- connection.commit()
- def login(username, password):
- connect()
- # do not allow login as bank
- if password == '':
- return None
- cursor.execute('''
- SELECT rowid
- FROM users
- WHERE username = ?
- AND password = ?
- ''', (username, password))
- user_id = cursor.fetchone()
- if user_id:
- return new_session(user_id)
- else:
- return None
- def register(username, password, game_key):
- connect()
- if username == '':
- return False
- if password == '':
- return False
- cursor.execute('''
- INSERT INTO users
- (username, password)
- VALUES (? , ?)
- ''', (username, password))
- if game_key is not None:
- if game_key in unused_keys():
- cursor.execute('''
- UPDATE keys
- WHERE used_by_user_id IS NULL
- AND key = ?
- SET used_by_user_id = (
- SELECT rowid
- FROM users
- WHERE username = ?
- )
- ''', (game_key, username))
- if cursor.fetchone()[0]!=1:
- raise AssertionError()
- # TODO: assign some money form bank
- return True
- def new_session(user_id):
- connect()
- session_id = str(uuid.uuid4())
- cursor.execute('''
- INSERT INTO SESSIONS
- (user_id, session_id)
- VALUES (? , ?)
- ''', (user_id[0], session_id))
- return session_id
- def save_key(key):
- connect()
- cursor.execute('''
- INSERT INTO keys
- (key)
- VALUES (?)
- ''', (key,))
- def drop_old_sessions():
- connect()
- # TODO: test
- cursor.execute('''
- DELETE FROM sessions s1
- WHERE
- (SELECT COUNT(*) as newer
- FROM sessions s2
- WHERE s1.user_id = s2.user_id
- AND s1.rowid < s2.rowid) >= 10
- ''')
- def user_exists(username):
- connect()
- cursor.execute('''
- SELECT rowid
- FROM users
- WHERE username = ?
- ''', (username,))
- if cursor.fetchone():
- return True
- else:
- return False
- def unused_keys():
- connect()
- cursor.execute('''
- SELECT key
- FROM keys
- WHERE used_by_user_id IS NULL
- ''')
- return [str(key[0]).strip().upper() for key in cursor.fetchall()]
|