TestFormsHTML renders each declaration in every binding the library renders it in and compares the text, through golden.Compare, with a file under internal/server/testdata/forms. A form that is not a rows form is rendered unbound, on the edit side and on the create side, unbound with values, and as a record (every field bound to a value its rules accept, three cells per field, an instance and a message); a search is then rendered boosted and with a target, a select and an out-of-band select, and any other form is rendered refused (an empty POST parsed through the declaration) with the refusals of a 600-character value in every field. A rows form is rendered unbound, then with an open row, a staged delta and the tray (or the row's own commit), each row field and one row action. Runtime options are a fixed "Choose one", Alpha and Beta. The subtests are grouped in three. registered/<name> holds the 19 forms forms.All returns in the internal/server test binary; the files number 26 in all. per-request/<case> holds the declarations built per request: the settings form, the org type card's two copies, the rules form, and the list search embedded (one sibling parameter) and standalone. library-defaults holds a table's "Field" and "Value" headings, a textarea's three rows and the htmx verb of GET, PUT, PATCH, DELETE and POST on a form that is not a search. TestFormsGoldenFilesAreAllRendered fails for any file under testdata/forms that TestFormsHTML does not write, so a form that leaves the registry leaves no stale file. TestPerRequestFormsSatisfyTheInvariants runs CheckInvariants over the org type card's two copies and the rules form's copy; the settings form has its own test, and the list search builds its declaration inside listSearchForm and never returns it, so no test can pass it to CheckInvariants and it stays unchecked. Shown to change no output: only a test file and its goldens are added. The names and results of ./internal/forms ./internal/server ./internal/integrations/... (2113 at the parent, 2144 here, none failing, one skip on each side), taken with the test database reset and the app down at the parent and at this commit, are equal apart from the new tests and their 28 subtests. The registered forms' files in name order followed by the defaults' file are byte-equal to the output of a standalone program that renders the same bindings, run at 0abbfac7; no file under internal/forms, internal/server or internal/embeds that is not a test or a golden has changed since. A separate render of the per-request declarations, unbound only, equals the unbound section of the org type card's files and of the rules form's file apart from the runtime options it did not bind, and equals the list search's two files exactly. The other bindings and the settings file were read against their declarations, not compared with another render. Three runs in a row produce the same files, with no -update. 22 breaks in the form library's render.go and the three server files of the per-request cases, each edited once and each caught by the new tests. The old side has no counterpart: every break is a new-side record, since no old test names these. None dropped. Pinned defects, so a later fix flips them by name: the list search's hidden sibling inputs come out in map order with two or more siblings (rendered here with one, so the file does not vary from run to run); the library defaults no registered form reaches, which every earlier test missed. Not probed: the templates' own markup, because the files hold it for a later template change to show while the breaks probe the view the library builds; fieldAttrs, buildRows, RowField and resolveRowsFocus, whose output is in the files; the list search's per-request declaration against the invariants, for the reason above; the stale-file check, which guards the test's own files. A dense checkbox's label position is the one render break this net misses, since no registered form has a dense checkbox; TestFormPartCheckboxLabelSitsAboveTheBox catches it.
1061 lines
56 KiB
HTML
1061 lines
56 KiB
HTML
|
|
===== operator.integration.settings unbound
|
|
|
|
|
|
|
|
<form id="form-operator.integration.settings" data-form="operator.integration.settings" data-form-kind="settings" class="app-form app-form-table" novalidate hx-post="/operator/integrations/{integrationKey}/settings" hx-target="#operator-body" hx-swap="innerHTML" hx-disable="find button[type=submit]" hx-indicator="find .htmx-indicator">
|
|
<div id="form-operator.integration.settings-error" class="app-form-error" role="alert"></div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="table-responsive">
|
|
<table class="table align-middle">
|
|
<thead>
|
|
<tr>
|
|
<th scope="col">Key</th>
|
|
<th scope="col">Effective value</th><th scope="col">Source</th>
|
|
<th scope="col">Override</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
|
|
<tr id="form-operator.integration.settings-acme-widget-url" class="app-form-field">
|
|
<th scope="row" class="fw-normal">
|
|
|
|
<label class="form-label form-label-sm" for="form-operator.integration.settings-acme-widget-url-control">acme-widget-url</label>
|
|
|
|
<div id="form-operator.integration.settings-acme-widget-url-hint" class="form-text">Widget service URL</div>
|
|
|
|
</th>
|
|
<td></td><td></td>
|
|
<td>
|
|
<input type="text" class="form-control form-control-sm" id="form-operator.integration.settings-acme-widget-url-control" name="acme-widget-url" value="" autocomplete="off" aria-describedby="form-operator.integration.settings-acme-widget-url-hint">
|
|
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr id="form-operator.integration.settings-acme-widget-scheme" class="app-form-field">
|
|
<th scope="row" class="fw-normal">
|
|
|
|
<label class="form-label form-label-sm" for="form-operator.integration.settings-acme-widget-scheme-control">acme-widget-scheme</label>
|
|
|
|
<div id="form-operator.integration.settings-acme-widget-scheme-hint" class="form-text">Widget URL scheme</div>
|
|
|
|
</th>
|
|
<td></td><td></td>
|
|
<td>
|
|
<select class="form-select form-select-sm" id="form-operator.integration.settings-acme-widget-scheme-control" name="acme-widget-scheme" required autocomplete="off" aria-describedby="form-operator.integration.settings-acme-widget-scheme-hint">
|
|
<option value="http" selected>http</option>
|
|
<option value="https">https</option>
|
|
|
|
</select>
|
|
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr id="form-operator.integration.settings-acme-widget-domains" class="app-form-field">
|
|
<th scope="row" class="fw-normal">
|
|
|
|
<label class="form-label form-label-sm" for="form-operator.integration.settings-acme-widget-domains-control">acme-widget-domains</label> <button type="button" class="btn btn-link p-0 border-0 align-baseline app-help-icon" data-bs-toggle="popover" data-bs-trigger="click" data-bs-title="List format" data-bs-content="Comma-separated list." aria-label="Help: List format"><svg class="form-help-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><circle cx="12" cy="12" r="10"/><path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"/><line x1="12" y1="17" x2="12.01" y2="17"/></svg></button>
|
|
|
|
<div id="form-operator.integration.settings-acme-widget-domains-hint" class="form-text">Widget domains</div>
|
|
|
|
</th>
|
|
<td></td><td></td>
|
|
<td>
|
|
<input type="text" class="form-control form-control-sm" id="form-operator.integration.settings-acme-widget-domains-control" name="acme-widget-domains" value="" autocomplete="off" aria-describedby="form-operator.integration.settings-acme-widget-domains-hint">
|
|
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr id="form-operator.integration.settings-acme-widget-sync-enabled" class="app-form-field">
|
|
<th scope="row" class="fw-normal">
|
|
|
|
<label class="form-label form-label-sm" for="form-operator.integration.settings-acme-widget-sync-enabled-control">acme-widget-sync-enabled</label>
|
|
|
|
<div id="form-operator.integration.settings-acme-widget-sync-enabled-hint" class="form-text">Sync widgets periodically</div>
|
|
|
|
</th>
|
|
<td></td><td></td>
|
|
<td>
|
|
<input class="form-check-input" type="checkbox" id="form-operator.integration.settings-acme-widget-sync-enabled-control" name="acme-widget-sync-enabled" value="true" aria-describedby="form-operator.integration.settings-acme-widget-sync-enabled-hint">
|
|
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr id="form-operator.integration.settings-acme-widget-token" class="app-form-field">
|
|
<th scope="row" class="fw-normal">
|
|
|
|
<label class="form-label form-label-sm" for="form-operator.integration.settings-acme-widget-token-control">acme-widget-token</label>
|
|
|
|
<div id="form-operator.integration.settings-acme-widget-token-hint" class="form-text">Widget admin token</div>
|
|
|
|
</th>
|
|
<td></td><td></td>
|
|
<td>
|
|
|
|
<span class="text-muted small">Set acme-widget-token (or acme-widget-token-file) in the environment.</span>
|
|
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr id="form-operator.integration.settings-acme-widget-secondary-token" class="app-form-field">
|
|
<th scope="row" class="fw-normal">
|
|
|
|
<label class="form-label form-label-sm" for="form-operator.integration.settings-acme-widget-secondary-token-control">acme-widget-secondary-token</label>
|
|
|
|
<div id="form-operator.integration.settings-acme-widget-secondary-token-hint" class="form-text">Secondary widget token</div>
|
|
|
|
</th>
|
|
<td></td><td></td>
|
|
<td>
|
|
|
|
<span class="text-muted small">Set acme-widget-secondary-token (or acme-widget-secondary-token-file) in the environment.</span>
|
|
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr id="form-operator.integration.settings-acme-widget-api-url" class="app-form-field">
|
|
<th scope="row" class="fw-normal">
|
|
|
|
<label class="form-label form-label-sm" for="form-operator.integration.settings-acme-widget-api-url-control">acme-widget-api-url</label>
|
|
|
|
<div id="form-operator.integration.settings-acme-widget-api-url-hint" class="form-text">Widget API endpoint the admin token is sent to</div>
|
|
|
|
</th>
|
|
<td></td><td></td>
|
|
<td>
|
|
|
|
<span class="text-muted small">Set acme-widget-api-url in the environment.</span>
|
|
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr id="form-operator.integration.settings-acme-mode" class="app-form-field">
|
|
<th scope="row" class="fw-normal">
|
|
|
|
<label class="form-label form-label-sm" for="form-operator.integration.settings-acme-mode-control">acme-mode</label>
|
|
|
|
<div id="form-operator.integration.settings-acme-mode-hint" class="form-text">Processing mode Selecting live moves this deployment onto real payment processing: charges become real money, not test transactions.</div>
|
|
|
|
</th>
|
|
<td></td><td></td>
|
|
<td>
|
|
<select class="form-select form-select-sm" id="form-operator.integration.settings-acme-mode-control" name="acme-mode" required autocomplete="off" aria-describedby="form-operator.integration.settings-acme-mode-hint">
|
|
<option value="test" selected>test</option>
|
|
<option value="live">live</option>
|
|
|
|
</select>
|
|
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<div class="d-flex flex-wrap gap-2 app-form-commit">
|
|
|
|
<button type="submit" class="btn btn-primary"><span class="spinner-border spinner-border-sm htmx-indicator me-1" aria-hidden="true"></span>Save</button>
|
|
|
|
|
|
</div>
|
|
|
|
</form>
|
|
|
|
|
|
|
|
===== operator.integration.settings unbound edit side
|
|
|
|
|
|
|
|
<form id="form-operator.integration.settings" data-form="operator.integration.settings" data-form-kind="settings" class="app-form app-form-table" novalidate hx-post="/operator/integrations/{integrationKey}/settings" hx-target="#operator-body" hx-swap="innerHTML" hx-disable="find button[type=submit]" hx-indicator="find .htmx-indicator">
|
|
<div id="form-operator.integration.settings-error" class="app-form-error" role="alert"></div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="table-responsive">
|
|
<table class="table align-middle">
|
|
<thead>
|
|
<tr>
|
|
<th scope="col">Key</th>
|
|
<th scope="col">Effective value</th><th scope="col">Source</th>
|
|
<th scope="col">Override</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
|
|
<tr id="form-operator.integration.settings-acme-widget-url" class="app-form-field">
|
|
<th scope="row" class="fw-normal">
|
|
|
|
<label class="form-label form-label-sm" for="form-operator.integration.settings-acme-widget-url-control">acme-widget-url</label>
|
|
|
|
<div id="form-operator.integration.settings-acme-widget-url-hint" class="form-text">Widget service URL</div>
|
|
|
|
</th>
|
|
<td></td><td></td>
|
|
<td>
|
|
<input type="text" class="form-control form-control-sm" id="form-operator.integration.settings-acme-widget-url-control" name="acme-widget-url" value="" autocomplete="off" aria-describedby="form-operator.integration.settings-acme-widget-url-hint">
|
|
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr id="form-operator.integration.settings-acme-widget-scheme" class="app-form-field">
|
|
<th scope="row" class="fw-normal">
|
|
|
|
<label class="form-label form-label-sm" for="form-operator.integration.settings-acme-widget-scheme-control">acme-widget-scheme</label>
|
|
|
|
<div id="form-operator.integration.settings-acme-widget-scheme-hint" class="form-text">Widget URL scheme</div>
|
|
|
|
</th>
|
|
<td></td><td></td>
|
|
<td>
|
|
<select class="form-select form-select-sm" id="form-operator.integration.settings-acme-widget-scheme-control" name="acme-widget-scheme" required autocomplete="off" aria-describedby="form-operator.integration.settings-acme-widget-scheme-hint">
|
|
<option value="http" selected>http</option>
|
|
<option value="https">https</option>
|
|
|
|
</select>
|
|
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr id="form-operator.integration.settings-acme-widget-domains" class="app-form-field">
|
|
<th scope="row" class="fw-normal">
|
|
|
|
<label class="form-label form-label-sm" for="form-operator.integration.settings-acme-widget-domains-control">acme-widget-domains</label> <button type="button" class="btn btn-link p-0 border-0 align-baseline app-help-icon" data-bs-toggle="popover" data-bs-trigger="click" data-bs-title="List format" data-bs-content="Comma-separated list." aria-label="Help: List format"><svg class="form-help-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><circle cx="12" cy="12" r="10"/><path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"/><line x1="12" y1="17" x2="12.01" y2="17"/></svg></button>
|
|
|
|
<div id="form-operator.integration.settings-acme-widget-domains-hint" class="form-text">Widget domains</div>
|
|
|
|
</th>
|
|
<td></td><td></td>
|
|
<td>
|
|
<input type="text" class="form-control form-control-sm" id="form-operator.integration.settings-acme-widget-domains-control" name="acme-widget-domains" value="" autocomplete="off" aria-describedby="form-operator.integration.settings-acme-widget-domains-hint">
|
|
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr id="form-operator.integration.settings-acme-widget-sync-enabled" class="app-form-field">
|
|
<th scope="row" class="fw-normal">
|
|
|
|
<label class="form-label form-label-sm" for="form-operator.integration.settings-acme-widget-sync-enabled-control">acme-widget-sync-enabled</label>
|
|
|
|
<div id="form-operator.integration.settings-acme-widget-sync-enabled-hint" class="form-text">Sync widgets periodically</div>
|
|
|
|
</th>
|
|
<td></td><td></td>
|
|
<td>
|
|
<input class="form-check-input" type="checkbox" id="form-operator.integration.settings-acme-widget-sync-enabled-control" name="acme-widget-sync-enabled" value="true" aria-describedby="form-operator.integration.settings-acme-widget-sync-enabled-hint">
|
|
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr id="form-operator.integration.settings-acme-widget-token" class="app-form-field">
|
|
<th scope="row" class="fw-normal">
|
|
|
|
<label class="form-label form-label-sm" for="form-operator.integration.settings-acme-widget-token-control">acme-widget-token</label>
|
|
|
|
<div id="form-operator.integration.settings-acme-widget-token-hint" class="form-text">Widget admin token</div>
|
|
|
|
</th>
|
|
<td></td><td></td>
|
|
<td>
|
|
|
|
<span class="text-muted small">Set acme-widget-token (or acme-widget-token-file) in the environment.</span>
|
|
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr id="form-operator.integration.settings-acme-widget-secondary-token" class="app-form-field">
|
|
<th scope="row" class="fw-normal">
|
|
|
|
<label class="form-label form-label-sm" for="form-operator.integration.settings-acme-widget-secondary-token-control">acme-widget-secondary-token</label>
|
|
|
|
<div id="form-operator.integration.settings-acme-widget-secondary-token-hint" class="form-text">Secondary widget token</div>
|
|
|
|
</th>
|
|
<td></td><td></td>
|
|
<td>
|
|
|
|
<span class="text-muted small">Set acme-widget-secondary-token (or acme-widget-secondary-token-file) in the environment.</span>
|
|
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr id="form-operator.integration.settings-acme-widget-api-url" class="app-form-field">
|
|
<th scope="row" class="fw-normal">
|
|
|
|
<label class="form-label form-label-sm" for="form-operator.integration.settings-acme-widget-api-url-control">acme-widget-api-url</label>
|
|
|
|
<div id="form-operator.integration.settings-acme-widget-api-url-hint" class="form-text">Widget API endpoint the admin token is sent to</div>
|
|
|
|
</th>
|
|
<td></td><td></td>
|
|
<td>
|
|
|
|
<span class="text-muted small">Set acme-widget-api-url in the environment.</span>
|
|
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr id="form-operator.integration.settings-acme-mode" class="app-form-field">
|
|
<th scope="row" class="fw-normal">
|
|
|
|
<label class="form-label form-label-sm" for="form-operator.integration.settings-acme-mode-control">acme-mode</label>
|
|
|
|
<div id="form-operator.integration.settings-acme-mode-hint" class="form-text">Processing mode Selecting live moves this deployment onto real payment processing: charges become real money, not test transactions.</div>
|
|
|
|
</th>
|
|
<td></td><td></td>
|
|
<td>
|
|
<select class="form-select form-select-sm" id="form-operator.integration.settings-acme-mode-control" name="acme-mode" required autocomplete="off" aria-describedby="form-operator.integration.settings-acme-mode-hint">
|
|
<option value="test" selected>test</option>
|
|
<option value="live">live</option>
|
|
|
|
</select>
|
|
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<div class="d-flex flex-wrap gap-2 app-form-commit">
|
|
|
|
<button type="submit" class="btn btn-primary"><span class="spinner-border spinner-border-sm htmx-indicator me-1" aria-hidden="true"></span>Save</button>
|
|
|
|
|
|
</div>
|
|
|
|
</form>
|
|
|
|
|
|
|
|
===== operator.integration.settings create side
|
|
|
|
|
|
|
|
<form id="form-operator.integration.settings" data-form="operator.integration.settings" data-form-kind="settings" class="app-form app-form-table" novalidate hx-post="/operator/integrations/{integrationKey}/settings" hx-target="#operator-body" hx-swap="innerHTML" hx-disable="find button[type=submit]" hx-indicator="find .htmx-indicator">
|
|
<div id="form-operator.integration.settings-error" class="app-form-error" role="alert"></div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="table-responsive">
|
|
<table class="table align-middle">
|
|
<thead>
|
|
<tr>
|
|
<th scope="col">Key</th>
|
|
<th scope="col">Effective value</th><th scope="col">Source</th>
|
|
<th scope="col">Override</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
|
|
<tr id="form-operator.integration.settings-acme-widget-url" class="app-form-field">
|
|
<th scope="row" class="fw-normal">
|
|
|
|
<label class="form-label form-label-sm" for="form-operator.integration.settings-acme-widget-url-control">acme-widget-url</label>
|
|
|
|
<div id="form-operator.integration.settings-acme-widget-url-hint" class="form-text">Widget service URL</div>
|
|
|
|
</th>
|
|
<td></td><td></td>
|
|
<td>
|
|
<input type="text" class="form-control form-control-sm" id="form-operator.integration.settings-acme-widget-url-control" name="acme-widget-url" value="" autocomplete="off" aria-describedby="form-operator.integration.settings-acme-widget-url-hint">
|
|
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr id="form-operator.integration.settings-acme-widget-scheme" class="app-form-field">
|
|
<th scope="row" class="fw-normal">
|
|
|
|
<label class="form-label form-label-sm" for="form-operator.integration.settings-acme-widget-scheme-control">acme-widget-scheme</label>
|
|
|
|
<div id="form-operator.integration.settings-acme-widget-scheme-hint" class="form-text">Widget URL scheme</div>
|
|
|
|
</th>
|
|
<td></td><td></td>
|
|
<td>
|
|
<select class="form-select form-select-sm" id="form-operator.integration.settings-acme-widget-scheme-control" name="acme-widget-scheme" required autocomplete="off" aria-describedby="form-operator.integration.settings-acme-widget-scheme-hint">
|
|
<option value="http" selected>http</option>
|
|
<option value="https">https</option>
|
|
|
|
</select>
|
|
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr id="form-operator.integration.settings-acme-widget-domains" class="app-form-field">
|
|
<th scope="row" class="fw-normal">
|
|
|
|
<label class="form-label form-label-sm" for="form-operator.integration.settings-acme-widget-domains-control">acme-widget-domains</label> <button type="button" class="btn btn-link p-0 border-0 align-baseline app-help-icon" data-bs-toggle="popover" data-bs-trigger="click" data-bs-title="List format" data-bs-content="Comma-separated list." aria-label="Help: List format"><svg class="form-help-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><circle cx="12" cy="12" r="10"/><path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"/><line x1="12" y1="17" x2="12.01" y2="17"/></svg></button>
|
|
|
|
<div id="form-operator.integration.settings-acme-widget-domains-hint" class="form-text">Widget domains</div>
|
|
|
|
</th>
|
|
<td></td><td></td>
|
|
<td>
|
|
<input type="text" class="form-control form-control-sm" id="form-operator.integration.settings-acme-widget-domains-control" name="acme-widget-domains" value="" autocomplete="off" aria-describedby="form-operator.integration.settings-acme-widget-domains-hint">
|
|
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr id="form-operator.integration.settings-acme-widget-sync-enabled" class="app-form-field">
|
|
<th scope="row" class="fw-normal">
|
|
|
|
<label class="form-label form-label-sm" for="form-operator.integration.settings-acme-widget-sync-enabled-control">acme-widget-sync-enabled</label>
|
|
|
|
<div id="form-operator.integration.settings-acme-widget-sync-enabled-hint" class="form-text">Sync widgets periodically</div>
|
|
|
|
</th>
|
|
<td></td><td></td>
|
|
<td>
|
|
<input class="form-check-input" type="checkbox" id="form-operator.integration.settings-acme-widget-sync-enabled-control" name="acme-widget-sync-enabled" value="true" aria-describedby="form-operator.integration.settings-acme-widget-sync-enabled-hint">
|
|
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr id="form-operator.integration.settings-acme-widget-token" class="app-form-field">
|
|
<th scope="row" class="fw-normal">
|
|
|
|
<label class="form-label form-label-sm" for="form-operator.integration.settings-acme-widget-token-control">acme-widget-token</label>
|
|
|
|
<div id="form-operator.integration.settings-acme-widget-token-hint" class="form-text">Widget admin token</div>
|
|
|
|
</th>
|
|
<td></td><td></td>
|
|
<td>
|
|
|
|
<span class="text-muted small">Set acme-widget-token (or acme-widget-token-file) in the environment.</span>
|
|
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr id="form-operator.integration.settings-acme-widget-secondary-token" class="app-form-field">
|
|
<th scope="row" class="fw-normal">
|
|
|
|
<label class="form-label form-label-sm" for="form-operator.integration.settings-acme-widget-secondary-token-control">acme-widget-secondary-token</label>
|
|
|
|
<div id="form-operator.integration.settings-acme-widget-secondary-token-hint" class="form-text">Secondary widget token</div>
|
|
|
|
</th>
|
|
<td></td><td></td>
|
|
<td>
|
|
|
|
<span class="text-muted small">Set acme-widget-secondary-token (or acme-widget-secondary-token-file) in the environment.</span>
|
|
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr id="form-operator.integration.settings-acme-widget-api-url" class="app-form-field">
|
|
<th scope="row" class="fw-normal">
|
|
|
|
<label class="form-label form-label-sm" for="form-operator.integration.settings-acme-widget-api-url-control">acme-widget-api-url</label>
|
|
|
|
<div id="form-operator.integration.settings-acme-widget-api-url-hint" class="form-text">Widget API endpoint the admin token is sent to</div>
|
|
|
|
</th>
|
|
<td></td><td></td>
|
|
<td>
|
|
|
|
<span class="text-muted small">Set acme-widget-api-url in the environment.</span>
|
|
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr id="form-operator.integration.settings-acme-mode" class="app-form-field">
|
|
<th scope="row" class="fw-normal">
|
|
|
|
<label class="form-label form-label-sm" for="form-operator.integration.settings-acme-mode-control">acme-mode</label>
|
|
|
|
<div id="form-operator.integration.settings-acme-mode-hint" class="form-text">Processing mode Selecting live moves this deployment onto real payment processing: charges become real money, not test transactions.</div>
|
|
|
|
</th>
|
|
<td></td><td></td>
|
|
<td>
|
|
<select class="form-select form-select-sm" id="form-operator.integration.settings-acme-mode-control" name="acme-mode" required autocomplete="off" aria-describedby="form-operator.integration.settings-acme-mode-hint">
|
|
<option value="test" selected>test</option>
|
|
<option value="live">live</option>
|
|
|
|
</select>
|
|
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<div class="d-flex flex-wrap gap-2 app-form-commit">
|
|
|
|
<button type="submit" class="btn btn-primary"><span class="spinner-border spinner-border-sm htmx-indicator me-1" aria-hidden="true"></span>Save</button>
|
|
|
|
|
|
</div>
|
|
|
|
</form>
|
|
|
|
|
|
|
|
===== operator.integration.settings unbound with values
|
|
|
|
|
|
|
|
<form id="form-operator.integration.settings" data-form="operator.integration.settings" data-form-kind="settings" class="app-form app-form-table" novalidate hx-post="/operator/integrations/{integrationKey}/settings" hx-target="#operator-body" hx-swap="innerHTML" hx-disable="find button[type=submit]" hx-indicator="find .htmx-indicator">
|
|
<div id="form-operator.integration.settings-error" class="app-form-error" role="alert"></div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="table-responsive">
|
|
<table class="table align-middle">
|
|
<thead>
|
|
<tr>
|
|
<th scope="col">Key</th>
|
|
<th scope="col">Effective value</th><th scope="col">Source</th>
|
|
<th scope="col">Override</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
|
|
<tr id="form-operator.integration.settings-acme-widget-url" class="app-form-field">
|
|
<th scope="row" class="fw-normal">
|
|
|
|
<label class="form-label form-label-sm" for="form-operator.integration.settings-acme-widget-url-control">acme-widget-url</label>
|
|
|
|
<div id="form-operator.integration.settings-acme-widget-url-hint" class="form-text">Widget service URL</div>
|
|
|
|
</th>
|
|
<td></td><td></td>
|
|
<td>
|
|
<input type="text" class="form-control form-control-sm" id="form-operator.integration.settings-acme-widget-url-control" name="acme-widget-url" value="" autocomplete="off" aria-describedby="form-operator.integration.settings-acme-widget-url-hint">
|
|
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr id="form-operator.integration.settings-acme-widget-scheme" class="app-form-field">
|
|
<th scope="row" class="fw-normal">
|
|
|
|
<label class="form-label form-label-sm" for="form-operator.integration.settings-acme-widget-scheme-control">acme-widget-scheme</label>
|
|
|
|
<div id="form-operator.integration.settings-acme-widget-scheme-hint" class="form-text">Widget URL scheme</div>
|
|
|
|
</th>
|
|
<td></td><td></td>
|
|
<td>
|
|
<select class="form-select form-select-sm" id="form-operator.integration.settings-acme-widget-scheme-control" name="acme-widget-scheme" required autocomplete="off" aria-describedby="form-operator.integration.settings-acme-widget-scheme-hint">
|
|
<option value="http" selected>http</option>
|
|
<option value="https">https</option>
|
|
|
|
</select>
|
|
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr id="form-operator.integration.settings-acme-widget-domains" class="app-form-field">
|
|
<th scope="row" class="fw-normal">
|
|
|
|
<label class="form-label form-label-sm" for="form-operator.integration.settings-acme-widget-domains-control">acme-widget-domains</label> <button type="button" class="btn btn-link p-0 border-0 align-baseline app-help-icon" data-bs-toggle="popover" data-bs-trigger="click" data-bs-title="List format" data-bs-content="Comma-separated list." aria-label="Help: List format"><svg class="form-help-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><circle cx="12" cy="12" r="10"/><path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"/><line x1="12" y1="17" x2="12.01" y2="17"/></svg></button>
|
|
|
|
<div id="form-operator.integration.settings-acme-widget-domains-hint" class="form-text">Widget domains</div>
|
|
|
|
</th>
|
|
<td></td><td></td>
|
|
<td>
|
|
<input type="text" class="form-control form-control-sm" id="form-operator.integration.settings-acme-widget-domains-control" name="acme-widget-domains" value="" autocomplete="off" aria-describedby="form-operator.integration.settings-acme-widget-domains-hint">
|
|
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr id="form-operator.integration.settings-acme-widget-sync-enabled" class="app-form-field">
|
|
<th scope="row" class="fw-normal">
|
|
|
|
<label class="form-label form-label-sm" for="form-operator.integration.settings-acme-widget-sync-enabled-control">acme-widget-sync-enabled</label>
|
|
|
|
<div id="form-operator.integration.settings-acme-widget-sync-enabled-hint" class="form-text">Sync widgets periodically</div>
|
|
|
|
</th>
|
|
<td></td><td></td>
|
|
<td>
|
|
<input class="form-check-input" type="checkbox" id="form-operator.integration.settings-acme-widget-sync-enabled-control" name="acme-widget-sync-enabled" value="true" aria-describedby="form-operator.integration.settings-acme-widget-sync-enabled-hint">
|
|
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr id="form-operator.integration.settings-acme-widget-token" class="app-form-field">
|
|
<th scope="row" class="fw-normal">
|
|
|
|
<label class="form-label form-label-sm" for="form-operator.integration.settings-acme-widget-token-control">acme-widget-token</label>
|
|
|
|
<div id="form-operator.integration.settings-acme-widget-token-hint" class="form-text">Widget admin token</div>
|
|
|
|
</th>
|
|
<td></td><td></td>
|
|
<td>
|
|
|
|
<span class="text-muted small">Set acme-widget-token (or acme-widget-token-file) in the environment.</span>
|
|
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr id="form-operator.integration.settings-acme-widget-secondary-token" class="app-form-field">
|
|
<th scope="row" class="fw-normal">
|
|
|
|
<label class="form-label form-label-sm" for="form-operator.integration.settings-acme-widget-secondary-token-control">acme-widget-secondary-token</label>
|
|
|
|
<div id="form-operator.integration.settings-acme-widget-secondary-token-hint" class="form-text">Secondary widget token</div>
|
|
|
|
</th>
|
|
<td></td><td></td>
|
|
<td>
|
|
|
|
<span class="text-muted small">Set acme-widget-secondary-token (or acme-widget-secondary-token-file) in the environment.</span>
|
|
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr id="form-operator.integration.settings-acme-widget-api-url" class="app-form-field">
|
|
<th scope="row" class="fw-normal">
|
|
|
|
<label class="form-label form-label-sm" for="form-operator.integration.settings-acme-widget-api-url-control">acme-widget-api-url</label>
|
|
|
|
<div id="form-operator.integration.settings-acme-widget-api-url-hint" class="form-text">Widget API endpoint the admin token is sent to</div>
|
|
|
|
</th>
|
|
<td></td><td></td>
|
|
<td>
|
|
|
|
<span class="text-muted small">Set acme-widget-api-url in the environment.</span>
|
|
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr id="form-operator.integration.settings-acme-mode" class="app-form-field">
|
|
<th scope="row" class="fw-normal">
|
|
|
|
<label class="form-label form-label-sm" for="form-operator.integration.settings-acme-mode-control">acme-mode</label>
|
|
|
|
<div id="form-operator.integration.settings-acme-mode-hint" class="form-text">Processing mode Selecting live moves this deployment onto real payment processing: charges become real money, not test transactions.</div>
|
|
|
|
</th>
|
|
<td></td><td></td>
|
|
<td>
|
|
<select class="form-select form-select-sm" id="form-operator.integration.settings-acme-mode-control" name="acme-mode" required autocomplete="off" aria-describedby="form-operator.integration.settings-acme-mode-hint">
|
|
<option value="test" selected>test</option>
|
|
<option value="live">live</option>
|
|
|
|
</select>
|
|
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<div class="d-flex flex-wrap gap-2 app-form-commit">
|
|
|
|
<button type="submit" class="btn btn-primary"><span class="spinner-border spinner-border-sm htmx-indicator me-1" aria-hidden="true"></span>Save</button>
|
|
|
|
|
|
</div>
|
|
|
|
</form>
|
|
|
|
|
|
|
|
===== operator.integration.settings record
|
|
|
|
|
|
|
|
<form id="form-operator.integration.settings-i1" data-form="operator.integration.settings" data-form-kind="settings" class="app-form app-form-table" novalidate hx-post="/operator/integrations/{integrationKey}/settings" hx-target="#operator-body" hx-swap="innerHTML" hx-disable="find button[type=submit]" hx-indicator="find .htmx-indicator">
|
|
<div id="form-operator.integration.settings-i1-error" class="app-form-error" role="alert"></div>
|
|
|
|
<div class="app-form-message mb-2"><p>msg</p></div>
|
|
|
|
|
|
|
|
|
|
<div class="table-responsive">
|
|
<table class="table align-middle">
|
|
<thead>
|
|
<tr>
|
|
<th scope="col">Key</th>
|
|
<th scope="col">Effective value</th><th scope="col">Source</th>
|
|
<th scope="col">Override</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
|
|
<tr id="form-operator.integration.settings-i1-acme-widget-url" class="app-form-field">
|
|
<th scope="row" class="fw-normal">
|
|
|
|
<label class="form-label form-label-sm" for="form-operator.integration.settings-i1-acme-widget-url-control">acme-widget-url</label>
|
|
|
|
<div id="form-operator.integration.settings-i1-acme-widget-url-hint" class="form-text">Widget service URL</div>
|
|
|
|
</th>
|
|
<td><i>cell</i></td><td><i>cell 2</i></td>
|
|
<td>
|
|
<input type="text" class="form-control form-control-sm" id="form-operator.integration.settings-i1-acme-widget-url-control" name="acme-widget-url" value="sample" autocomplete="off" aria-describedby="form-operator.integration.settings-i1-acme-widget-url-hint">
|
|
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr id="form-operator.integration.settings-i1-acme-widget-scheme" class="app-form-field">
|
|
<th scope="row" class="fw-normal">
|
|
|
|
<label class="form-label form-label-sm" for="form-operator.integration.settings-i1-acme-widget-scheme-control">acme-widget-scheme</label>
|
|
|
|
<div id="form-operator.integration.settings-i1-acme-widget-scheme-hint" class="form-text">Widget URL scheme</div>
|
|
|
|
</th>
|
|
<td><i>cell</i></td><td><i>cell 2</i></td>
|
|
<td>
|
|
<select class="form-select form-select-sm" id="form-operator.integration.settings-i1-acme-widget-scheme-control" name="acme-widget-scheme" required autocomplete="off" aria-describedby="form-operator.integration.settings-i1-acme-widget-scheme-hint">
|
|
<option value="http" selected>http</option>
|
|
<option value="https">https</option>
|
|
|
|
</select>
|
|
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr id="form-operator.integration.settings-i1-acme-widget-domains" class="app-form-field">
|
|
<th scope="row" class="fw-normal">
|
|
|
|
<label class="form-label form-label-sm" for="form-operator.integration.settings-i1-acme-widget-domains-control">acme-widget-domains</label> <button type="button" class="btn btn-link p-0 border-0 align-baseline app-help-icon" data-bs-toggle="popover" data-bs-trigger="click" data-bs-title="List format" data-bs-content="Comma-separated list." aria-label="Help: List format"><svg class="form-help-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><circle cx="12" cy="12" r="10"/><path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"/><line x1="12" y1="17" x2="12.01" y2="17"/></svg></button>
|
|
|
|
<div id="form-operator.integration.settings-i1-acme-widget-domains-hint" class="form-text">Widget domains</div>
|
|
|
|
</th>
|
|
<td><i>cell</i></td><td><i>cell 2</i></td>
|
|
<td>
|
|
<input type="text" class="form-control form-control-sm" id="form-operator.integration.settings-i1-acme-widget-domains-control" name="acme-widget-domains" value="sample" autocomplete="off" aria-describedby="form-operator.integration.settings-i1-acme-widget-domains-hint">
|
|
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr id="form-operator.integration.settings-i1-acme-widget-sync-enabled" class="app-form-field">
|
|
<th scope="row" class="fw-normal">
|
|
|
|
<label class="form-label form-label-sm" for="form-operator.integration.settings-i1-acme-widget-sync-enabled-control">acme-widget-sync-enabled</label>
|
|
|
|
<div id="form-operator.integration.settings-i1-acme-widget-sync-enabled-hint" class="form-text">Sync widgets periodically</div>
|
|
|
|
</th>
|
|
<td><i>cell</i></td><td><i>cell 2</i></td>
|
|
<td>
|
|
<input class="form-check-input" type="checkbox" id="form-operator.integration.settings-i1-acme-widget-sync-enabled-control" name="acme-widget-sync-enabled" value="true" checked aria-describedby="form-operator.integration.settings-i1-acme-widget-sync-enabled-hint">
|
|
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr id="form-operator.integration.settings-i1-acme-widget-token" class="app-form-field">
|
|
<th scope="row" class="fw-normal">
|
|
|
|
<label class="form-label form-label-sm" for="form-operator.integration.settings-i1-acme-widget-token-control">acme-widget-token</label>
|
|
|
|
<div id="form-operator.integration.settings-i1-acme-widget-token-hint" class="form-text">Widget admin token</div>
|
|
|
|
</th>
|
|
<td><i>cell</i></td><td><i>cell 2</i></td>
|
|
<td>
|
|
|
|
<span class="text-muted small">Set acme-widget-token (or acme-widget-token-file) in the environment.</span>
|
|
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr id="form-operator.integration.settings-i1-acme-widget-secondary-token" class="app-form-field">
|
|
<th scope="row" class="fw-normal">
|
|
|
|
<label class="form-label form-label-sm" for="form-operator.integration.settings-i1-acme-widget-secondary-token-control">acme-widget-secondary-token</label>
|
|
|
|
<div id="form-operator.integration.settings-i1-acme-widget-secondary-token-hint" class="form-text">Secondary widget token</div>
|
|
|
|
</th>
|
|
<td><i>cell</i></td><td><i>cell 2</i></td>
|
|
<td>
|
|
|
|
<span class="text-muted small">Set acme-widget-secondary-token (or acme-widget-secondary-token-file) in the environment.</span>
|
|
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr id="form-operator.integration.settings-i1-acme-widget-api-url" class="app-form-field">
|
|
<th scope="row" class="fw-normal">
|
|
|
|
<label class="form-label form-label-sm" for="form-operator.integration.settings-i1-acme-widget-api-url-control">acme-widget-api-url</label>
|
|
|
|
<div id="form-operator.integration.settings-i1-acme-widget-api-url-hint" class="form-text">Widget API endpoint the admin token is sent to</div>
|
|
|
|
</th>
|
|
<td><i>cell</i></td><td><i>cell 2</i></td>
|
|
<td>
|
|
|
|
<span class="text-muted small">Set acme-widget-api-url in the environment.</span>
|
|
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr id="form-operator.integration.settings-i1-acme-mode" class="app-form-field">
|
|
<th scope="row" class="fw-normal">
|
|
|
|
<label class="form-label form-label-sm" for="form-operator.integration.settings-i1-acme-mode-control">acme-mode</label>
|
|
|
|
<div id="form-operator.integration.settings-i1-acme-mode-hint" class="form-text">Processing mode Selecting live moves this deployment onto real payment processing: charges become real money, not test transactions.</div>
|
|
|
|
</th>
|
|
<td><i>cell</i></td><td><i>cell 2</i></td>
|
|
<td>
|
|
<select class="form-select form-select-sm" id="form-operator.integration.settings-i1-acme-mode-control" name="acme-mode" required autocomplete="off" aria-describedby="form-operator.integration.settings-i1-acme-mode-hint">
|
|
<option value="test" selected>test</option>
|
|
<option value="live">live</option>
|
|
|
|
</select>
|
|
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<div class="d-flex flex-wrap gap-2 app-form-commit">
|
|
|
|
<button type="submit" class="btn btn-primary"><span class="spinner-border spinner-border-sm htmx-indicator me-1" aria-hidden="true"></span>Save</button>
|
|
|
|
|
|
</div>
|
|
|
|
</form>
|
|
|
|
|
|
|
|
===== operator.integration.settings refused [acme-mode acme-widget-scheme]
|
|
|
|
|
|
|
|
<form id="form-operator.integration.settings" data-form="operator.integration.settings" data-form-kind="settings" class="app-form app-form-table" novalidate hx-post="/operator/integrations/{integrationKey}/settings" hx-target="#operator-body" hx-swap="innerHTML" hx-disable="find button[type=submit]" hx-indicator="find .htmx-indicator">
|
|
<div id="form-operator.integration.settings-error" class="app-form-error" role="alert"></div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="table-responsive">
|
|
<table class="table align-middle">
|
|
<thead>
|
|
<tr>
|
|
<th scope="col">Key</th>
|
|
<th scope="col">Effective value</th><th scope="col">Source</th>
|
|
<th scope="col">Override</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
|
|
<tr id="form-operator.integration.settings-acme-widget-url" class="app-form-field">
|
|
<th scope="row" class="fw-normal">
|
|
|
|
<label class="form-label form-label-sm" for="form-operator.integration.settings-acme-widget-url-control">acme-widget-url</label>
|
|
|
|
<div id="form-operator.integration.settings-acme-widget-url-hint" class="form-text">Widget service URL</div>
|
|
|
|
</th>
|
|
<td></td><td></td>
|
|
<td>
|
|
<input type="text" class="form-control form-control-sm" id="form-operator.integration.settings-acme-widget-url-control" name="acme-widget-url" value="" autocomplete="off" aria-describedby="form-operator.integration.settings-acme-widget-url-hint">
|
|
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr id="form-operator.integration.settings-acme-widget-scheme" class="app-form-field">
|
|
<th scope="row" class="fw-normal">
|
|
|
|
<label class="form-label form-label-sm" for="form-operator.integration.settings-acme-widget-scheme-control">acme-widget-scheme</label>
|
|
|
|
<div id="form-operator.integration.settings-acme-widget-scheme-hint" class="form-text">Widget URL scheme</div>
|
|
|
|
</th>
|
|
<td></td><td></td>
|
|
<td>
|
|
<select class="form-select form-select-sm is-invalid" id="form-operator.integration.settings-acme-widget-scheme-control" name="acme-widget-scheme" required autocomplete="off" aria-describedby="form-operator.integration.settings-acme-widget-scheme-hint form-operator.integration.settings-acme-widget-scheme-error" aria-invalid="true" autofocus>
|
|
<option value="http" selected>http</option>
|
|
<option value="https">https</option>
|
|
|
|
</select>
|
|
<div id="form-operator.integration.settings-acme-widget-scheme-error" class="invalid-feedback d-block">Choose an acme-widget-scheme.</div>
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr id="form-operator.integration.settings-acme-widget-domains" class="app-form-field">
|
|
<th scope="row" class="fw-normal">
|
|
|
|
<label class="form-label form-label-sm" for="form-operator.integration.settings-acme-widget-domains-control">acme-widget-domains</label> <button type="button" class="btn btn-link p-0 border-0 align-baseline app-help-icon" data-bs-toggle="popover" data-bs-trigger="click" data-bs-title="List format" data-bs-content="Comma-separated list." aria-label="Help: List format"><svg class="form-help-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><circle cx="12" cy="12" r="10"/><path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"/><line x1="12" y1="17" x2="12.01" y2="17"/></svg></button>
|
|
|
|
<div id="form-operator.integration.settings-acme-widget-domains-hint" class="form-text">Widget domains</div>
|
|
|
|
</th>
|
|
<td></td><td></td>
|
|
<td>
|
|
<input type="text" class="form-control form-control-sm" id="form-operator.integration.settings-acme-widget-domains-control" name="acme-widget-domains" value="" autocomplete="off" aria-describedby="form-operator.integration.settings-acme-widget-domains-hint">
|
|
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr id="form-operator.integration.settings-acme-widget-sync-enabled" class="app-form-field">
|
|
<th scope="row" class="fw-normal">
|
|
|
|
<label class="form-label form-label-sm" for="form-operator.integration.settings-acme-widget-sync-enabled-control">acme-widget-sync-enabled</label>
|
|
|
|
<div id="form-operator.integration.settings-acme-widget-sync-enabled-hint" class="form-text">Sync widgets periodically</div>
|
|
|
|
</th>
|
|
<td></td><td></td>
|
|
<td>
|
|
<input class="form-check-input" type="checkbox" id="form-operator.integration.settings-acme-widget-sync-enabled-control" name="acme-widget-sync-enabled" value="true" aria-describedby="form-operator.integration.settings-acme-widget-sync-enabled-hint">
|
|
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr id="form-operator.integration.settings-acme-widget-token" class="app-form-field">
|
|
<th scope="row" class="fw-normal">
|
|
|
|
<label class="form-label form-label-sm" for="form-operator.integration.settings-acme-widget-token-control">acme-widget-token</label>
|
|
|
|
<div id="form-operator.integration.settings-acme-widget-token-hint" class="form-text">Widget admin token</div>
|
|
|
|
</th>
|
|
<td></td><td></td>
|
|
<td>
|
|
|
|
<span class="text-muted small">Set acme-widget-token (or acme-widget-token-file) in the environment.</span>
|
|
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr id="form-operator.integration.settings-acme-widget-secondary-token" class="app-form-field">
|
|
<th scope="row" class="fw-normal">
|
|
|
|
<label class="form-label form-label-sm" for="form-operator.integration.settings-acme-widget-secondary-token-control">acme-widget-secondary-token</label>
|
|
|
|
<div id="form-operator.integration.settings-acme-widget-secondary-token-hint" class="form-text">Secondary widget token</div>
|
|
|
|
</th>
|
|
<td></td><td></td>
|
|
<td>
|
|
|
|
<span class="text-muted small">Set acme-widget-secondary-token (or acme-widget-secondary-token-file) in the environment.</span>
|
|
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr id="form-operator.integration.settings-acme-widget-api-url" class="app-form-field">
|
|
<th scope="row" class="fw-normal">
|
|
|
|
<label class="form-label form-label-sm" for="form-operator.integration.settings-acme-widget-api-url-control">acme-widget-api-url</label>
|
|
|
|
<div id="form-operator.integration.settings-acme-widget-api-url-hint" class="form-text">Widget API endpoint the admin token is sent to</div>
|
|
|
|
</th>
|
|
<td></td><td></td>
|
|
<td>
|
|
|
|
<span class="text-muted small">Set acme-widget-api-url in the environment.</span>
|
|
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
<tr id="form-operator.integration.settings-acme-mode" class="app-form-field">
|
|
<th scope="row" class="fw-normal">
|
|
|
|
<label class="form-label form-label-sm" for="form-operator.integration.settings-acme-mode-control">acme-mode</label>
|
|
|
|
<div id="form-operator.integration.settings-acme-mode-hint" class="form-text">Processing mode Selecting live moves this deployment onto real payment processing: charges become real money, not test transactions.</div>
|
|
|
|
</th>
|
|
<td></td><td></td>
|
|
<td>
|
|
<select class="form-select form-select-sm is-invalid" id="form-operator.integration.settings-acme-mode-control" name="acme-mode" required autocomplete="off" aria-describedby="form-operator.integration.settings-acme-mode-hint form-operator.integration.settings-acme-mode-error" aria-invalid="true">
|
|
<option value="test" selected>test</option>
|
|
<option value="live">live</option>
|
|
|
|
</select>
|
|
<div id="form-operator.integration.settings-acme-mode-error" class="invalid-feedback d-block">Choose an acme-mode.</div>
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<div class="d-flex flex-wrap gap-2 app-form-commit">
|
|
|
|
<button type="submit" class="btn btn-primary"><span class="spinner-border spinner-border-sm htmx-indicator me-1" aria-hidden="true"></span>Save</button>
|
|
|
|
|
|
</div>
|
|
|
|
</form>
|
|
|
|
|
|
|
|
===== operator.integration.settings bad-values refusals
|
|
acme-mode: Choose an acme-mode from the list.
|
|
acme-widget-scheme: Choose an acme-widget-scheme from the list.
|