63 lines
1.6 KiB
Python
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())
|