devportal2 / backend /database.py
google-labs-jules[bot]
Add Connected Apps UI and GitHub OAuth integration
ff473e8
Raw
History Blame Contribute Delete
2.55 kB
import sqlite3
import os
DATA_DIR = "data"
DB_FILE = os.path.join(DATA_DIR, "devportal.db")
USERS_DIR = os.path.join(DATA_DIR, "user_spaces")
PUBLISHED_DIR = os.path.join(DATA_DIR, "published_projects")
def init_db():
if not os.path.exists(DATA_DIR):
os.makedirs(DATA_DIR)
conn = sqlite3.connect(DB_FILE)
c = conn.cursor()
# Create users table
c.execute('''CREATE TABLE IF NOT EXISTS users
(username TEXT PRIMARY KEY, password TEXT, token TEXT, settings TEXT, github_access_token TEXT)''')
# Simple migration if column is missing (for existing sqlite databases before this change)
try:
c.execute("PRAGMA table_info(users)")
columns = [info[1] for info in c.fetchall()]
if 'github_access_token' not in columns:
c.execute("ALTER TABLE users ADD COLUMN github_access_token TEXT")
except Exception as e:
print("Migration error:", e)
# Create published projects table
c.execute('''CREATE TABLE IF NOT EXISTS projects
(id TEXT PRIMARY KEY, username TEXT, name TEXT, created_at DATETIME DEFAULT CURRENT_TIMESTAMP)''')
# Create AI history table
c.execute('''CREATE TABLE IF NOT EXISTS ai_history
(id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT, role TEXT, content TEXT, timestamp DATETIME DEFAULT CURRENT_TIMESTAMP)''')
conn.commit()
conn.close()
# Ensure the master users directory exists
if not os.path.exists(USERS_DIR):
os.makedirs(USERS_DIR)
# Ensure the published directory exists
if not os.path.exists(PUBLISHED_DIR):
os.makedirs(PUBLISHED_DIR)
def get_user_dir(token: str) -> str:
"""Returns the absolute path to a specific user's secure folder based on their auth token."""
conn = sqlite3.connect(DB_FILE)
c = conn.cursor()
c.execute("SELECT username FROM users WHERE token=?", (token,))
row = c.fetchone()
conn.close()
if not row:
return None
username = row[0]
user_path = os.path.abspath(os.path.join(USERS_DIR, username))
# Auto-create if it got deleted
if not os.path.exists(user_path):
os.makedirs(user_path, exist_ok=True)
return user_path
def get_username(token: str) -> str:
"""Returns the username associated with a token."""
conn = sqlite3.connect(DB_FILE)
c = conn.cursor()
c.execute("SELECT username FROM users WHERE token=?", (token,))
row = c.fetchone()
conn.close()
return row[0] if row else None