works
This commit is contained in:
@@ -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"
|
||||
|
||||
40
app/sbin/api
40
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)
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Binary file not shown.
Reference in New Issue
Block a user