218 lines
16 KiB
HTML
218 lines
16 KiB
HTML
<!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" />
|
|
|
|
<title> Cloudron Domain Setup </title>
|
|
|
|
<link id="favicon" href="/api/v1/cloudron/avatar" rel="icon" type="image/png">
|
|
|
|
<!-- Theme CSS -->
|
|
<link type="text/css" rel="stylesheet" href="/theme.css">
|
|
|
|
<!-- Custom Fonts -->
|
|
<link type="text/css" rel="stylesheet" href="/3rdparty/css/font-awesome.min.css">
|
|
|
|
<!-- jQuery-->
|
|
<script type="text/javascript" src="/3rdparty/js/jquery.min.js"></script>
|
|
|
|
<!-- Bootstrap Core JavaScript -->
|
|
<script type="text/javascript" src="/3rdparty/js/bootstrap.min.js"></script>
|
|
|
|
<!-- 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-md5.min.js"></script>
|
|
<script type="text/javascript" src="/3rdparty/js/angular-ui-notification.min.js"></script>
|
|
<script type="text/javascript" src="/3rdparty/js/autofill-event.js"></script>
|
|
|
|
<!-- Angular directives for tldjs -->
|
|
<script type="text/javascript" src="/3rdparty/js/tld.js"></script>
|
|
|
|
<!-- 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>
|
|
|
|
<!-- Setup Application -->
|
|
<script type="text/javascript" src="/js/setupdns.js"></script>
|
|
|
|
</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">
|
|
<div class="col-md-6 col-md-offset-3">
|
|
<i class="fa fa-circle-o-notch fa-spin fa-5x"></i><br/>
|
|
<h3>Waiting for domain and certificate setup</h3>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<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-8 col-md-offset-2 text-center">
|
|
<h1>Cloudron Setup</h1>
|
|
<h3>Provide a domain for your Cloudron</h3>
|
|
<p>Apps will be installed on subdomains of this domain</p>
|
|
</div>
|
|
</div>
|
|
<div class="row">
|
|
<div class="col-md-8 col-md-offset-2">
|
|
<br/>
|
|
|
|
<div class="form-group" style="margin-bottom: 0;" ng-class="{ 'has-error': dnsCredentialsForm.domain.$dirty && dnsCredentialsForm.domain.$invalid }">
|
|
<label class="control-label">Primary Domain</label>
|
|
<input type="text" class="form-control" ng-model="dnsCredentials.domain" name="domain" placeholder="example.com" required autofocus ng-disabled="dnsCredentials.busy">
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<br/>
|
|
<div class="row">
|
|
<div class="col-md-8 col-md-offset-2">
|
|
<h3 class="text-center">Domain Configuration</h3>
|
|
<p class="has-error text-center" ng-show="dnsCredentials.error">{{ dnsCredentials.error }}</p>
|
|
|
|
<br/>
|
|
<div class="form-group">
|
|
<label class="control-label">Domain 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"></select>
|
|
</div>
|
|
|
|
<!-- Route53 -->
|
|
<div class="form-group" ng-class="{ 'has-error': dnsCredentialsForm.accessKeyId.$dirty && dnsCredentialsForm.accessKeyId.$invalid }" ng-show="dnsCredentials.provider === 'route53'">
|
|
<label class="control-label">Access Key Id</label>
|
|
<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'">
|
|
<label class="control-label">Secret Access Key</label>
|
|
<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'">
|
|
<label class="control-label">Service Account Key</label>
|
|
<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'">
|
|
<label class="control-label">DigitalOcean Token <sup><a href="https://www.digitalocean.com/community/tutorials/how-to-set-up-a-host-name-with-digitalocean#step-two%E2%80%94change-your-domain-server" class="help" target="_blank"><i class="fa fa-question-circle"></i></a></sup></label>
|
|
<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'">
|
|
<label class="control-label">Gandi API Key <sup><a href="http://doc.livedns.gandi.net/" class="help" target="_blank"><i class="fa fa-question-circle"></i></a></sup></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>
|
|
|
|
<!-- GoDaddy -->
|
|
<div class="form-group" ng-class="{ 'has-error': dnsCredentialsForm.godaddyApiKey.$dirty && dnsCredentialsForm.godaddyApiKey.$invalid }" ng-show="dnsCredentials.provider === 'godaddy'">
|
|
<label class="control-label">API Key <sup><a href="https://developer.godaddy.com/keys" class="help" target="_blank"><i class="fa fa-question-circle"></i></a></sup></label>
|
|
<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'">
|
|
<label class="control-label">API Secret</label>
|
|
<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>
|
|
|
|
<!-- Cloudflare -->
|
|
<div class="form-group" ng-class="{ 'has-error': dnsCredentialsForm.cloudflareToken.$dirty && dnsCredentialsForm.cloudflareToken.$invalid }" ng-show="dnsCredentials.provider === 'cloudflare'">
|
|
<label class="control-label">Global API Key</label>
|
|
<input type="text" class="form-control" ng-model="dnsCredentials.cloudflareToken" name="cloudflareToken" placeholder="Global API Key" ng-required="dnsCredentials.provider === 'cloudflare'" ng-disabled="dnsCredentials.busy">
|
|
</div>
|
|
<div class="form-group" ng-class="{ 'has-error': dnsCredentialsForm.cloudflareEmail.$dirty && dnsCredentialsForm.cloudflareEmail.$invalid }" ng-show="dnsCredentials.provider === 'cloudflare'">
|
|
<label class="control-label">Cloudflare Email</label>
|
|
<input type="email" class="form-control" ng-model="dnsCredentials.cloudflareEmail" name="cloudflareEmail" placeholder="Cloudflare Account Email" ng-required="dnsCredentials.provider === 'cloudflare'" ng-disabled="dnsCredentials.busy">
|
|
</div>
|
|
|
|
<!-- Name.com -->
|
|
<div class="form-group" ng-class="{ 'has-error': dnsCredentialsForm.nameComUsername.$dirty && dnsCredentialsForm.nameComUsername.$invalid }" ng-show="dnsCredentials.provider === 'namecom'">
|
|
<label class="control-label">Name.com Username</label>
|
|
<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'">
|
|
<label class="control-label">API Token <sup><a href="https://www.name.com/account/settings/api" class="help" target="_blank"><i class="fa fa-question-circle"></i></a></sup></label>
|
|
<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>
|
|
|
|
<!-- Wildcard -->
|
|
<p ng-show="dnsCredentials.provider === 'wildcard'">
|
|
<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 -->
|
|
<p ng-show="dnsCredentials.provider === 'manual'">
|
|
<span class="text-info">
|
|
Setup an A record for <b>my.{{ dnsCredentials.domain || 'example.com' }}</b> to this server's IP.<br/>
|
|
</span>
|
|
</p>
|
|
|
|
<div ng-show="provider === 'ami'">
|
|
<br/>
|
|
<h3>Owner verification</h3>
|
|
<p>Provide the EC2 instance id to verify you have access to this server.</p>
|
|
<div class="form-group" ng-class="{ 'has-error': dnsCredentialsForm.instanceId.$dirty && (dnsCredentialsForm.instanceId.$invalid || error) }">
|
|
<input type="text" class="form-control" ng-model="instanceId" id="inputInstanceId" name="instanceId" placeholder="AWS EC2 instance id" ng-maxlength="20" ng-minlength="10" ng-required="provider === 'ami'" autocomplete="off">
|
|
</div>
|
|
<p> <span ng-show="error" class="text-danger">{{ error }}</span></p>
|
|
</div>
|
|
|
|
<br/>
|
|
<div class="text-center">
|
|
<a href="" ng-click="dnsCredentials.advancedVisible = true" ng-hide="dnsCredentials.advancedVisible">Advanced settings...</a>
|
|
</div>
|
|
<div uib-collapse="!dnsCredentials.advancedVisible">
|
|
<div class="form-group">
|
|
<label class="control-label">Zone Name</label>
|
|
<input type="text" class="form-control" ng-model="dnsCredentials.zoneName" name="zoneName" placeholder="{{dnsCredentials.domain | zoneName}}" ng-disabled="dnsCredentials.busy">
|
|
</div>
|
|
|
|
<div class="form-group">
|
|
<label class="control-label">Certificate Provider</label>
|
|
<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>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<br/>
|
|
<br/>
|
|
|
|
<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-o-notch fa-spin" ng-show="dnsCredentials.busy"></i> Next</button>
|
|
</div>
|
|
</div>
|
|
<br/>
|
|
<div class="row">
|
|
<div class="col-md-12 text-center">
|
|
<small>You can setup a new Cloudron or restore from a backup in the next step</small>
|
|
</div>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<footer class="text-center">
|
|
<span class="text-muted">©2018 <a href="https://cloudron.io" target="_blank">Cloudron</a></span>
|
|
<span class="text-muted"><a href="https://twitter.com/cloudron_io" target="_blank">Twitter <i class="fa fa-twitter"></i></a></span>
|
|
<span class="text-muted"><a href="https://forum.cloudron.io" target="_blank">Forum <i class="fa fa-comments"></i></a></span>
|
|
</footer>
|
|
|
|
</body>
|
|
</html>
|