SpectralVPN/API/utils.py

65 lines
No EOL
2.4 KiB
Python

import sqlite3
import pandas
import datetime
import hashlib
import json
class DataBase :
def __init__(self, path: str) :
self.con = sqlite3.connect(path)
self.cur = self.con.cursor()
self.cur.execute("""
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
email TEXT NOT NULL UNIQUE,
pass_hash TEXT NOT NULL,
register TEXT NOT NULL,
urls TEXT DEFAULT "",
payment TEXT DEFAULT ""
)
""")
self.con.commit()
def read_table(self, sql_command: str, params=None) -> dict :
if params == None :
params = ()
return json.loads(pandas.read_sql(sql_command, self.con, params=params).to_json())
def get_hash(text: str) :
return hashlib.sha256(text.encode()).hexdigest()
def registration(self, email: str, passwd: str) :
"""
0 - Success
1 - Email is busy
"""
date = datetime.datetime.now()
try :
self.cur.execute("""
INSERT INTO users (email, pass_hash, register)
VALUES (?, ?, ?)
""", (email, self.get_hash(passwd), f"{date.day}-{date.month}-{date.year} {date.hour}:{date.minute}:{date.second}"))
self.con.commit()
except :
return {"code": 1}
data = self.read_table("""
SELECT id FROM users
WHERE email = ?
""", (email))
return {"code": 0, "data": {"id": data["id"]["0"], "email": email}}
def login(self, email: str, passwd: str) :
"""
0 - Success
1 - Incorrect email or password
"""
data = self.read_table("""
SELECT id, urls, payment FROM users
WHERE email = ? AND pass_hash = ?
""", (email, self.get_hash(passwd)))
if data["id"] == {} :
return {"code": 1}
else :
return {"code": 0, "data": {"id": data["id"]["0"], "email": email, "urls": data["urls"]["0"], "payment": data["payment"]["0"]}}