diff --git a/CHANGELOG.md b/CHANGELOG.md index ad17957..bfa36cd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,19 @@ +# v0.8.23-beta — De branch van een repo is te zien en te wijzigen + +Sjablonen komen uit de git-cache van een app-repo, niet uit het image van +Server Up. Welke branch die repo volgt was nergens te zien, en alleen te +veranderen door de repo te verwijderen en opnieuw toe te voegen. De id wordt +dan uit de URL afgeleid en krijgt er een volgnummer bij zodra hij al bestaat — +en juist die id staat in de metadata van elke app uit die repo. Overstappen +maakte zo stilzwijgend het bronsjabloon van je apps onvindbaar. + +- **De branch staat in de lijst.** Zo is te zien waarom een app een oudere + versie van zijn sjabloon blijft renderen. +- **Bewerken zonder de id te raken.** Naam, branch en submap zijn aan te passen; + na opslaan wordt de repo meteen opnieuw opgehaald. +- **Een leeg tokenveld wist het token niet.** De interface krijgt het token + nooit te zien, dus zou opslaan hem anders weggooien. + # v0.8.22-beta — UniFi leest zijn databasegegevens opnieuw in Het linuxserver-image schrijft `/config/data/system.properties` alleen bij de diff --git a/VERSION b/VERSION index b553cab..61c94b0 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.8.22-beta +0.8.23-beta diff --git a/server-up/app.py b/server-up/app.py index 296f50c..0fcc997 100644 --- a/server-up/app.py +++ b/server-up/app.py @@ -1445,6 +1445,49 @@ def api_repos_add(): return jsonify(ok=True) +@app.route("/api/repos/", methods=["PUT"]) +def api_repos_edit(rid): + """Naam, branch of submap van een bestaande repo aanpassen. + + Zonder dit kon je alleen verwijderen en opnieuw toevoegen. De id wordt + daarbij uit de URL afgeleid en krijgt er een volgnummer bij zodra hij al + bestaat — en juist die id staat in de `.serverup.json` van elke stack die + uit deze repo komt. Overstappen van de ene branch naar de andere maakte zo + stilletjes het bronsjabloon van je apps onvindbaar. + """ + d = request.json or {} + repos = list(cfg.load().get("APP_REPOS", [])) + repo = next((r for r in repos + if isinstance(r, dict) and r.get("id") == rid), None) + if not repo: + return jsonify(ok=False, msg="niet gevonden"), 404 + + if "url" in d: + url = str(d.get("url") or "").strip() + if not url: + return jsonify(ok=False, msg="URL vereist"), 400 + if not cfg.valid_repo_url(url): + return jsonify(ok=False, msg=_BAD_URL_MSG), 400 + repo["url"] = url + for veld in ("name", "branch", "subdir"): + if veld in d: + repo[veld] = str(d.get(veld) or "").strip() + # Een leeg tokenveld betekent "ongewijzigd": de interface krijgt het token + # nooit te zien, dus zou opslaan hem anders wissen. + if str(d.get("token") or "").strip(): + repo["token"] = d["token"].strip() + if not repo.get("branch"): + repo["branch"] = "main" + + cfg.patch({"APP_REPOS": repos}) + audit.log("repos", "edit", "ok", ref=rid, detail=repo.get("branch", ""), + ip=request.remote_addr) + # De cache staat nog op de oude branch; die haalt de eerstvolgende sync op. + veilig = {k: v for k, v in repo.items() if k != "token"} + veilig["has_token"] = bool((repo.get("token") or "").strip()) + return jsonify(ok=True, repo=veilig) + + @app.route("/api/repos/", methods=["DELETE"]) def api_repos_del(rid): # `r["id"]` op een regel zonder id gaf hier een KeyError, dus een 500 — diff --git a/server-up/templates/index.html b/server-up/templates/index.html index ddf78c0..4088d48 100644 --- a/server-up/templates/index.html +++ b/server-up/templates/index.html @@ -1395,7 +1395,12 @@ tailwind.config = {
+ + +
@@ -1462,6 +1467,29 @@ tailwind.config = {
+ + +