get_logs needs a unit from an allowlist (router-*, kea, unbound, networkd, nftables, ddclient, acme, sshd, kernel). API tokens are valid for 1, 7, 30 (default) or 90 days, or without limit. The overview and the Changes page say which token made the unapplied changes. options.json (router://options) no longer holds the options' source paths: they differ between builds of a release, so a router rebuilding itself offline had to build the file and failed (found by the update test). Web UI: panels flow into columns on wide screens and the width is no longer capped; on phones the navigation is a menu button; the Advanced page uses panels; VLAN dropdowns show their chosen names; the duplicate WireGuard heading is gone. basic: a subtest for wan -> local rules. SPECS.md is now the only document (decisions, how each part works, and what is not done yet); PLAN.md is gone. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AeFqV9dZrK6nipHkPfyM4F
47 lines
2.5 KiB
HTML
47 lines
2.5 KiB
HTML
{{define "content"}}
|
|
<div class="cols">
|
|
{{with .Data}}
|
|
{{$e := .Errors}}{{$f := .Form}}
|
|
<p class="hint">Keeps DNS records at your provider pointing at the router's internet addresses: it checks regularly and
|
|
right away when the address changes (a new PPPoE session, a new lease). Uses
|
|
<a href="https://ddclient.net/protocols.html">ddclient</a>; one provider account.</p>
|
|
<form method="post" action="/ddns">
|
|
<input type="hidden" name="csrf" value="{{$.CSRF}}">
|
|
<fieldset>
|
|
<legend>Provider</legend>
|
|
<label class="inline"><input type="checkbox" name="enabled" {{if $f.Enabled}}checked{{end}}> Keep these names up to date</label>
|
|
<div>
|
|
<label>Account <select name="provider"><option value=""></option>
|
|
{{range .Providers}}<option value="{{.Name}}" {{if eq .Name $f.Provider}}selected{{end}}>{{.Name}} ({{.Type}})</option>{{end}}
|
|
</select></label>
|
|
<label>Zone <input name="zone" value="{{$f.Zone}}" size="22" spellcheck="false" placeholder="example.org (Cloudflare)"></label>
|
|
</div>
|
|
{{range $k := list "provider" "zone"}}{{with index $e $k}}<p class="field-error">{{$k}}: {{.}}</p>{{end}}{{end}}
|
|
<p class="hint">The account (login and token) is kept on the <a href="/dnsproviders">DNS providers</a> page, where certificates use it too.
|
|
{{if not .Providers}}<strong>There is none yet.</strong>{{end}}</p>
|
|
</fieldset>
|
|
<fieldset>
|
|
<legend>Names</legend>
|
|
<label>Host names, one per line <textarea name="domains" rows="6" cols="40" spellcheck="false">{{$f.Domains}}</textarea></label>
|
|
{{with index $e "domains"}}<p class="field-error">{{.}}</p>{{end}}
|
|
<div>
|
|
<label class="inline"><input type="checkbox" name="ipv4" {{if $f.IPv4}}checked{{end}}> IPv4 (A records)</label>
|
|
<label class="inline"><input type="checkbox" name="ipv6" {{if $f.IPv6}}checked{{end}}> IPv6 (AAAA records)</label>
|
|
<label class="inline"><input type="checkbox" name="ssl" {{if $f.SSL}}checked{{end}}> HTTPS to the provider</label>
|
|
<label>Check every <input name="interval" value="{{$f.Interval}}" size="6"></label>
|
|
</div>
|
|
{{range $k := list "ipv4" "interval"}}{{with index $e $k}}<p class="field-error">{{$k}}: {{.}}</p>{{end}}{{end}}
|
|
</fieldset>
|
|
<button>Save</button>
|
|
</form>
|
|
|
|
<section>
|
|
<h2>Last updates</h2>
|
|
{{if .Status.Log}}<p class="muted">ddclient: {{or .Status.State "unknown"}}{{if .Status.Last}}, last run {{.Status.Last}}{{end}}</p>
|
|
<pre class="log">{{.Status.Log}}</pre>
|
|
{{else}}<p class="muted">Nothing yet. Once applied, the log of ddclient shows up here.</p>{{end}}
|
|
</section>
|
|
{{end}}
|
|
</div>
|
|
{{end}}
|