diff --git a/app/migrate b/app/migrate index 744adb5..0867aa0 100755 --- a/app/migrate +++ b/app/migrate @@ -4,5 +4,5 @@ rex "doas sqlite3 /4server/data/contracts.db <<'EOF' ALTER TABLE containers -ADD COLUMN config TEXT NOT NULL DEFAULT ''; +ALTER COLUMN contract DROP NOT NULL; EOF" diff --git a/app/sbin/api b/app/sbin/api index 2ecca73..ce6c45b 100755 --- a/app/sbin/api +++ b/app/sbin/api @@ -71,7 +71,8 @@ def init_db(): status CHAR(20), created DATE, bump DATE, - secret TEXT + secret TEXT, + contract TEXT ) ''') conn.commit() @@ -92,6 +93,12 @@ def execute_db(query: str, params: tuple = (), fetch: bool = False): # ---------------------- Models ---------------------- +class ContractItem(BaseModel): + quantity: int + name: str + product_id: int + features: Dict[str, Any] + class ContainerModel(BaseModel): UUID: str email: Optional[str] = None @@ -107,7 +114,7 @@ class ContainerModel(BaseModel): created: Optional[str] = None bump: Optional[str] = None secret: Optional[Dict[str, Any]] = None - + contract: Optional[str] = None class UUIDRequest(BaseModel): UUID: str @@ -129,22 +136,6 @@ import json app = FastAPI() -# ---------------------- Models ---------------------- -class ContainerModel(BaseModel): - UUID: str - email: Optional[str] = None - expires: Optional[str] = None - tags: Optional[str] = None - env: Optional[Dict[str, Any]] = None - affiliate: Optional[str] = None - image: Optional[str] = None - history: Optional[str] = None - comment: Optional[str] = None - domains: Optional[str] = None - status: Optional[str] = None - created: Optional[str] = None - bump: Optional[str] = None - secret: Optional[Dict[str, Any]] = None # ---------------------- Routes ---------------------- @app.get("/", include_in_schema=False) @@ -157,6 +148,8 @@ def update_container(request: ContainerModel): # Convert dict fields to JSON strings env_str = json.dumps(request.env) if isinstance(request.env, dict) else None secret_str = json.dumps(request.secret) if isinstance(request.secret, dict) else None + contract_str = json.dumps(request.contract) if isinstance(request.contract, dict) else None + # Fetch existing record existing = execute_db("SELECT * FROM containers WHERE UUID = ?", (request.UUID,), fetch=True) @@ -164,12 +157,12 @@ def update_container(request: ContainerModel): # If record does not exist, insert a new one with all given fields execute_db(""" INSERT INTO containers (UUID, email, expires, tags, env, affiliate, image, history, - comment, domains, status, created, bump, secret) - VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + comment, domains, status, created, bump, secret, contract) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) """, ( request.UUID, request.email, request.expires, request.tags, env_str, request.affiliate, request.image, request.history, request.comment, - request.domains, request.status, request.created, request.bump, secret_str + request.domains, request.status, request.created, request.bump, secret_str, contract_str )) return {"UUID": request.UUID, "status": "created"} @@ -184,8 +177,9 @@ def update_container(request: ContainerModel): continue value = getattr(request, field) if value is not None: - if field in ["env", "secret"]: + if field in ["env", "secret", "contract"]: value = json.dumps(value) + updates[field] = value params.append(value) @@ -222,7 +216,7 @@ def info_container(request: Optional[UUIDRequest] = None): # Fields to select fields = [ "ID", "UUID", "email", "expires", "tags", "env", "affiliate", - "image", "history", "comment", "domains", "status", "created" + "image", "history", "comment", "domains", "status", "created", "contract" ] field_str = ", ".join(fields) diff --git a/app/sbin/backup/ODOO_19 b/app/sbin/backup/ODOO_19 index 3dad749..3745d3c 100755 --- a/app/sbin/backup/ODOO_19 +++ b/app/sbin/backup/ODOO_19 @@ -42,7 +42,7 @@ doas docker exec "$UUID" chown odoo:odoo -R /mnt/backup # Remove old backups beyond the configured slots ls -t "$BACKUP_DIR"/[0-9]*.zip 2>/dev/null | tail -n +$((BACKUP_SLOTS + 1)) | while read -r file; do echo "Deleting old backup: $file" - rm -f "$file" + doas rm -f "$file" done diff --git a/app/sbin/cleanTmp b/app/sbin/cleanTmp index b23277a..2b9f527 100755 --- a/app/sbin/cleanTmp +++ b/app/sbin/cleanTmp @@ -1,8 +1,8 @@ #!/bin/bash while true; do - find /tmp -type f -atime +2 -delete - find /tmp -type d -empty -delete + find /4server/tmp -type f -atime +2 -delete + find /4server/tmp -type d -empty -delete sleep 1d done diff --git a/app/update b/app/update index ddf454a..18265c7 100755 --- a/app/update +++ b/app/update @@ -12,6 +12,14 @@ rex doas mkdir -p /BACKUP rex doas chmod 777 /BACKUP rex doas chown 4server:4server /BACKUP + +### TMP DIR +rex doas mkdir -p /4server/tmp +rex doas chmod 777 /4server/tmp +rex doas chown 4server:4server /4server/tmp + + + template templates/.profile /home/4server/.profile ### PACKAGES diff --git a/app/vault/host_vars.img b/app/vault/host_vars.img index 461abb4..7a5ad02 100644 Binary files a/app/vault/host_vars.img and b/app/vault/host_vars.img differ