This commit is contained in:
Oliver
2025-09-04 17:10:11 +02:00
parent 3c60293ac6
commit f654fb1dd0
4 changed files with 37 additions and 14 deletions

View File

@@ -3,6 +3,5 @@
#!/bin/bash #!/bin/bash
rex "doas sqlite3 /4server/data/contracts.db <<'EOF' rex "doas sqlite3 /4server/data/contracts.db <<'EOF'
ALTER TABLE containers ALTER TABLE containers RENAME COLUMN secrets TO secret;
ADD COLUMN secrets TEXT;
EOF" EOF"

View File

@@ -59,7 +59,8 @@ def init_db():
domains TEXT, domains TEXT,
status CHAR(20), status CHAR(20),
created DATE, created DATE,
bump DATE bump DATE,
secret TEXT
) )
''') ''')
conn.commit() conn.commit()
@@ -94,7 +95,7 @@ class ContainerModel(BaseModel):
status: Optional[str] = None status: Optional[str] = None
created: Optional[str] = None created: Optional[str] = None
bump: Optional[str] = None bump: Optional[str] = None
secret: Optional[Dict[str, Any]] = None
class UUIDRequest(BaseModel): class UUIDRequest(BaseModel):
UUID: str UUID: str
@@ -109,27 +110,27 @@ def redirect_to_odoo():
@app.post("/container/update", dependencies=[Depends(verify_api_key)]) @app.post("/container/update", dependencies=[Depends(verify_api_key)])
def update_container(request: ContainerModel): def update_container(request: ContainerModel):
env_str = json.dumps(request.env) if isinstance(request.env, dict) else request.env env_str = json.dumps(request.env) if isinstance(request.env, dict) else request.env
secret_str = json.dumps(request.secret) if isinstance(request.secret, dict) else request.secret
existing = execute_db("SELECT * FROM containers WHERE UUID = ?", (request.UUID,), fetch=True) existing = execute_db("SELECT * FROM containers WHERE UUID = ?", (request.UUID,), fetch=True)
if existing: if existing:
execute_db(""" execute_db("""
UPDATE containers SET email=?, expires=?, tags=?, env=?, affiliate=?, image=?, UPDATE containers SET email=?, expires=?, tags=?, env=?, affiliate=?, image=?,
history=?, comment=?, domains=?, status=?, created=?, bump=? history=?, comment=?, domains=?, status=?, created=?, bump=?, secret=?
WHERE UUID=? WHERE UUID=?
""", ( """, (
request.email, request.expires, request.tags, env_str, request.affiliate, request.email, request.expires, request.tags, env_str, request.affiliate,
request.image, request.history, request.comment, request.domains, request.status, request.image, request.history, request.comment, request.domains, request.status,
request.created, request.bump, request.UUID request.created, request.bump, secret_str, request.UUID
)) ))
else: else:
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) comment, domains, status, created, bump, secret)
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 request.domains, request.status, request.created, request.bump, secret_str
)) ))
return {"message": "Container updated or created"} return {"message": "Container updated or created"}
@@ -154,11 +155,31 @@ def nuke_container(request: UUIDRequest):
@app.post("/container/info", dependencies=[Depends(verify_api_key)]) @app.post("/container/info", dependencies=[Depends(verify_api_key)])
def info_container(request: Optional[UUIDRequest] = None): def info_container(request: Optional[UUIDRequest] = None):
fields = [
"ID", "UUID", "email", "expires", "tags", "env", "affiliate",
"image", "history", "comment", "domains", "status", "created"
]
field_str = ", ".join(fields)
if request: if request:
rows = execute_db("SELECT * FROM containers WHERE UUID=?", (request.UUID,), fetch=True) rows = execute_db(
f"SELECT {field_str} FROM containers WHERE UUID=?",
(request.UUID,),
fetch=True
)
else: else:
rows = execute_db("SELECT * FROM containers", fetch=True) rows = execute_db(
return {"containers": rows} f"SELECT {field_str} FROM containers",
fetch=True
)
# Map rows to dicts with field names
containers = [dict(zip(fields, row)) for row in rows]
# Wrap in N8N JSON format
n8n_items = [{"json": container} for container in containers]
return n8n_items
@app.post("/container/bump", dependencies=[Depends(verify_api_key)]) @app.post("/container/bump", dependencies=[Depends(verify_api_key)])

View File

@@ -30,9 +30,12 @@ update_container() {
"domains": "N8N.local", "domains": "N8N.local",
"status":"hot", "status":"hot",
"env": { "env": {
"p": "123",
"BRANCH": "release" "BRANCH": "release"
},
"secret": {
"psql": "5Sg9gDxYQH44QNSPyOx"
} }
}' }'
} }

Binary file not shown.