79a3358810
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---
36 lines
1.8 KiB
HTML
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}} |