2015-07-20 00:09:47 -07: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" / >
< title > Cloudron Setup < / title >
2015-08-25 21:59:01 -07:00
<!-- Theme CSS -->
< link href = "theme.css" rel = "stylesheet" >
2015-07-20 00:09:47 -07:00
<!-- Custom Fonts -->
< link href = "//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css" rel = "stylesheet" type = "text/css" >
<!-- jQuery -->
< script src = "3rdparty/js/jquery.min.js" > < / script >
<!-- Bootstrap Core JavaScript -->
< script src = "3rdparty/js/bootstrap.min.js" > < / script >
<!-- Angularjs scripts -->
< script src = "3rdparty/js/angular.min.js" > < / script >
< script src = "3rdparty/js/angular-loader.min.js" > < / script >
< script src = "3rdparty/js/angular-md5.min.js" > < / script >
< script src = "3rdparty/js/angular-ui-notification.min.js" > < / script >
< script src = "3rdparty/js/autofill-event.js" > < / script >
<!-- Setup Application -->
< script src = "js/setup.js" > < / script >
< / head >
< body class = "setup" ng-app = "Application" ng-controller = "SetupController" >
2017-01-04 13:37:44 +01:00
< center class = "ng-cloak" ng-show = "provider === 'caas' && !setupToken" >
2015-07-20 00:09:47 -07:00
< h1 > < i class = "fa fa-frown-o fa-fw text-danger" > < / i > No setup token provided. < / h1 >
Please use the setup link for this cloudron.
< / center >
2017-01-04 15:06:15 +01:00
< div class = "main-container ng-cloak" ng-show = "initialized" >
2017-01-04 13:23:39 +01:00
< div class = "row" >
< div class = "col-md-6 col-md-offset-3" >
2015-07-20 00:09:47 -07:00
< div class = "card" style = "max-width: none; padding: 20px;" >
2017-01-04 13:23:39 +01:00
< div ng-show = "busy" >
< i class = "fa fa-spinner fa-pulse fa-5x" > < / i >
< / div >
< div ng-show = "!showDNSSetup && !busy" >
< form role = "form" name = "setupForm" ng-submit = "activateCloudron()" novalidate >
< div class = "row" >
< div class = "col-md-12 text-center" >
< h1 > Welcome to your Cloudron< / h1 >
< h3 > Create an Admin Account< / h3 >
< / div >
< / div >
< div class = "row" >
< div class = "col-md-4 col-md-offset-4 text-center" >
< div class = "form-group" ng-class = "{ 'has-error': setupForm.displayName.$dirty && setupForm.displayName.$invalid }" >
< input type = "text" class = "form-control" ng-model = "account.displayName" id = "inputDisplayName" name = "displayName" placeholder = "Display Name" required autocomplete = "off" autofocus >
< / div >
< div ng-show = "account.requireEmail" class = "form-group" ng-class = "{ 'has-error': setupForm.email.$dirty && setupForm.email.$invalid }" >
< input type = "email" class = "form-control" ng-model = "account.email" id = "inputEmail" name = "email" placeholder = "Email" required autocomplete = "off" >
< / div >
< div class = "form-group" ng-class = "{ 'has-error': setupForm.username.$dirty && setupForm.username.$invalid }" >
< input type = "text" class = "form-control" ng-model = "account.username" id = "inputUsername" name = "username" placeholder = "Username" ng-maxlength = "512" ng-minlength = "3" required autocomplete = "off" >
< / div >
< div class = "form-group" ng-class = "{ 'has-error': setupForm.password.$dirty && setupForm.password.$invalid }" >
< input type = "password" class = "form-control" ng-model = "account.password" id = "inputPassword" name = "password" placeholder = "Password" ng-pattern = "/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[^a-zA-Z0-9])(?!.*\s).{8,30}$/" required autocomplete = "off" >
< div class = "control-label" ng-show = "setupForm.password.$dirty && setupForm.password.$invalid" >
< small ng-show = "setupForm.password.$dirty && setupForm.password.$invalid" > Password must be 8-30 character with at least one uppercase, one numeric and one special character< / small >
< / div >
< / div >
< / div >
< / div >
< div class = "row" ng-hide = "provider === 'caas'" >
< div class = "col-md-12 text-center" >
< div class = "form-group" >
< div class = "checkbox" >
< label >
< input type = "checkbox" ng-model = "createAppstoreAccount" > Create < a href = "https://cloudron.io" target = "_blank" > Cloudron Store< / a > account
< / label >
< / div >
< / div >
< / div >
< / div >
< div class = "row" >
< div class = "col-md-12 text-center" >
2017-01-04 15:06:15 +01:00
< input type = "submit" class = "btn btn-primary" ng-hide = "provider === 'caas'" ng-disabled = "setupForm.$invalid" value = "Next" >
< input type = "submit" class = "btn btn-primary" ng-show = "provider === 'caas'" ng-disabled = "setupForm.$invalid" value = "Done" >
2017-01-04 13:23:39 +01:00
< / div >
< / div >
< / form >
< / div >
< div ng-show = "showDNSSetup && !busy" >
2017-01-04 15:06:15 +01:00
< form name = "dnsCredentialsForm" role = "form" novalidate ng-submit = "setDnsCredentials()" autocomplete = "off" >
< div class = "row" >
< div class = "col-md-12 text-center" >
< h1 > Domain Setup< / h1 >
< h3 > Specify the domain for your Cloudron< / h3 >
< p > Apps will be installed on subdomains of that domain.< / p >
< / div >
< / div >
< div class = "row" >
< div class = "col-md-4 col-md-offset-4 text-center" >
< p class = "has-error text-center" ng-show = "dnsCredentials.error" > {{ dnsCredentials.error }}< / p >
2017-01-04 15:45:00 +01:00
< div class = "form-group" ng-class = "{ 'has-error': dnsCredentialsForm.domain.$dirty && dnsCredentialsForm.domain.$invalid }" >
2017-01-04 15:06:15 +01:00
< input type = "text" class = "form-control" ng-model = "dnsCredentials.domain" name = "domain" ng-minlength = "4" ng-maxlength = "128" placeholder = "example.com" required autofocus >
< / div >
< div class = "form-group" ng-show = "dnsConfig.provider !== 'caas'" >
< label class = "control-label" > DNS API Provider< / label >
< select class = "form-control" ng-model = "dnsCredentials.provider" ng-options = "a.value as a.name for a in dnsProvider" >
< / select >
< / div >
<!-- Route53 -->
2017-01-04 15:45:00 +01:00
< div class = "form-group" ng-class = "{ 'has-error': dnsCredentialsForm.accessKeyId.$dirty && dnsCredentialsForm.accessKeyId.$invalid }" ng-show = "dnsCredentials.provider === 'route53'" >
2017-01-04 15:06:15 +01:00
< label class = "control-label" > Access Key Id< / label >
< input type = "text" class = "form-control" ng-model = "dnsCredentials.accessKeyId" name = "accessKeyId" ng-minlength = "16" ng-maxlength = "32" ng-required = "dnsCredentials.provider === 'route53'" >
< / div >
2017-01-04 15:45:00 +01:00
< div class = "form-group" ng-class = "{ 'has-error': dnsCredentialsForm.secretAccessKey.$dirty && dnsCredentialsForm.secretAccessKey.$invalid }" ng-show = "dnsCredentials.provider === 'route53'" >
2017-01-04 15:06:15 +01:00
< label class = "control-label" > Secret Access Key< / label >
< input type = "text" class = "form-control" ng-model = "dnsCredentials.secretAccessKey" name = "secretAccessKey" ng-required = "dnsCredentials.provider === 'route53'" >
< / div >
<!-- DigitalOcean -->
2017-01-04 15:45:00 +01:00
< div class = "form-group" ng-class = "{ 'has-error': dnsCredentialsForm.digitalOceanToken.$dirty && dnsCredentialsForm.digitalOceanToken.$invalid }" ng-show = "dnsCredentials.provider === 'digitalocean'" >
2017-01-04 15:06:15 +01:00
< label class = "control-label" > API Token< / label >
< input type = "text" class = "form-control" ng-model = "dnsCredentials.digitalOceanToken" name = "digitalOceanToken" ng-required = "dnsCredentials.provider === 'digitalocean'" >
< / div >
< / div >
< / div >
< div class = "row" >
< div class = "col-md-12 text-center" >
< input type = "submit" class = "btn btn-primary" ng-disabled = "dnsCredentialsForm.$invalid" value = "Done" / >
< / div >
< / div >
< / form >
2017-01-04 13:23:39 +01:00
< / div >
2015-07-20 00:09:47 -07:00
< / div >
< / div >
< / div >
< / div >
< / body >
< / html >