update
All checks were successful
Build and push container image / build-and-push-image (push) Successful in 6m29s
All checks were successful
Build and push container image / build-and-push-image (push) Successful in 6m29s
This commit is contained in:
@@ -20,10 +20,17 @@ log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
# Create database instance
|
||||
db = database.Database(db_name=env('DB_NAME', default='db.sqlite'))
|
||||
db.execute('CREATE TABLE IF NOT EXISTS snake_scores (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, score INTEGER)')
|
||||
db = database.Database(
|
||||
host=env('DB_HOST', default='localhost'),
|
||||
port=env('DB_PORT', default=5432),
|
||||
user=env('DB_USER', default='user'),
|
||||
password=env('DB_PASSWORD', default='password'),
|
||||
db_name=env('DB_NAME', default='db_name')
|
||||
)
|
||||
|
||||
db.execute('CREATE TABLE IF NOT EXISTS snake_scores (id SERIAL PRIMARY KEY, name TEXT, score INTEGER)')
|
||||
db.execute('''CREATE TABLE IF NOT EXISTS snake_tokens (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
id SERIAL PRIMARY KEY,
|
||||
token TEXT UNIQUE NOT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
ip TEXT UNIQUE NOT NULL
|
||||
@@ -37,7 +44,7 @@ def valid_length(value, min_length=1, max_length=100):
|
||||
|
||||
|
||||
def valid_score(score, game_token):
|
||||
start_time = db.execute('SELECT created_at FROM snake_tokens WHERE token = ?', (game_token,)).fetchone()
|
||||
start_time = db.execute('SELECT created_at FROM snake_tokens WHERE token = %s', (game_token,)).fetchone()
|
||||
if not start_time:
|
||||
log.error("Game token not found.")
|
||||
return False
|
||||
@@ -59,7 +66,7 @@ def valid_score(score, game_token):
|
||||
return False
|
||||
|
||||
# delete the token after score validation
|
||||
db.execute('DELETE FROM snake_tokens WHERE token = ?', (game_token,))
|
||||
db.execute('DELETE FROM snake_tokens WHERE token = %s', (game_token,))
|
||||
log.info(f"Score {score} validated successfully for token {game_token}.")
|
||||
|
||||
return True
|
||||
@@ -90,8 +97,8 @@ def submit_score():
|
||||
abort(400, "Score not vilid, so either you are trying to cheat the leaderboard or something is seriously wrong.")
|
||||
|
||||
try:
|
||||
db.execute('INSERT INTO snake_scores (name, score) VALUES (?, ?)', (name, int(score)))
|
||||
db.execute('DELETE FROM snake_tokens WHERE token = ?', (game_token,))
|
||||
db.execute('INSERT INTO snake_scores (name, score) VALUES (%s, %s)', (name, int(score)))
|
||||
db.execute('DELETE FROM snake_tokens WHERE token = %s', (game_token,))
|
||||
log.info(f"Score submitted: {name} - {score}")
|
||||
return redirect('/404')
|
||||
|
||||
@@ -106,13 +113,13 @@ def generate_start_token():
|
||||
token = urandom(16).hex()
|
||||
ip = request.headers.get('X-Forwarded-For', request.remote_addr)
|
||||
|
||||
ip_token = db.execute('SELECT token FROM snake_tokens WHERE ip = ?', (ip,)).fetchone()
|
||||
ip_token = db.execute('SELECT token FROM snake_tokens WHERE ip = %s', (ip,)).fetchone()
|
||||
if ip_token:
|
||||
log.info(f"Token already exists for IP: {ip}, reusing token.")
|
||||
return ip_token[0]
|
||||
|
||||
log.info(f"Generated start token: {token}")
|
||||
db.execute('INSERT INTO snake_tokens (token, ip) VALUES (?, ?)', (token, ip))
|
||||
db.execute('INSERT INTO snake_tokens (token, ip) VALUES (%s, %s)', (token, ip))
|
||||
return token
|
||||
|
||||
|
||||
@@ -134,7 +141,7 @@ def clear_old_tokens():
|
||||
while True:
|
||||
try:
|
||||
one_hour_ago = datetime.datetime.now() - datetime.timedelta(hours=1)
|
||||
db.execute('DELETE FROM snake_tokens WHERE created_at < ?', (one_hour_ago,))
|
||||
db.execute('DELETE FROM snake_tokens WHERE created_at < %s', (one_hour_ago,))
|
||||
log.info("Old tokens cleared.")
|
||||
except Exception as e:
|
||||
log.error(f"Error clearing old tokens: {e}")
|
||||
|
@@ -1,10 +1,15 @@
|
||||
# Imports
|
||||
import sqlite3
|
||||
import psycopg2
|
||||
|
||||
# Database class
|
||||
class Database:
|
||||
def __init__(self, db_name='db.sqlite'):
|
||||
self.connection = sqlite3.connect(db_name, check_same_thread=False)
|
||||
def __init__(self, host, port, user, password, db_name):
|
||||
self.connection = psycopg2.connect(
|
||||
host=host,
|
||||
port=port,
|
||||
user=user,
|
||||
password=password,
|
||||
database=db_name
|
||||
)
|
||||
self.cursor = self.connection.cursor()
|
||||
|
||||
def execute(self, query, params=None):
|
||||
@@ -13,6 +18,6 @@ class Database:
|
||||
self.cursor.execute(query, params)
|
||||
self.connection.commit()
|
||||
return self.cursor
|
||||
|
||||
|
||||
def close(self):
|
||||
self.connection.close()
|
Reference in New Issue
Block a user