From 8ed294f3b7be725d88411eefc7c99684fcc9ebfc Mon Sep 17 00:00:00 2001 From: Oliver Date: Sat, 11 Oct 2025 18:55:02 -0300 Subject: [PATCH] works --- app/migrate | 2 +- app/sbin/api | 40 +++++++++++++++++----------------------- app/sbin/backup/ODOO_19 | 2 +- app/sbin/cleanTmp | 4 ++-- app/update | 8 ++++++++ app/vault/host_vars.img | Bin 26214400 -> 26214400 bytes 6 files changed, 29 insertions(+), 27 deletions(-) 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 461abb43737d0f52a9ec556118b702f0a5fdeb8c..7a5ad02832d17c9f3adace845e0e47917805b4a2 100644 GIT binary patch delta 20505 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 LhN@EOT1@{3RhA|P