diff --git a/docker/seed-delmia-api.sh b/docker/seed-delmia-api.sh new file mode 100755 index 00000000..801c96eb --- /dev/null +++ b/docker/seed-delmia-api.sh @@ -0,0 +1,43 @@ +#!/bin/bash +set -euo pipefail + +# Seed the DelmiaRecipeDownload inbound method (prod's script verbatim, minus its dead `suf` +# line — see docs/api-specs/Delmia-Recipe-Download-API.md §4) and one API key scoped to it. +# Prints the one-time token as DELMIA_API_KEY=... — capture it; it cannot be retrieved again. +# Not idempotent (method name must be unique): delete with `api-method delete --id`. + +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" +CLI="$PROJECT_ROOT/src/ZB.MOM.WW.ScadaBridge.CLI/bin/Debug/net10.0/scadabridge" +A=(--url "${SCADABRIDGE_URL:-http://localhost:9000}" --format=json --username "${SCADABRIDGE_USERNAME:-multi-role}" --password "${SCADABRIDGE_PASSWORD:-password}") +KEY_NAME="${KEY_NAME:-delmia-notifier}" + +read -r -d '' METHOD_CODE <<'CS' || true +try { + System.Func P = k => Parameters.ContainsKey(k) ? Parameters[k] : null; + var code = (P("MachineCode") as string ?? "").Trim(); + if (string.IsNullOrEmpty(code)) return new { Result = false, ResultText = "MachineCode is required" }; + + return await Route.To(code).Call("ProcessRecipeDownload", new { + DownloadPath = P("DownloadPath"), + WorkOrderNumber = P("WorkOrderNumber"), + PartNumber = P("PartNumber"), + JobStepNumber = P("JobStepNumber"), + Username = P("Username"), + }); +} catch (Exception ex) { + return new { Result = false, ResultText = "RecipeDownload failed: " + ex.Message }; +} +CS + +echo "1/2 Creating inbound method DelmiaRecipeDownload (timeout 45 s)..." +METHOD_JSON=$("$CLI" api-method create "${A[@]}" --name DelmiaRecipeDownload --timeout 45 \ + --parameters '{"type":"object","properties":{"MachineCode":{"type":"string"},"DownloadPath":{"type":"string"},"WorkOrderNumber":{"type":"string"},"PartNumber":{"type":"string"},"JobStepNumber":{"type":"string"},"Username":{"type":"string"}},"required":[]}' \ + --return-def '{"type":"object","properties":{"Result":{"type":"boolean"},"ResultText":{"type":"string"}},"required":["Result","ResultText"]}' \ + --script "$METHOD_CODE") +echo " $(echo "$METHOD_JSON" | python3 -c 'import json,sys; d=json.load(sys.stdin); print("id=%s name=%s" % (d["id"], d["name"]))')" + +echo "2/2 Creating API key '$KEY_NAME' scoped to DelmiaRecipeDownload..." +KEY_JSON=$("$CLI" security api-key create "${A[@]}" --name "$KEY_NAME" --methods DelmiaRecipeDownload 2>/dev/null) +TOKEN=$(echo "$KEY_JSON" | python3 -c 'import json,sys; print(json.load(sys.stdin)["token"])' 2>/dev/null || echo "$KEY_JSON" | grep -o 'sbk_[A-Za-z0-9_-]*' | head -1) +echo "DELMIA_API_KEY=$TOKEN"