Files
cloudron-box/src/setupdns.html

284 lines
23 KiB
HTML
Raw Normal View History

2018-01-22 13:01:38 -08:00
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width, height=device-height" />
2018-06-04 21:06:44 -07:00
<title> Cloudron Domain Setup </title>
<link id="favicon" href="/api/v1/cloudron/avatar" rel="icon" type="image/png">
2018-01-22 13:01:38 -08:00
<!-- Theme CSS -->
<link type="text/css" rel="stylesheet" href="/theme.css">
2018-01-22 13:01:38 -08:00
<!-- Fontawesome -->
<link type="text/css" rel="stylesheet" href="/3rdparty/fontawesome/css/all.css?<%= revision %>"/>
2018-01-22 13:01:38 -08:00
<!-- jQuery-->
<script type="text/javascript" src="/3rdparty/js/jquery.min.js"></script>
2018-01-22 13:01:38 -08:00
2020-06-03 22:59:17 +02:00
<!-- async -->
<script type="text/javascript" src="/3rdparty/js/async-3.2.0.min.js"></script>
2018-01-22 13:01:38 -08:00
<!-- Bootstrap Core JavaScript -->
<script type="text/javascript" src="/3rdparty/js/bootstrap.min.js"></script>
2018-01-22 13:01:38 -08:00
<!-- Angularjs scripts -->
<script type="text/javascript" src="/3rdparty/js/angular.min.js"></script>
<script type="text/javascript" src="/3rdparty/js/angular-loader.min.js"></script>
<script type="text/javascript" src="/3rdparty/js/angular-cookies.min.js"></script>
<script type="text/javascript" src="/3rdparty/js/angular-md5.min.js"></script>
<script type="text/javascript" src="/3rdparty/js/angular-ui-notification.js"></script>
<script type="text/javascript" src="/3rdparty/js/autofill-event.js"></script>
2018-01-22 13:01:38 -08:00
<!-- Angular directives for tldjs -->
<script type="text/javascript" src="/3rdparty/js/tld.js"></script>
<script type="text/javascript" src="/3rdparty/js/clipboard.min.js"></script>
2018-01-22 13:01:38 -08:00
2018-05-15 15:46:24 -07:00
<!-- Angular directives for bootstrap https://angular-ui.github.io/bootstrap/ -->
<script type="text/javascript" src="/3rdparty/js/ui-bootstrap-tpls-1.3.3.min.js"></script>
<!-- Angular translate https://angular-translate.github.io/ -->
<script type="text/javascript" src="/3rdparty/js/angular-translate.min.js?<%= revision %>"></script>
<script type="text/javascript" src="/3rdparty/js/angular-translate-loader-static-files.min.js?<%= revision %>"></script>
<script type="text/javascript" src="/3rdparty/js/angular-translate-storage-cookie.min.js?<%= revision %>"></script>
<script type="text/javascript" src="/3rdparty/js/angular-translate-storage-local.min.js?<%= revision %>"></script>
<!-- Showdown (markdown converter) -->
<script type="text/javascript" src="/3rdparty/js/showdown-1.9.1.min.js?<%= revision %>"></script>
2018-01-22 13:01:38 -08:00
<!-- Setup Application -->
<script type="text/javascript" src="/js/setupdns.js"></script>
2018-01-22 13:01:38 -08:00
</head>
<body class="setup" ng-app="Application" ng-controller="SetupDNSController">
<div class="main-container ng-cloak text-center" ng-show="state === 'waitingForDnsSetup' || state === 'waitingForBox'">
<div class="row">
2020-06-16 10:40:46 -07:00
<div class="col-md-6 col-md-offset-3 text-center">
<i class="fa fa-circle-notch fa-spin fa-5x"></i><br/>
<h3>{{ message }} ...</h3>
<br/>
<br/>
2020-06-16 10:40:46 -07:00
<br/>
<br/>
2020-06-17 20:37:28 -07:00
<br/>
<br/>
<br/>
<br/>
<p>
2020-06-16 10:40:46 -07:00
Please wait while Cloudron is setting up the dashboard at my.{{dnsCredentials.domain}}.
You can follow the logs on the server at <code class="clipboard hand" data-clipboard-text="/home/yellowtent/platformdata/logs/box.log" uib-tooltip="{{ clipboardDone ? 'Copied' : 'Click to copy' }}" tooltip-placement="right">/home/yellowtent/platformdata/logs/box.log</code>
</p>
</div>
2018-01-22 13:01:38 -08:00
</div>
</div>
2018-01-22 13:01:38 -08:00
<div class="main-container ng-cloak" ng-show="state === 'initialized'">
<div class="row">
<div class="col-md-6 col-md-offset-3">
<div class="card" style="max-width: none; padding: 20px;">
<form name="dnsCredentialsForm" role="form" novalidate ng-submit="setDnsCredentials()" autocomplete="off">
<div class="row">
<div class="col-md-10 col-md-offset-1 text-center">
<h1>Domain Setup</h1>
<p class="has-error text-center" ng-show="error.setup">{{ error.setup }}</p>
</div>
2018-06-04 21:06:44 -07:00
</div>
<div class="row">
<div class="col-md-10 col-md-offset-1">
<div class="form-group" style="margin-bottom: 0;" ng-class="{ 'has-error': dnsCredentialsForm.domain.$dirty && dnsCredentialsForm.domain.$invalid }">
2020-09-09 10:08:13 -07:00
<label class="control-label">Domain <sup><a ng-href="https://docs.cloudron.io/installation/#domain-setup" class="help" target="_blank"><i class="fa fa-question-circle"></i></a></sup></label>
<input type="text" class="form-control" ng-model="dnsCredentials.domain" name="domain" placeholder="example.com" required autofocus ng-disabled="dnsCredentials.busy">
<p style="margin-top: 5px; font-size: 13px;">
2020-06-16 10:40:46 -07:00
Apps will be installed on subdomains of this domain. The dashboard will be available on the <b>my</b> subdomain. You can add more domains later.
</p>
2018-01-22 13:01:38 -08:00
</div>
</div>
2018-01-22 13:01:38 -08:00
</div>
<div class="row">
2018-07-29 19:45:52 -07:00
<div class="col-md-10 col-md-offset-1">
2020-09-09 10:08:13 -07:00
<h3 class="text-center">Domain Configuration <sup><a ng-href="https://docs.cloudron.io/domains/#dns-providers" class="help" target="_blank" tabindex="-1"><i class="fa fa-question-circle"></i></a></sup> </h3>
2019-05-22 11:10:41 -07:00
<p class="has-error text-center" ng-show="error.dnsCredentials">{{ error.dnsCredentials }}</p>
2018-01-22 13:01:38 -08:00
<div class="form-group">
2019-12-11 14:23:19 -08:00
<label class="control-label">DNS Provider</label>
<select class="form-control" ng-model="dnsCredentials.provider" ng-options="a.value as a.name for a in dnsProvider" ng-disabled="dnsCredentials.busy" ng-change="setDefaultTlsProvider()"></select>
2018-01-22 13:01:38 -08:00
</div>
<!-- Route53 -->
<div class="form-group" ng-class="{ 'has-error': dnsCredentialsForm.accessKeyId.$dirty && dnsCredentialsForm.accessKeyId.$invalid }" ng-show="dnsCredentials.provider === 'route53'">
2018-06-04 21:06:44 -07:00
<label class="control-label">Access Key Id</label>
2018-01-22 13:01:38 -08:00
<input type="text" class="form-control" ng-model="dnsCredentials.accessKeyId" name="accessKeyId" placeholder="Access Key Id" ng-minlength="16" ng-maxlength="32" ng-required="dnsCredentials.provider === 'route53'" ng-disabled="dnsCredentials.busy">
</div>
<div class="form-group" ng-class="{ 'has-error': dnsCredentialsForm.secretAccessKey.$dirty && dnsCredentialsForm.secretAccessKey.$invalid }" ng-show="dnsCredentials.provider === 'route53'">
2018-06-04 21:06:44 -07:00
<label class="control-label">Secret Access Key</label>
2018-01-22 13:01:38 -08:00
<input type="text" class="form-control" ng-model="dnsCredentials.secretAccessKey" name="secretAccessKey" placeholder="Secret Access Key" ng-required="dnsCredentials.provider === 'route53'" ng-disabled="dnsCredentials.busy">
</div>
<!-- Google Cloud DNS -->
<div class="form-group" ng-class="{ 'has-error': false }" ng-show="dnsCredentials.provider === 'gcdns'">
2018-06-04 21:06:44 -07:00
<label class="control-label">Service Account Key</label>
2018-01-22 13:01:38 -08:00
<div class="input-group">
<input type="file" id="gcdnsKeyFileInput" style="display:none"/>
<input type="text" class="form-control" placeholder="Service Account Key" ng-model="dnsCredentials.gcdnsKey.keyFileName" id="gcdnsKeyInput" name="cert" onclick="getElementById('gcdnsKeyFileInput').click();" style="cursor: pointer;" ng-required="dnsCredentials.provider === 'gcdns'" ng-disabled="dnsCredentials.busy">
<span class="input-group-addon">
<i class="fa fa-upload" onclick="getElementById('gcdnsKeyFileInput').click();"></i>
</span>
</div>
</div>
<!-- DigitalOcean -->
<div class="form-group" ng-class="{ 'has-error': dnsCredentialsForm.digitalOceanToken.$dirty && dnsCredentialsForm.digitalOceanToken.$invalid }" ng-show="dnsCredentials.provider === 'digitalocean'">
2019-02-06 15:53:01 -08:00
<label class="control-label">DigitalOcean Token</label>
2018-01-22 13:01:38 -08:00
<input type="text" class="form-control" ng-model="dnsCredentials.digitalOceanToken" name="digitalOceanToken" placeholder="API Token" ng-required="dnsCredentials.provider === 'digitalocean'" ng-disabled="dnsCredentials.busy">
</div>
<!-- Gandi -->
<div class="form-group" ng-class="{ 'has-error': dnsCredentialsForm.gandiApiKey.$dirty && dnsCredentialsForm.gandiApiKey.$invalid }" ng-show="dnsCredentials.provider === 'gandi'">
2019-02-06 15:53:01 -08:00
<label class="control-label">Gandi API Key</label>
<input type="text" class="form-control" ng-model="dnsCredentials.gandiApiKey" name="gandiApiKey" placeholder="API Key" ng-required="dnsCredentials.provider === 'gandi'" ng-disabled="dnsCredentials.busy">
</div>
2018-05-06 21:52:25 -07:00
<!-- GoDaddy -->
<div class="form-group" ng-class="{ 'has-error': dnsCredentialsForm.godaddyApiKey.$dirty && dnsCredentialsForm.godaddyApiKey.$invalid }" ng-show="dnsCredentials.provider === 'godaddy'">
2019-02-06 15:53:01 -08:00
<label class="control-label">API Key</label>
2018-05-06 21:52:25 -07:00
<input type="text" class="form-control" ng-model="dnsCredentials.godaddyApiKey" name="godaddyApiKey" placeholder="API Key" ng-minlength="1" ng-required="dnsCredentials.provider === 'godaddy'" ng-disabled="dnsCredentials.busy">
</div>
<div class="form-group" ng-class="{ 'has-error': dnsCredentialsForm.godaddyApiSecret.$dirty && dnsCredentialsForm.godaddyApiSecret.$invalid }" ng-show="dnsCredentials.provider === 'godaddy'">
2018-06-04 21:06:44 -07:00
<label class="control-label">API Secret</label>
2018-05-06 21:52:25 -07:00
<input type="text" class="form-control" ng-model="dnsCredentials.godaddyApiSecret" name="godaddyApiSecret" placeholder="API Secret" ng-required="dnsCredentials.provider === 'godaddy'" ng-disabled="dnsCredentials.busy">
</div>
2018-01-22 13:01:38 -08:00
<!-- Cloudflare -->
<div class="form-group" ng-class="{ 'has-error': dnsCredentialsForm.cloudflareToken.$dirty && dnsCredentialsForm.cloudflareToken.$invalid }" ng-show="dnsCredentials.provider === 'cloudflare'">
2020-01-01 16:02:50 -08:00
<label class="control-label">Token Type</label>
<select class="form-control" ng-model="dnsCredentials.cloudflareTokenType">
<option value="GlobalApiKey">Global API Key</option>
<option value="ApiToken">API Token</option>
</select>
</div>
<div class="form-group" ng-class="{ 'has-error': dnsCredentialsForm.cloudflareToken.$dirty && dnsCredentialsForm.cloudflareToken.$invalid }" ng-show="dnsCredentials.provider === 'cloudflare'">
<label class="control-label" ng-show="dnsCredentials.cloudflareTokenType === 'GlobalApiKey'">Global API Key</label>
<label class="control-label" ng-show="dnsCredentials.cloudflareTokenType === 'ApiToken'">Api Token</label>
<input type="text" class="form-control" ng-model="dnsCredentials.cloudflareToken" name="cloudflareToken" placeholder="API Key/Token" ng-required="dnsCredentials.provider === 'cloudflare'" ng-disabled="dnsCredentials.busy">
2018-01-22 13:01:38 -08:00
</div>
2020-01-01 16:02:50 -08:00
<div class="form-group" ng-class="{ 'has-error': dnsCredentialsForm.cloudflareEmail.$dirty && dnsCredentialsForm.cloudflareEmail.$invalid }" ng-show="dnsCredentials.provider === 'cloudflare' && dnsCredentials.cloudflareTokenType === 'GlobalApiKey'">
2018-06-04 21:06:44 -07:00
<label class="control-label">Cloudflare Email</label>
2020-01-01 16:02:50 -08:00
<input type="email" class="form-control" ng-model="dnsCredentials.cloudflareEmail" name="cloudflareEmail" placeholder="Cloudflare Account Email" ng-required="dnsCredentials.provider === 'cloudflare' && dnsCredentials.cloudflareTokenType === 'GlobalApiKey'" ng-disabled="dnsCredentials.busy">
2018-01-22 13:01:38 -08:00
</div>
2018-05-09 18:44:03 +02:00
<!-- Name.com -->
<div class="form-group" ng-class="{ 'has-error': dnsCredentialsForm.nameComUsername.$dirty && dnsCredentialsForm.nameComUsername.$invalid }" ng-show="dnsCredentials.provider === 'namecom'">
2018-06-04 21:06:44 -07:00
<label class="control-label">Name.com Username</label>
2018-05-09 18:44:03 +02:00
<input type="text" class="form-control" ng-model="dnsCredentials.nameComUsername" name="nameComUsername" placeholder="Name.com Username" ng-required="dnsCredentials.provider === 'namecom'" ng-disabled="dnsCredentials.busy">
</div>
<div class="form-group" ng-class="{ 'has-error': dnsCredentialsForm.nameComToken.$dirty && dnsCredentialsForm.nameComToken.$invalid }" ng-show="dnsCredentials.provider === 'namecom'">
2019-02-06 15:53:01 -08:00
<label class="control-label">API Token</label>
2018-05-09 18:44:03 +02:00
<input type="text" class="form-control" ng-model="dnsCredentials.nameComToken" name="nameComToken" placeholder="Name.com API Token" ng-required="dnsCredentials.provider === 'namecom'" ng-disabled="dnsCredentials.busy">
</div>
<!-- Namecheap -->
<div class="form-group" ng-class="{ 'has-error': dnsCredentialsForm.namecheapUsername.$dirty && dnsCredentialsForm.namecheapUsername.$invalid }" ng-show="dnsCredentials.provider === 'namecheap'">
<label class="control-label">Namecheap Username</label>
<input type="text" class="form-control" ng-model="dnsCredentials.namecheapUsername" name="namecheapUsername" placeholder="Namecheap Username" ng-required="dnsCredentials.provider === 'namecheap'" ng-disabled="dnsCredentials.busy">
</div>
<div class="form-group" ng-class="{ 'has-error': dnsCredentialsForm.namecheapApiKey.$dirty && dnsCredentialsForm.namecheapApiKey.$invalid }" ng-show="dnsCredentials.provider === 'namecheap'">
2019-02-06 15:53:01 -08:00
<label class="control-label">API Key</label>
2019-01-22 20:03:26 +01:00
<p class="small text-info" ng-show="dnsCredentials.provider === 'namecheap'"><b>The server IP needs to be whitelisted for this API Key.</b></p>
<input type="text" class="form-control" ng-model="dnsCredentials.namecheapApiKey" name="namecheapApiKey" placeholder="Namecheap API Key" ng-required="dnsCredentials.provider === 'namecheap'" ng-disabled="dnsCredentials.busy">
</div>
2020-03-12 17:13:21 -07:00
<!-- Linode -->
<p class="small text-warning" ng-show="dnsCredentials.provider === 'linode'">
2020-09-09 10:08:13 -07:00
<b>Linode DNS average <a target="_blank" ng-href="https://docs.cloudron.io/domains/#linode-dns">propagation time</a> is 30 minutes. Cloudron setup &amp; installing apps will take a while.</b>
2020-03-12 17:13:21 -07:00
</p>
2018-01-22 13:01:38 -08:00
<!-- Wildcard -->
2018-09-12 11:45:07 -07:00
<p class="small text-info" ng-show="dnsCredentials.provider === 'wildcard'">
2018-01-22 13:01:38 -08:00
<span>Setup A records for <b>*.{{ dnsCredentials.domain || 'example.com' }}</b> and <b>{{ dnsCredentials.domain || 'example.com' }}</b> to this server's IP.</span>
</p>
<!-- Manual -->
2018-09-12 11:45:07 -07:00
<p class="small text-info" ng-show="dnsCredentials.provider === 'manual'">
<span>Setup an A record for <b>my.{{ dnsCredentials.domain || 'example.com' }}</b> to this server's IP.<br/></span>
2018-01-22 13:01:38 -08:00
</p>
2018-06-04 20:49:18 -07:00
2019-12-11 14:10:32 -08:00
<p class="small text-info" ng-show="needsPort80(dnsCredentials.provider, dnsCredentials.tlsConfig.provider)">Let's Encrypt requires your server to be reachable on port 80</p>
2018-06-04 20:49:18 -07:00
<div ng-show="provider === 'ami'">
2019-12-11 14:10:32 -08:00
<h3 class="text-center">Owner verification</h3>
2019-12-11 15:05:30 -08:00
<p class="has-error text-center" ng-show="error.ami">{{ error.ami }}</p>
2019-12-11 14:10:32 -08:00
2019-12-11 14:23:19 -08:00
<div class="form-group" style="margin-bottom: 0;" ng-class="{ 'has-error': dnsCredentialsForm.instanceId.$dirty && (dnsCredentialsForm.instanceId.$invalid || error.ami) }">
2019-12-11 14:10:32 -08:00
<label class="control-label">EC2 Instance Id</label>
2019-12-11 15:05:30 -08:00
<input type="text" class="form-control" ng-model="instanceId" id="inputInstanceId" name="instanceId" placeholder="i-0123456789abcdefg" ng-minlength="1" ng-required="provider === 'ami'" autocomplete="off">
2018-06-04 20:49:18 -07:00
</div>
2019-12-11 14:10:32 -08:00
<p style="margin-top: 5px; font-size: 13px;">Provide the EC2 instance id to verify you have access to this server.</p>
2018-01-22 13:01:38 -08:00
</div>
2018-05-15 15:46:24 -07:00
2018-06-04 20:49:18 -07:00
<br/>
2019-11-11 11:07:52 -08:00
<div uib-collapse="!advancedVisible">
2018-06-04 20:49:18 -07:00
<div class="form-group">
2020-09-09 10:08:13 -07:00
<label class="control-label">Zone Name (Optional) <sup><a ng-href="https://docs.cloudron.io/domains/#zone-name" class="help" target="_blank"><i class="fa fa-question-circle"></i></a></sup></label>
2018-06-04 20:49:18 -07:00
<input type="text" class="form-control" ng-model="dnsCredentials.zoneName" name="zoneName" placeholder="{{dnsCredentials.domain | zoneName}}" ng-disabled="dnsCredentials.busy">
</div>
2018-05-15 15:46:24 -07:00
2018-06-04 20:49:18 -07:00
<div class="form-group">
2020-09-09 10:08:13 -07:00
<label class="control-label">Certificate Provider <sup><a ng-href="https://docs.cloudron.io/certificates/#certificate-providers" class="help" target="_blank"><i class="fa fa-question-circle"></i></a></sup></label>
2018-06-04 20:49:18 -07:00
<select class="form-control" ng-model="dnsCredentials.tlsConfig.provider" ng-options="a.value as a.name for a in tlsProvider" ng-disabled="dnsCredentials.busy"></select>
</div>
2019-11-11 11:07:52 -08:00
<div class="form-group">
2020-09-09 10:08:13 -07:00
<label class="control-label">IP Configuration <sup><a ng-href="https://docs.cloudron.io/networking/#ip-configuration" class="help" target="_blank"><i class="fa fa-question-circle"></i></a></sup></label>
2019-11-11 11:07:52 -08:00
<select class="form-control" ng-model="sysinfo.provider" ng-options="a.value as a.name for a in sysinfoProvider"></select>
</div>
<!-- Fixed -->
<div class="form-group" ng-show="sysinfo.provider === 'fixed'" ng-class="{ 'has-error': error.ip }">
<label class="control-label">IP Address</label>
<input type="text" class="form-control" ng-model="sysinfo.ip" name="ip" ng-disabled="sysinfo.busy" ng-required="sysinfo.provider === 'fixed'">
<p class="has-error" ng-show="error.ip">{{ error.ip }}</p>
</div>
<!-- Network Interface -->
<div class="form-group" ng-show="sysinfo.provider === 'network-interface'" ng-class="{ 'has-error': error.ifname }">
<label class="control-label">Interface Name</label>
<input type="text" class="form-control" ng-model="sysinfo.ifname" name="ifname" ng-disabled="sysinfo.busy" ng-required="sysinfo.provider === 'network-interface'">
<p class="has-error" ng-show="error.ifname">{{ error.ifname }}</p>
</div>
2018-06-04 20:49:18 -07:00
</div>
<div class="text-center">
2019-11-11 11:07:52 -08:00
<a href="" ng-click="advancedVisible = true" ng-hide="advancedVisible">Advanced settings...</a>
<a href="" ng-click="advancedVisible = false" ng-show="advancedVisible">Hide Advanced settings</a>
</div>
2018-05-15 15:46:24 -07:00
</div>
</div>
<br/>
2018-01-22 13:01:38 -08:00
<div class="row">
<div class="col-md-12 text-center">
<button type="submit" class="btn btn-primary" ng-disabled="dnsCredentialsForm.$invalid"><i class="fa fa-circle-notch fa-spin" ng-show="dnsCredentials.busy"></i> Next</button>
2018-01-22 13:01:38 -08:00
</div>
</div>
<br/>
<div class="row">
2019-07-26 22:34:29 -07:00
<div class="col-md-12 text-center"><small>Looking to <a href="/restore.html">restore?</a></small></div>
2018-01-22 13:01:38 -08:00
</div>
</form>
</div>
</div>
</div>
</div>
<footer class="text-center">
2020-01-02 16:56:42 -08:00
<span class="text-muted">&copy;2020 <a href="https://cloudron.io" target="_blank">Cloudron</a></span>
2018-02-23 15:53:23 -08:00
<span class="text-muted"><a href="https://forum.cloudron.io" target="_blank">Forum <i class="fa fa-comments"></i></a></span>
2018-01-22 13:01:38 -08:00
</footer>
</body>
</html>