connect/api/api/utils/init.py
2025-04-18 17:31:37 +05:00

63 lines
1.6 KiB
Python

import os
import asyncio
import hashlib
import secrets
from api.db.connection.session import get_connection
from api.db.tables.account import account_table, account_keyring_table, AccountRole, KeyType, KeyStatus
from api.utils.key_id_gen import KeyIdGenerator
INIT_LOCK_FILE = "../init.lock"
DEFAULT_LOGIN = "vorkout"
def hash_password(password: str) -> str:
return hashlib.sha256(password.encode()).hexdigest()
def generate_password() -> str:
return secrets.token_urlsafe(20)
async def init():
if os.path.exists(INIT_LOCK_FILE):
print("Sorry, service is already initialized")
return
async with get_connection() as conn:
password = generate_password()
hashed_password = hash_password(password)
create_user_query = account_table.insert().values(
name=DEFAULT_LOGIN,
login=DEFAULT_LOGIN,
role=AccountRole.OWNER,
)
res = await conn.execute(create_user_query)
user_id = res.lastrowid
create_key_query = account_keyring_table.insert().values(
owner_id=user_id,
key_type=KeyType.PASSWORD,
key_id=KeyIdGenerator(),
key_value=hashed_password,
status=KeyStatus.ACTIVE,
)
await conn.execute(create_key_query)
await conn.commit()
await conn.close()
with open(INIT_LOCK_FILE, "w") as lock_file:
lock_file.write("initialized\n")
print(f"Login: {DEFAULT_LOGIN}")
print(f"Password: {password}")
if __name__ == "__main__":
asyncio.get_event_loop().run_until_complete(init())