add navigation
This commit is contained in:
parent
90f5eb11d5
commit
a4027bcad9
|
@ -3,187 +3,371 @@
|
|||
<head>
|
||||
<link type="text/css" rel="stylesheet" href="/assets/com.bootstrapcdn/spacelab/bootstrap.css">
|
||||
</head>
|
||||
<body class="fade" ng-class="[ 'in' ]">
|
||||
<body class="fade" ng-class="[ 'in' ]" ng-controller="LoginController as vm" ng-init="vm.setSimple()">
|
||||
|
||||
<ul>
|
||||
<li>Change API format to verbose arrays and nested objects</li>
|
||||
<li>Set Default Path, Module (dir, api)</li>
|
||||
<li>Set Hostname, Path, Module (dir, api)</li>
|
||||
<li>Show Device Name</li>
|
||||
<li>Login to Daplie</li>
|
||||
<li>Show domains (or ask purchase)</li>
|
||||
<li>Tunnel On</li>
|
||||
<li>Show configured domains</li>
|
||||
</ul>
|
||||
|
||||
<div class="container" ng-controller="LoginController as vm" ng-init="vm.setSimple()">
|
||||
<h1 ng-if="!vm.authnUpdated">Initializing... {{vm.hello}}</h1>
|
||||
<div>
|
||||
Configure Remote Server
|
||||
<label>Configuration Address:</label>
|
||||
<input type="text" placeholder="i.e. 192.168.1.100">
|
||||
<label>Configuration Name:</label>
|
||||
<input type="text" placeholder="i.e. localhost.daplie.invalid">
|
||||
<label>Root Certificate Validation (optional):</label>
|
||||
<textarea class="textarea" placeholder="paste the contents of a root.pem here"></textarea>
|
||||
</div>
|
||||
|
||||
|
||||
<div ng-if="!vm.authnUpdated">
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-default"
|
||||
ng-disabled="vm.advanced && !vm.providerUri"
|
||||
ng-click="vm.authenticate()"
|
||||
>Login</button>
|
||||
</div>
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-link"
|
||||
ng-if="!vm.advanced"
|
||||
ng-click="vm.setAdvanced()"
|
||||
>advanced</button>
|
||||
<div ng-if="vm.advanced">
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-link"
|
||||
ng-click="vm.setSimple();"
|
||||
>simple</button>
|
||||
<input
|
||||
type="text"
|
||||
ng-change="vm.checkProviderUri(vm.myProviderUri)"
|
||||
ng-model="vm.myProviderUri">
|
||||
<div class="container">
|
||||
<center>
|
||||
<h1>Welcome to Goldilocks!</h1>
|
||||
<span ng-if="vm.config">
|
||||
Server Name: '<span ng-bind="vm.config.device.hostname"></span>' running from
|
||||
<br/>
|
||||
<code><span ng-bind="vm.config.cwd"></span>/</code>
|
||||
</span>
|
||||
<br/>
|
||||
<small>todo: allow per-device authorization</small>
|
||||
<br/>
|
||||
</center>
|
||||
</div>
|
||||
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
<ul class="nav nav-pills nav-stacked" ng-init="vm.admin.page = 'authn'">
|
||||
<li
|
||||
role="presentation"
|
||||
ng-class="{ active: 'authn' === vm.admin.page }"
|
||||
><a
|
||||
href=""
|
||||
ng-click="vm.admin.page = 'authn'"
|
||||
ng-disabled="'authn' === vm.admin.page"
|
||||
>Authenticate</a></li>
|
||||
<li
|
||||
ng-if="vm.config"
|
||||
role="presentation"
|
||||
ng-class="{ active: 'network' === vm.admin.page }"
|
||||
><a
|
||||
href=""
|
||||
ng-click="vm.admin.page = 'network'"
|
||||
ng-disabled="'network' === vm.admin.page"
|
||||
>Network</a></li>
|
||||
<li
|
||||
ng-if="vm.config"
|
||||
role="presentation"
|
||||
ng-class="{ active: 'domains' === vm.admin.page }"
|
||||
><a
|
||||
href=""
|
||||
ng-click="vm.admin.page = 'domains'"
|
||||
ng-disabled="'domains' === vm.admin.page"
|
||||
>Domains</a></li>
|
||||
<li
|
||||
ng-if="vm.config"
|
||||
role="presentation"
|
||||
ng-class="{ active: 'plugins' === vm.admin.page }"
|
||||
><a
|
||||
href=""
|
||||
ng-click="vm.admin.page = 'plugins'"
|
||||
ng-disabled="'plugins' === vm.admin.page"
|
||||
>Plugins</a></li>
|
||||
</ul>
|
||||
|
||||
<div ng-if="vm.config">
|
||||
<ul class="nav nav-tabs">
|
||||
<li
|
||||
role="presentation"
|
||||
ng-class="{ active: !vm.admin.remote }"
|
||||
><a
|
||||
href=""
|
||||
ng-click="vm.admin.remote = false"
|
||||
>Local Server</a></li>
|
||||
<li
|
||||
role="presentation"
|
||||
ng-class="{ active: vm.admin.remote }"
|
||||
><a
|
||||
href=""
|
||||
ng-click="vm.admin.remote = true"
|
||||
>Remote Server</a></li>
|
||||
</ul>
|
||||
|
||||
<div ng-if="!vm.admin.remote">
|
||||
<label>Server Address:</label>
|
||||
<input type="text" disabled value="127.0.0.1">
|
||||
<label>Server Name:</label>
|
||||
<input type="text" disabled value="localhost.admin.daplie.me">
|
||||
</div>
|
||||
|
||||
<div ng-if="vm.admin.remote">
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-default"
|
||||
ng-click="vm.remote.scan()">Scan Local Network</button>
|
||||
<br/>
|
||||
<label>Server Address:</label>
|
||||
<input type="text" placeholder="i.e. 192.168.1.100">
|
||||
<br/>
|
||||
<label>Server Name:</label>
|
||||
<input type="text" placeholder="i.e. admin.goldilocks.invalid">
|
||||
<br/>
|
||||
<label>Root Certificate Validation (optional):</label>
|
||||
<br/>
|
||||
<textarea class="textarea" placeholder="paste the contents of a root.pem here"></textarea>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div ng-if="vm.config">
|
||||
<div ng-init="siteconf = vm.config.global">
|
||||
<h1>Server Device Name: <span ng-bind="vm.config.device.hostname"></span></h1>
|
||||
<!-- input class="form-control" ng-model="vm.config.device.hostname" / -->
|
||||
<div class="col-md-8">
|
||||
|
||||
<h1>Server Working Directory:</h1>
|
||||
<input class="form-control" ng-model="vm.config.cwd" />
|
||||
<div ng-if="!vm.config || 'authn' === vm.admin.page">
|
||||
<p>In order to administer this server you must authenticate.</p>
|
||||
|
||||
<h1>Addresses:</h1>
|
||||
<table class="table">
|
||||
<tr>
|
||||
<th>Interface</th>
|
||||
<th>Address</th>
|
||||
<th>Family</th>
|
||||
<th>Scope</th>
|
||||
</tr>
|
||||
<tr ng-repeat="addr in vm.config.addresses">
|
||||
<td ng-bind="addr.iface"></td>
|
||||
<td ng-bind="addr.address"></td>
|
||||
<td ng-bind="addr.family"></td>
|
||||
<td ng-bind="addr.range"></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<h1>Managed Domains:</h1>
|
||||
|
||||
<div ng-if="!vm.domains.length">
|
||||
You don't have any domains with this account.
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-default"
|
||||
ng-disabled="vm.advanced && !vm.providerUri"
|
||||
ng-click="vm.authenticate()"
|
||||
>Login</button>
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-link"
|
||||
ng-if="!vm.advanced"
|
||||
ng-click="vm.setAdvanced()"
|
||||
>advanced</button>
|
||||
<div ng-if="vm.advanced">
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-link"
|
||||
ng-click="vm.setSimple();"
|
||||
>simple</button>
|
||||
<input
|
||||
type="text"
|
||||
ng-change="vm.checkProviderUri(vm.myProviderUri)"
|
||||
ng-model="vm.myProviderUri">
|
||||
<br/>
|
||||
Try a different account?
|
||||
<br/>
|
||||
<input type="url" placeholder="https://daplie.domains">
|
||||
<button type="button"
|
||||
class="btn"
|
||||
disabled
|
||||
>Login</button>
|
||||
<small>todo: allow per-device authorization</small>
|
||||
</div>
|
||||
|
||||
<div ng-if="vm.domains.length">
|
||||
<h2>Enable Tunnel</h2>
|
||||
<input type="radio" ng-model="vm.config.tunnel.enabled" ng-value="true">
|
||||
<input type="radio" ng-model="vm.config.tunnel.enabled" ng-value="false">
|
||||
<br/>
|
||||
<br/>
|
||||
|
||||
<table class="table">
|
||||
<tr>
|
||||
<th>Domain</th>
|
||||
<th>Sub</th>
|
||||
<th>Devices</th>
|
||||
</tr>
|
||||
<tr ng-repeat="d in vm.dns">
|
||||
<td ng-bind="d.domain"></td>
|
||||
<td ng-bind="d.name"></td>
|
||||
<td>
|
||||
<span ng-if="!d.domain">
|
||||
<div ng-repeat="dev in d.devices">
|
||||
<span ng-bind="dev"
|
||||
></span> <button
|
||||
<button
|
||||
class="btn btn-success"
|
||||
ng-if="vm.config"
|
||||
ng-click="vm.admin.page = 'network'"
|
||||
>Next: Network Settings</button>
|
||||
</div>
|
||||
|
||||
<div ng-if="vm.config">
|
||||
<div ng-init="siteconf = vm.config.global">
|
||||
<div ng-if="'network' === vm.admin.page">
|
||||
<h1>Addresses:</h1>
|
||||
<table class="table">
|
||||
<tr>
|
||||
<th>Interface</th>
|
||||
<th>Address</th>
|
||||
<th>Family</th>
|
||||
<th>Scope</th>
|
||||
</tr>
|
||||
<tr ng-repeat="addr in vm.config.addresses">
|
||||
<td ng-bind="addr.iface"></td>
|
||||
<td ng-bind="addr.address"></td>
|
||||
<td ng-bind="addr.family"></td>
|
||||
<td ng-if="'unicast' !== addr.range" ng-bind="addr.range"></td>
|
||||
<td ng-if="'unicast' === addr.range"><strong>Internet</strong></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>OAuth3 Tunnel</td>
|
||||
<td>(automatically assigned)</td>
|
||||
<td>IPv4 + IPv6</td>
|
||||
<td><strong>Internet</strong>
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-success"
|
||||
ng-if="'oauth3-tunnel' !== vm.admin.network.iface"
|
||||
ng-click="vm.admin.network.iface = 'oauth3-tunnel'"
|
||||
>Enable</button>
|
||||
<div ng-if="'oauth3-tunnel' === vm.admin.network.iface">
|
||||
<button
|
||||
ng-if="!vm.admin.tunnel.advanced"
|
||||
type="button"
|
||||
class="btn btn-danger"
|
||||
ng-click="vm.removeDevice(d, dev)"
|
||||
>x</button>
|
||||
class="btn btn-link"
|
||||
ng-click="vm.admin.tunnel.advanced = true"
|
||||
>Show Advanced Options</button>
|
||||
<button
|
||||
ng-if="vm.admin.tunnel.advanced"
|
||||
type="button"
|
||||
class="btn btn-link"
|
||||
ng-click="vm.admin.tunnel.advanced = false"
|
||||
>Show Advanced Options</button>
|
||||
</div>
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<h1>Global Settings:</h1>
|
||||
<br/>
|
||||
<form class="form-inline">
|
||||
<div ng-repeat="path in siteconf.paths">
|
||||
<h2 ng-bind="path.$id"></h2>
|
||||
<div ng-repeat="module in path.modules">
|
||||
<h3>{{module.$id}}</h3>
|
||||
<div ng-repeat="(key, value) in module">
|
||||
<label>{{key}}</label>: <input class="form-control" ng-model="module[key]" />
|
||||
<div ng-if="'oauth3-tunnel' === vm.admin.network.iface">
|
||||
<div ng-if="vm.admin.tunnel.advanced">
|
||||
<h2>OAuth3 Tunnel Options</h2>
|
||||
<label>URL</label> <input
|
||||
class"form-input"
|
||||
type="url"
|
||||
value="https://oauth3.org/api/org.oauth3.tunnel"
|
||||
disabled />
|
||||
<br/>
|
||||
<label>Token (Bearer or JWT)</label> <textarea
|
||||
class"form-input"
|
||||
disabled />aaaaaaaaaa.bbbbbbbbbbb.cccccccccccc</textarea>
|
||||
<br/>
|
||||
<label>Shared Secret (Text or JWK)</label> <input
|
||||
class"form-input"
|
||||
type="text"
|
||||
value="xxxx-xxxx-xxx-xxxxx"
|
||||
disabled />
|
||||
<br/>
|
||||
<label>Private Key (PEM or JWK)</label> <textarea
|
||||
class"form-input"
|
||||
disabled /> {
|
||||
kty: "EC",
|
||||
crv: "P-256",
|
||||
x: "zCQ5BPHPCLZYgdpo1n-x_90P2Ij52d53YVwTh3ZdiMo",
|
||||
y: "pDfQTUx0-OiZc5ZuKMcA7v2Q7ZPKsQwzB58bft0JTko",
|
||||
ext: true,
|
||||
}
|
||||
|
||||
-----BEGIN EC PARAMETERS-----
|
||||
BggqhkjOPQMBBw==
|
||||
-----END EC PARAMETERS-----
|
||||
-----BEGIN EC PRIVATE KEY-----
|
||||
MHcCAQEEIDm2RM5oZ8NPkn06MZlpz7yk6X0gJ7TeJGBAA3lJmJ/UoAoGCCqGSM49
|
||||
AwEHoUQDQgAE2aCepzyydsM4oxfGMrtham2Do1U3AZSFNiuTLKMYqXTnp2LqNTVA
|
||||
FdfmISGJve/PV53+MnCzwRcnrwQb1OfRMQ==
|
||||
-----END EC PRIVATE KEY-----</textarea>
|
||||
<br/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div ng-if="'domains' === vm.admin.page">
|
||||
<h1>Managed Domains:</h1>
|
||||
|
||||
<div ng-if="!vm.domains.length">
|
||||
You don't have any domains with this account.
|
||||
<br/>
|
||||
Try a different account?
|
||||
<br/>
|
||||
<input type="url" placeholder="https://daplie.domains">
|
||||
<button type="button"
|
||||
class="btn"
|
||||
disabled
|
||||
>Login</button>
|
||||
</div>
|
||||
|
||||
<div ng-if="vm.domains.length">
|
||||
|
||||
<table class="table">
|
||||
<tr>
|
||||
<td><select
|
||||
ng-if="vm.domains.length"
|
||||
ng-model="vm.domains.add.domain"
|
||||
ng-options="domain.domain as domain.domain for domain in vm.domains"
|
||||
><option
|
||||
style="display:none" value="">-- select domain --</option
|
||||
></select></td>
|
||||
<td><input
|
||||
type="text"
|
||||
placeholder="@"
|
||||
ng-model="vm.domains.add.sub"
|
||||
>.<input
|
||||
type="text"
|
||||
placeholder="example.com"
|
||||
ng-model="vm.domains.add.domain"
|
||||
></td>
|
||||
<td><button
|
||||
type="button"
|
||||
class="btn btn-success"
|
||||
ng-click="vm.domains.add.commit(vm.domain.add.sub, vm.delta.domain)"
|
||||
>Add</button></td>
|
||||
</tr>
|
||||
</table>
|
||||
<table class="table">
|
||||
<tr>
|
||||
<th>Domain</th>
|
||||
<th>Sub</th>
|
||||
<th>Devices</th>
|
||||
</tr>
|
||||
<tr ng-repeat="d in vm.dns">
|
||||
<td ng-bind="d.domain"></td>
|
||||
<td ng-bind="d.name"></td>
|
||||
<td>
|
||||
<span ng-if="!d.domain">
|
||||
<div ng-repeat="dev in d.devices">
|
||||
<span ng-bind="dev"
|
||||
></span> <button
|
||||
type="button"
|
||||
class="btn btn-danger"
|
||||
ng-click="vm.removeDevice(d, dev)"
|
||||
>x</button>
|
||||
</div>
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<br/>
|
||||
<br/>
|
||||
<br/>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<h1>Per-Domain Settings:</h1>
|
||||
<div ng-repeat="siteconf in vm.config.sites">
|
||||
<h2 ng-bind="siteconf.$id"></h2>
|
||||
<div ng-repeat="path in siteconf.paths">
|
||||
<h2 ng-bind="path.$id"></h2>
|
||||
<div ng-repeat="module in path.modules">
|
||||
<h3>{{module.$id}}</h3>
|
||||
<div ng-repeat="(key, value) in module">
|
||||
<label>{{key}}</label>: <input class="form-control" ng-model="module[key]" />
|
||||
<div ng-if="'plugins' === vm.admin.page">
|
||||
<h1>Global Settings:</h1>
|
||||
<br/>
|
||||
<form class="form-inline">
|
||||
<div ng-repeat="path in siteconf.paths">
|
||||
<h2 ng-bind="path.$id"></h2>
|
||||
<div ng-repeat="module in path.modules">
|
||||
<h3>{{module.$id}}</h3>
|
||||
<div ng-repeat="(key, value) in module">
|
||||
<label>{{key}}</label>: <input class="form-control" ng-model="module[key]" />
|
||||
</div>
|
||||
</div>
|
||||
<br/>
|
||||
<br/>
|
||||
<br/>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<h1>Per-Domain Settings:</h1>
|
||||
<div ng-repeat="siteconf in vm.config.sites">
|
||||
<h2 ng-bind="siteconf.$id"></h2>
|
||||
<div ng-repeat="path in siteconf.paths">
|
||||
<h2 ng-bind="path.$id"></h2>
|
||||
<div ng-repeat="module in path.modules">
|
||||
<h3>{{module.$id}}</h3>
|
||||
<div ng-repeat="(key, value) in module">
|
||||
<label>{{key}}</label>: <input class="form-control" ng-model="module[key]" />
|
||||
</div>
|
||||
</div>
|
||||
<br/>
|
||||
<br/>
|
||||
<br/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div ng-init="defaultsconf = vm.config.defaults">
|
||||
<h1>Fallback Settings:</h1>
|
||||
<br/>
|
||||
<div ng-repeat="path in siteconf.paths">
|
||||
<h2 ng-bind="path.$id"></h2>
|
||||
<div ng-repeat="module in path.modules">
|
||||
<h3>{{module.$id}}</h3>
|
||||
<div ng-repeat="(key, value) in module">
|
||||
<label>{{key}}</label>: <input class="form-control" ng-model="module[key]" />
|
||||
</div>
|
||||
</div>
|
||||
<br/>
|
||||
<br/>
|
||||
<br/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div ng-if="!vm._showvmconfig">
|
||||
<button class="btn-link" ng-click="vm._showvmconfig = true">show config as json</button>
|
||||
</div>
|
||||
<div ng-if="vm._showvmconfig">
|
||||
<button class="btn-link" ng-click="vm._showvmconfig = false">hide config</button>
|
||||
<pre><code ng-bind="vm.config | json">{{vm.config}}</code></pre>
|
||||
</div>
|
||||
</div>
|
||||
<br/>
|
||||
<br/>
|
||||
<br/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div ng-init="defaultsconf = vm.config.defaults">
|
||||
<h1>Fallback Settings:</h1>
|
||||
<br/>
|
||||
<div ng-repeat="path in siteconf.paths">
|
||||
<h2 ng-bind="path.$id"></h2>
|
||||
<div ng-repeat="module in path.modules">
|
||||
<h3>{{module.$id}}</h3>
|
||||
<div ng-repeat="(key, value) in module">
|
||||
<label>{{key}}</label>: <input class="form-control" ng-model="module[key]" />
|
||||
</div>
|
||||
</div>
|
||||
<br/>
|
||||
<br/>
|
||||
<br/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div ng-if="!vm._showvmconfig">
|
||||
<button class="btn-link" ng-click="vm._showvmconfig = true">show config as json</button>
|
||||
</div>
|
||||
<div ng-if="vm._showvmconfig">
|
||||
<button class="btn-link" ng-click="vm._showvmconfig = false">hide config</button>
|
||||
<pre><code ng-bind="vm.config | json">{{vm.config}}</code></pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
|
|
@ -70,6 +70,7 @@ angular.module('com.daplie.cloud', [ 'org.oauth3' ])
|
|||
vm.viewDomains = function (config, domains, dns) {
|
||||
vm.dns = dns.slice(0);
|
||||
vm.domains = domains.slice(0);
|
||||
vm.domains.sort(vm.sortDnsRecords);
|
||||
vm.dns = vm.dns.filter(function (record) {
|
||||
if (-1 === [ 'A', 'AAAA', 'ANAME' ].indexOf(record.type)) {
|
||||
return false;
|
||||
|
|
|
@ -1 +1 @@
|
|||
Subproject commit d64699977e883871246d3fc062a384e88a554e2a
|
||||
Subproject commit 64393a540d7cc60821aa1c541ef71101be418008
|
Loading…
Reference in New Issue