diff --git a/webadmin/src/views/certs.html b/webadmin/src/views/certs.html index 713e8b1a0..974ea9fe5 100644 --- a/webadmin/src/views/certs.html +++ b/webadmin/src/views/certs.html @@ -29,6 +29,12 @@ + +
+ + +
+
@@ -62,6 +68,10 @@ This domain must be hosted on AWS Route53.

+

+ This domain must be hosted on Google Cloud DNS. +

+

This domain must be hosted on DigitalOcean.

diff --git a/webadmin/src/views/certs.js b/webadmin/src/views/certs.js index 0783caeaf..c386c9fa6 100644 --- a/webadmin/src/views/certs.js +++ b/webadmin/src/views/certs.js @@ -9,6 +9,7 @@ angular.module('Application').controller('CertsController', ['$scope', '$locatio // keep in sync with setupdns.js $scope.dnsProvider = [ { name: 'AWS Route53', value: 'route53' }, + { name: 'Google Cloud DNS', value: 'gcdns' }, { name: 'Digital Ocean', value: 'digitalocean' }, { name: 'Cloudflare (DNS only)', value: 'cloudflare' }, { name: 'Wildcard', value: 'wildcard' }, @@ -43,6 +44,7 @@ angular.module('Application').controller('CertsController', ['$scope', '$locatio customDomain: '', accessKeyId: '', secretAccessKey: '', + gcdnsKey: '', digitalOceanToken: '', cloudflareToken: '', cloudflareEmail: '', @@ -130,6 +132,18 @@ angular.module('Application').controller('CertsController', ['$scope', '$locatio if (data.provider === 'route53') { data.accessKeyId = $scope.dnsCredentials.accessKeyId; data.secretAccessKey = $scope.dnsCredentials.secretAccessKey; + } else if (data.provider === 'gcdns'){ + var serviceAccountKey = JSON.parse($scope.dnsCredentials.gcdnsKey); + if(!serviceAccountKey) { + $scope.dnsCredentials.error = "Cannot parse Google Service Account Key"; + $scope.dnsCredentials.busy = false; + return; + } + data.projectId = serviceAccountKey.project_id; + data.credentials = { + client_email: serviceAccountKey.client_email, + private_key: serviceAccountKey.private_key + }; } else if (data.provider === 'digitalocean') { data.token = $scope.dnsCredentials.digitalOceanToken; } else if (data.provider === 'cloudflare') { @@ -178,6 +192,7 @@ angular.module('Application').controller('CertsController', ['$scope', '$locatio $scope.dnsCredentials.customDomain = ''; $scope.dnsCredentials.accessKeyId = ''; $scope.dnsCredentials.secretAccessKey = ''; + $scope.dnsCredentials.gcdnsKey = ''; $scope.dnsCredentials.digitalOceanToken = ''; $scope.dnsCredentials.cloudflareToken = ''; $scope.dnsCredentials.cloudflareEmail = ''; @@ -196,6 +211,7 @@ angular.module('Application').controller('CertsController', ['$scope', '$locatio $scope.dnsCredentials.customDomain = $scope.config.isCustomDomain ? $scope.config.fqdn : ''; $scope.dnsCredentials.accessKeyId = $scope.dnsConfig.accessKeyId; $scope.dnsCredentials.secretAccessKey = $scope.dnsConfig.secretAccessKey; + $scope.dnsCredentials.gcdnsKey = $scope.dnsConfig.provider === 'gcdns' ? JSON.stringify({"project_id": $scope.dnsConfig.projectId, "credentials": $scope.dnsConfig.credentials}) : ''; $scope.dnsCredentials.digitalOceanToken = $scope.dnsConfig.provider === 'digitalocean' ? $scope.dnsConfig.token : ''; $scope.dnsCredentials.cloudflareToken = $scope.dnsConfig.provider === 'cloudflare' ? $scope.dnsConfig.token : ''; $scope.dnsCredentials.cloudflareEmail = $scope.dnsConfig.email;