-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathinit_db.py
More file actions
104 lines (88 loc) · 3.09 KB
/
init_db.py
File metadata and controls
104 lines (88 loc) · 3.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
import sqlite3
import os
import bcrypt
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
DB_PATH = os.path.join(BASE_DIR, "data", "lan_guard.db")
conn = sqlite3.connect(DB_PATH)
cur = conn.cursor()
cur.execute("PRAGMA journal_mode=WAL")
cur.execute("PRAGMA synchronous=NORMAL")
cur.execute("""
CREATE TABLE IF NOT EXISTS usuarios (
id INTEGER PRIMARY KEY AUTOINCREMENT,
usuario TEXT UNIQUE NOT NULL,
contrasena TEXT NOT NULL,
rol TEXT NOT NULL,
nombre_display TEXT DEFAULT ''
)
""")
cur.execute("""
CREATE TABLE IF NOT EXISTS mac_confiables (
mac TEXT PRIMARY KEY
)
""")
cur.execute("""
CREATE TABLE IF NOT EXISTS nombres_dispositivos (
mac TEXT PRIMARY KEY,
nombre TEXT NOT NULL
)
""")
cur.execute("""
CREATE TABLE IF NOT EXISTS vendor_cache (
oui TEXT PRIMARY KEY,
fabricante TEXT NOT NULL
)
""")
cur.execute("""
CREATE TABLE IF NOT EXISTS detecciones_mac (
mac TEXT PRIMARY KEY,
count INTEGER NOT NULL,
notificado INTEGER NOT NULL,
ultima_vista REAL NOT NULL
)
""")
cur.execute("""
CREATE TABLE IF NOT EXISTS historial_dispositivos (
id INTEGER PRIMARY KEY AUTOINCREMENT,
mac TEXT NOT NULL,
ip TEXT NOT NULL,
fabricante TEXT,
confiable INTEGER NOT NULL DEFAULT 0,
nombre TEXT,
visto_en REAL NOT NULL,
evento TEXT NOT NULL DEFAULT 'conectado'
)
""")
cur.execute("""
CREATE TABLE IF NOT EXISTS configuracion (
clave TEXT PRIMARY KEY,
valor TEXT NOT NULL
)
""")
# ── Migraciones seguras ──────────────────────────────────────────────────────
try:
cur.execute("ALTER TABLE historial_dispositivos ADD COLUMN evento TEXT NOT NULL DEFAULT 'conectado'")
print("Columna 'evento' añadida a historial_dispositivos.")
except Exception:
pass
try:
cur.execute("ALTER TABLE usuarios ADD COLUMN nombre_display TEXT DEFAULT ''")
print("Columna 'nombre_display' añadida a usuarios.")
except Exception:
pass
# ─────────────────────────────────────────────────────────────────────────────
cur.execute("CREATE INDEX IF NOT EXISTS idx_historial_mac ON historial_dispositivos(mac)")
cur.execute("CREATE INDEX IF NOT EXISTS idx_historial_visto ON historial_dispositivos(visto_en)")
cur.execute("CREATE INDEX IF NOT EXISTS idx_historial_evento ON historial_dispositivos(evento)")
USUARIO_DEFECTO = "admin@example.com"
CONTRASENA_DEFECTO = "admin"
cur.execute("SELECT COUNT(*) FROM usuarios")
if cur.fetchone()[0] == 0:
hash_pwd = bcrypt.hashpw(CONTRASENA_DEFECTO.encode(), bcrypt.gensalt(12)).decode()
cur.execute(
"INSERT INTO usuarios (usuario, contrasena, rol, nombre_display) VALUES (?, ?, ?, ?)",
(USUARIO_DEFECTO, hash_pwd, "admin", "")
)
conn.commit()
conn.close()
print("Base de datos LANGuard inicializada correctamente.")