This commit is contained in:
Oliver
2025-10-11 18:55:02 -03:00
parent 7953190b37
commit 8ed294f3b7
6 changed files with 29 additions and 27 deletions

View File

@@ -4,5 +4,5 @@
rex "doas sqlite3 /4server/data/contracts.db <<'EOF' rex "doas sqlite3 /4server/data/contracts.db <<'EOF'
ALTER TABLE containers ALTER TABLE containers
ADD COLUMN config TEXT NOT NULL DEFAULT ''; ALTER COLUMN contract DROP NOT NULL;
EOF" EOF"

View File

@@ -71,7 +71,8 @@ def init_db():
status CHAR(20), status CHAR(20),
created DATE, created DATE,
bump DATE, bump DATE,
secret TEXT secret TEXT,
contract TEXT
) )
''') ''')
conn.commit() conn.commit()
@@ -92,6 +93,12 @@ def execute_db(query: str, params: tuple = (), fetch: bool = False):
# ---------------------- Models ---------------------- # ---------------------- Models ----------------------
class ContractItem(BaseModel):
quantity: int
name: str
product_id: int
features: Dict[str, Any]
class ContainerModel(BaseModel): class ContainerModel(BaseModel):
UUID: str UUID: str
email: Optional[str] = None email: Optional[str] = None
@@ -107,7 +114,7 @@ class ContainerModel(BaseModel):
created: Optional[str] = None created: Optional[str] = None
bump: Optional[str] = None bump: Optional[str] = None
secret: Optional[Dict[str, Any]] = None secret: Optional[Dict[str, Any]] = None
contract: Optional[str] = None
class UUIDRequest(BaseModel): class UUIDRequest(BaseModel):
UUID: str UUID: str
@@ -129,22 +136,6 @@ import json
app = FastAPI() 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 ---------------------- # ---------------------- Routes ----------------------
@app.get("/", include_in_schema=False) @app.get("/", include_in_schema=False)
@@ -157,6 +148,8 @@ def update_container(request: ContainerModel):
# Convert dict fields to JSON strings # Convert dict fields to JSON strings
env_str = json.dumps(request.env) if isinstance(request.env, dict) else None 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 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 # Fetch existing record
existing = execute_db("SELECT * FROM containers WHERE UUID = ?", (request.UUID,), fetch=True) 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 # If record does not exist, insert a new one with all given fields
execute_db(""" execute_db("""
INSERT INTO containers (UUID, email, expires, tags, env, affiliate, image, history, INSERT INTO containers (UUID, email, expires, tags, env, affiliate, image, history,
comment, domains, status, created, bump, secret) comment, domains, status, created, bump, secret, contract)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
""", ( """, (
request.UUID, request.email, request.expires, request.tags, env_str, request.UUID, request.email, request.expires, request.tags, env_str,
request.affiliate, request.image, request.history, request.comment, 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"} return {"UUID": request.UUID, "status": "created"}
@@ -184,8 +177,9 @@ def update_container(request: ContainerModel):
continue continue
value = getattr(request, field) value = getattr(request, field)
if value is not None: if value is not None:
if field in ["env", "secret"]: if field in ["env", "secret", "contract"]:
value = json.dumps(value) value = json.dumps(value)
updates[field] = value updates[field] = value
params.append(value) params.append(value)
@@ -222,7 +216,7 @@ def info_container(request: Optional[UUIDRequest] = None):
# Fields to select # Fields to select
fields = [ fields = [
"ID", "UUID", "email", "expires", "tags", "env", "affiliate", "ID", "UUID", "email", "expires", "tags", "env", "affiliate",
"image", "history", "comment", "domains", "status", "created" "image", "history", "comment", "domains", "status", "created", "contract"
] ]
field_str = ", ".join(fields) field_str = ", ".join(fields)

View File

@@ -42,7 +42,7 @@ doas docker exec "$UUID" chown odoo:odoo -R /mnt/backup
# Remove old backups beyond the configured slots # 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 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" echo "Deleting old backup: $file"
rm -f "$file" doas rm -f "$file"
done done

View File

@@ -1,8 +1,8 @@
#!/bin/bash #!/bin/bash
while true; do while true; do
find /tmp -type f -atime +2 -delete find /4server/tmp -type f -atime +2 -delete
find /tmp -type d -empty -delete find /4server/tmp -type d -empty -delete
sleep 1d sleep 1d
done done

View File

@@ -12,6 +12,14 @@ rex doas mkdir -p /BACKUP
rex doas chmod 777 /BACKUP rex doas chmod 777 /BACKUP
rex doas chown 4server:4server /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 template templates/.profile /home/4server/.profile
### PACKAGES ### PACKAGES

Binary file not shown.