Files
openyield/web/templates/window_new.html
T
cloudinit-bot 79a3358810 feat(P3): Window authorization — open/lifecycle/audit log (REQ-042)
web/handlers/window.go: GET /window (list), GET /window/new (form),
POST /window (open), GET /window/{id} (detail+lifecycle+audit), POST
/window/{id}/activate|revoke|expire (lifecycle transitions). Store
extensions: OpenWindow/ActivateWindow/RevokeWindow/ExpireWindow/
ListWindows/GetWindow/GetAuditLog — all call the REAL x/window/types
Window.Activate/Revoke/Expire methods (not reimplementation). Revoke on
Expired is a no-op (v0.2 terminal-state contract). AuditEntry appended on
each transition. 3 Window templates. window_test.go: lifecycle
correctness (asserts real methods invoked), idempotent revoke, revoke-on-
expired no-op, G-026 error lexicon checks. Coverage: store 99.2%,
handlers 87.7%.

---ci---
project: oy
phase: 3
milestone: v0.6
status: execute
---/ci---
2026-08-18 18:58:25 +00:00

36 lines
1.8 KiB
HTML

{{define "title"}}Open a Window — OpenYield{{end}}
{{define "content"}}
<section class="panel">
<h1>Open a Window</h1>
<p>A Window delegates scoped access to a partner or service without giving
up custody. The Holder sets the scope, the duration, and a rate-limit; the
Window is revocable at any time.</p>
<form method="POST" action="/window" hx-post="/window" hx-target="body">
<label for="grantor_holder">Grantor Holder ID</label>
<input type="text" id="grantor_holder" name="grantor_holder" required
maxlength="128" placeholder="the Holder opening the Window">
<label for="grantee">Grantee</label>
<input type="text" id="grantee" name="grantee" required
maxlength="128" placeholder="the partner or service receiving access">
<label for="scope_kind">Scope kind</label>
<select id="scope_kind" name="scope_kind">
<option value="ReadStash">ReadStash</option>
<option value="ReadStanding">ReadStanding</option>
<option value="ProcessPassActForStand">ProcessPassActForStand</option>
</select>
<label for="resource_id">Resource ID</label>
<input type="text" id="resource_id" name="resource_id"
maxlength="128" placeholder="the Stash or Stand this Window scopes to">
<label for="start_unix">Start (unix seconds, blank = now)</label>
<input type="number" id="start_unix" name="start_unix" placeholder="blank = now">
<label for="end_unix">End (unix seconds, blank = now+1h)</label>
<input type="number" id="end_unix" name="end_unix" placeholder="blank = now+1h">
<label for="max_actions">Max actions (rate-limit, blank = 10)</label>
<input type="number" id="max_actions" name="max_actions" placeholder="10">
<button type="submit">Open a Window</button>
</form>
<p><a href="/window">Back to Window list</a></p>
</section>
{{end}}