|
@@ -4,7 +4,7 @@ import sys
|
|
|
import uuid
|
|
|
|
|
|
import db_setup
|
|
|
-from game import money_amount
|
|
|
+from game import CURRENCY_NAME
|
|
|
from util import debug
|
|
|
|
|
|
connection = None
|
|
@@ -22,6 +22,8 @@ def query_save_name():
|
|
|
if re.match(r"[A-Za-z0-9.-]{0,50}", save_name):
|
|
|
db_name = save_name + '.db'
|
|
|
return
|
|
|
+ else:
|
|
|
+ print('Must match "[A-Za-z0-9.-]{0,50}"')
|
|
|
|
|
|
|
|
|
def connect(reconnect=False):
|
|
@@ -55,7 +57,7 @@ def connect(reconnect=False):
|
|
|
def setup():
|
|
|
connect()
|
|
|
|
|
|
- db_setup.setup()
|
|
|
+ db_setup.setup(cursor)
|
|
|
|
|
|
connection.commit()
|
|
|
|
|
@@ -91,25 +93,53 @@ def register(username, password, game_key):
|
|
|
(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
|
|
|
+ own(username, CURRENCY_NAME)
|
|
|
+ if game_key != '':
|
|
|
+ if valid_key(game_key):
|
|
|
+ activate_key(game_key, get_user_id_by_name(username))
|
|
|
+ return True
|
|
|
+
|
|
|
+
|
|
|
+def own(username, ownable_name):
|
|
|
+ cursor.execute('''
|
|
|
+ INSERT INTO ownership
|
|
|
+ (user_id, ownable_id)
|
|
|
+ VALUES ((SELECT rowid FROM users WHERE username = ?),
|
|
|
+ (SELECT rowid FROM ownables WHERE name = ?))
|
|
|
+ ''', (username, ownable_name))
|
|
|
+
|
|
|
+
|
|
|
+def send_ownable(from_user_id, to_user_id, ownable_name, amount):
|
|
|
+ connect()
|
|
|
|
|
|
+ if amount < 0:
|
|
|
+ return False
|
|
|
+
|
|
|
+ if from_user_id != bank_id():
|
|
|
+ cursor.execute('''
|
|
|
+ UPDATE ownership
|
|
|
+ SET amount = amount - ?
|
|
|
+ WHERE user_id = ?
|
|
|
+ AND ownable_id = (SELECT rowid FROM ownables WHERE name = ?)
|
|
|
+ ''', (amount, from_user_id, ownable_name,))
|
|
|
+ if not cursor.fetchone():
|
|
|
+ return False
|
|
|
+
|
|
|
+ cursor.execute('''
|
|
|
+ UPDATE ownership
|
|
|
+ SET amount = amount + ?
|
|
|
+ WHERE user_id = ?
|
|
|
+ AND ownable_id = (SELECT rowid FROM ownables WHERE name = ?)
|
|
|
+ ''', (amount, to_user_id, ownable_name))
|
|
|
+ if cursor.rowcount == 0:
|
|
|
+ return False
|
|
|
return True
|
|
|
|
|
|
|
|
|
+def valid_key(key): # TODO possible performance increase when database gets larger by using sql directly
|
|
|
+ return key in unused_keys()
|
|
|
+
|
|
|
+
|
|
|
def new_session(user_id):
|
|
|
connect()
|
|
|
|
|
@@ -172,3 +202,85 @@ def unused_keys():
|
|
|
''')
|
|
|
|
|
|
return [str(key[0]).strip().upper() for key in cursor.fetchall()]
|
|
|
+
|
|
|
+
|
|
|
+def get_user_id_by_session_id(session_id):
|
|
|
+ connect()
|
|
|
+
|
|
|
+ cursor.execute('''
|
|
|
+ SELECT users.rowid
|
|
|
+ FROM sessions, users
|
|
|
+ WHERE sessions.session_id = ?
|
|
|
+ AND users.rowid = sessions.user_id
|
|
|
+ ''', (session_id,))
|
|
|
+
|
|
|
+ ids = cursor.fetchone()
|
|
|
+ if ids is None:
|
|
|
+ return False
|
|
|
+ return ids[0]
|
|
|
+
|
|
|
+
|
|
|
+def get_user_id_by_name(username):
|
|
|
+ connect()
|
|
|
+
|
|
|
+ cursor.execute('''
|
|
|
+ SELECT users.rowid
|
|
|
+ FROM users
|
|
|
+ WHERE username = ?
|
|
|
+ ''', (username,))
|
|
|
+
|
|
|
+ return cursor.fetchone()[0]
|
|
|
+
|
|
|
+
|
|
|
+def get_user_ownership(user_id):
|
|
|
+ connect()
|
|
|
+
|
|
|
+ cursor.execute('''
|
|
|
+ SELECT ownables.name, ownership.amount
|
|
|
+ FROM ownership, ownables
|
|
|
+ WHERE user_id = ?
|
|
|
+ AND ownership.ownable_id = ownables.rowid
|
|
|
+ ''', (user_id,))
|
|
|
+
|
|
|
+ return cursor.fetchall()
|
|
|
+
|
|
|
+
|
|
|
+def activate_key(key, user_id):
|
|
|
+ connect()
|
|
|
+ cursor.execute('''
|
|
|
+ UPDATE keys
|
|
|
+ SET used_by_user_id = ?
|
|
|
+ WHERE used_by_user_id IS NULL
|
|
|
+ AND key = ?
|
|
|
+ ''', (user_id, key,))
|
|
|
+
|
|
|
+ if cursor.rowcount == 0:
|
|
|
+ raise AssertionError
|
|
|
+ send_ownable(bank_id(), user_id, CURRENCY_NAME, 1000)
|
|
|
+
|
|
|
+
|
|
|
+def bank_id():
|
|
|
+ connect()
|
|
|
+
|
|
|
+ cursor.execute('''
|
|
|
+ SELECT users.rowid
|
|
|
+ FROM users
|
|
|
+ WHERE username = 'bank'
|
|
|
+ ''')
|
|
|
+
|
|
|
+ return cursor.fetchone()[0]
|
|
|
+
|
|
|
+
|
|
|
+def valid_session_id(session_id):
|
|
|
+ connect()
|
|
|
+
|
|
|
+ cursor.execute('''
|
|
|
+ SELECT rowid
|
|
|
+ FROM sessions
|
|
|
+ WHERE session_id = ?
|
|
|
+ ''', (session_id,))
|
|
|
+
|
|
|
+ if cursor.fetchone():
|
|
|
+ return True
|
|
|
+ else:
|
|
|
+ return False
|