Merge pull request 'VORKOUT-10' (#4) from VORKOUT-10 into master
Reviewed-on: #4 Reviewed-by: cyrussmeat <dr.cyrill@gmail.com> Reviewed-by: ivan.dev <ivan.dev@heado.ru>
This commit is contained in:
		
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -1,6 +1,8 @@
 | 
			
		||||
venv/
 | 
			
		||||
node_modules/
 | 
			
		||||
 | 
			
		||||
init.lock
 | 
			
		||||
 | 
			
		||||
.idea/
 | 
			
		||||
.vscode/
 | 
			
		||||
*.swp
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										9
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										9
									
								
								Makefile
									
									
									
									
									
								
							@@ -37,5 +37,14 @@ revision:
 | 
			
		||||
	cd $(API_APPLICATION_NAME)/db && \
 | 
			
		||||
	PYTHONPATH='../..' ALEMBIC_MIGRATIONS=True alembic revision --autogenerate
 | 
			
		||||
 | 
			
		||||
venv-api:
 | 
			
		||||
	cd api && \
 | 
			
		||||
	poetry install
 | 
			
		||||
 | 
			
		||||
install:
 | 
			
		||||
	make migrate head && \
 | 
			
		||||
	cd api && \
 | 
			
		||||
	poetry run python3 api/utils/init.py
 | 
			
		||||
 | 
			
		||||
%::
 | 
			
		||||
	echo $(MESSAGE)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										60
									
								
								api/api/utils/init.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								api/api/utils/init.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,60 @@
 | 
			
		||||
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
 | 
			
		||||
 | 
			
		||||
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_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())
 | 
			
		||||
@@ -3,13 +3,13 @@ version: "3.1"
 | 
			
		||||
services:
 | 
			
		||||
  rabbitmq:
 | 
			
		||||
    image: rabbitmq:4-management-alpine
 | 
			
		||||
    container_name: rabbitmq
 | 
			
		||||
    container_name: rabbitmq-connect
 | 
			
		||||
    ports:
 | 
			
		||||
      - 5672:5672
 | 
			
		||||
      - 15672:15672
 | 
			
		||||
  db:
 | 
			
		||||
    image: mysql:8.0
 | 
			
		||||
    container_name: mysql
 | 
			
		||||
    container_name: mysql-connect
 | 
			
		||||
    environment:
 | 
			
		||||
      MYSQL_ROOT_PASSWORD: hackme
 | 
			
		||||
      MYSQL_DATABASE: connect_test
 | 
			
		||||
@@ -21,7 +21,7 @@ services:
 | 
			
		||||
      - "3306:3306"
 | 
			
		||||
  redis:
 | 
			
		||||
    image: redis:7-alpine
 | 
			
		||||
    container_name: redis
 | 
			
		||||
    container_name: redis-connect
 | 
			
		||||
    command: redis-server --requirepass password
 | 
			
		||||
    environment:
 | 
			
		||||
      REDIS_PASSWORD: hackme
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user