diff --git a/dashboard/src/components/DomainDialog.vue b/dashboard/src/components/DomainDialog.vue
index 3680547b5..c598d16c2 100644
--- a/dashboard/src/components/DomainDialog.vue
+++ b/dashboard/src/components/DomainDialog.vue
@@ -2,8 +2,8 @@
import { ref, useTemplateRef } from 'vue';
import { Dialog, TextInput, FormGroup, Checkbox } from 'pankow';
-import { ENDPOINTS_OVH } from '../constants.js';
import DomainsModel from '../models/DomainsModel.js';
+import DomainProviderForm from './DomainProviderForm.vue';
const emit = defineEmits([ 'success' ]);
@@ -18,31 +18,6 @@ const domainsModel = DomainsModel.create();
{ name: 'Custom Wildcard Certificate', value: 'fallback' },
];
-// keep in sync with setup.js
-const domainProviders = [
- { name: 'AWS Route53', value: 'route53' },
- { name: 'Bunny', value: 'bunny' },
- { name: 'Cloudflare', value: 'cloudflare' },
- { name: 'deSEC', value: 'desec' },
- { name: 'DigitalOcean', value: 'digitalocean' },
- { name: 'DNSimple', value: 'dnsimple' },
- { name: 'Gandi LiveDNS', value: 'gandi' },
- { name: 'GoDaddy', value: 'godaddy' },
- { name: 'Google Cloud DNS', value: 'gcdns' },
- { name: 'Hetzner', value: 'hetzner' },
- { name: 'INWX', value: 'inwx' },
- { name: 'Linode', value: 'linode' },
- { name: 'Name.com', value: 'namecom' },
- { name: 'Namecheap', value: 'namecheap' },
- { name: 'Netcup', value: 'netcup' },
- { name: 'OVH', value: 'ovh' },
- { name: 'Porkbun', value: 'porkbun' },
- { name: 'Vultr', value: 'vultr' },
- { name: 'Wildcard', value: 'wildcard' },
- { name: 'Manual (not recommended)', value: 'manual' },
- { name: 'No-op (only for development)', value: 'noop' }
-];
-
const dialog = useTemplateRef('dialog');
const busy = ref(false);
@@ -54,58 +29,8 @@ const provider = ref('');
const tlsProvider = ref('letsencrypt-prod-wildcard');
const showAdvanced = ref(false);
const customNameservers = ref(false);
-
-const accessKeyId = ref('');
-const secretAccessKey = ref('');
-const digitalOceanToken = ref('');
-const gandiTokenType = ref('ApiKey');
-const gandiApiKey = ref('');
-const godaddyApiKey = ref('');
-const godaddyApiSecret = ref('');
-// user just uploads a ServiceAccount.json which we then open and assign
-const gcdnsProjectId = ref('');
-const gcdnsClientEmail = ref('');
-const gcdnsPrivateKey = ref('');
-const netcupCustomerNumber = ref('');
-const netcupApiKey = ref('');
-const netcupApiPassword = ref('');
-const ovhEndpoint = ref(ENDPOINTS_OVH[0].value);
-const ovhConsumerKey = ref('');
-const ovhAppKey = ref('');
-const ovhAppSecret = ref('');
-const porkbunSecretapikey = ref('');
-const porkbunApikey = ref('');
-const cloudflareTokenType = ref('ApiToken');
-const cloudflareToken = ref('');
-const cloudflareEmail = ref('');
-const cloudflareDefaultProxyStatus = ref(false);
-const linodeToken = ref('');
-const bunnyAccessKey = ref('');
-const dnsimpleAccessToken = ref('');
-const hetznerToken = ref('');
-const vultrToken = ref('');
-const deSecToken = ref('');
-const nameComUsername = ref('');
-const nameComToken = ref('');
-const namecheapUsername = ref('');
-const namecheapApiKey = ref('');
-const inwxUsername = ref('');
-const inwxPassword = ref('');
-
-function needsPort80(dnsProvider, tlsProvider) {
- return ((dnsProvider === 'manual' || dnsProvider === 'noop' || dnsProvider === 'wildcard') &&
- (tlsProvider === 'letsencrypt-prod' || tlsProvider === 'letsencrypt-staging'));
-}
-
-function setDefaultTlsProvider() {
- const dnsProvider = provider.value;
- // wildcard LE won't work without automated DNS
- if (dnsProvider === 'manual' || dnsProvider === 'noop' || dnsProvider === 'wildcard') {
- tlsProvider.value = 'letsencrypt-prod';
- } else {
- tlsProvider.value = 'letsencrypt-prod-wildcard';
- }
-}
+const dnsConfig = ref({});
+const tlsConfig = ref({});
const isFormValid = ref(false);
function checkValidity() {
@@ -119,66 +44,8 @@ async function onSubmit() {
busy.value = true;
errorMessage.value = '';
- const config = {
- customNameservers: customNameservers.value
- };
-
- if (provider.value === 'route53') {
- config.accessKeyId = accessKeyId.value;
- config.secretAccessKey = secretAccessKey.value;
- } else if (provider.value === 'gcdns') {
- config.projectId = gcdnsProjectId.value;
- config.credentials = {
- client_email: gcdnsClientEmail.value,
- private_key: gcdnsPrivateKey.value
- };
- } else if (provider.value === 'digitalocean') {
- config.token = digitalOceanToken.value;
- } else if (provider.value === 'linode') {
- config.token = linodeToken.value;
- } else if (provider.value === 'bunny') {
- config.accessKey = bunnyAccessKey.value;
- } else if (provider.value === 'dnsimple') {
- config.accessToken = dnsimpleAccessToken.value;
- } else if (provider.value === 'hetzner') {
- config.token = hetznerToken.value;
- } else if (provider.value === 'vultr') {
- config.token = vultrToken.value;
- } else if (provider.value === 'desec') {
- config.token = deSecToken.value;
- } else if (provider.value === 'gandi') {
- config.token = gandiApiKey.value;
- config.tokenType = gandiTokenType.value;
- } else if (provider.value === 'godaddy') {
- config.apiKey = godaddyApiKey.value;
- config.apiSecret = godaddyApiSecret.value;
- } else if (provider.value === 'cloudflare') {
- config.token = cloudflareToken.value;
- config.email = cloudflareEmail.value;
- config.tokenType = cloudflareTokenType.value;
- config.defaultProxyStatus = cloudflareDefaultProxyStatus.value;
- } else if (provider.value === 'namecom') {
- config.token = nameComToken.value;
- config.username = nameComUsername.value;
- } else if (provider.value === 'namecheap') {
- config.token = namecheapApiKey.value;
- config.username = namecheapUsername.value;
- } else if (provider.value === 'inwx') {
- config.username = inwxUsername.value;
- config.password = inwxPassword.value;
- } else if (provider.value === 'netcup') {
- config.customerNumber = netcupCustomerNumber.value;
- config.apiKey = netcupApiKey.value;
- config.apiPassword = netcupApiPassword.value;
- } else if (provider.value === 'ovh') {
- config.endpoint = ovhEndpoint.value;
- config.consumerKey = ovhConsumerKey.value;
- config.appKey = ovhAppKey.value;
- config.appSecret = ovhAppSecret.value;
- } else if (provider.value === 'porkbun') {
- config.apikey = porkbunApikey.value;
- config.secretapikey = porkbunSecretapikey.value;
- }
+ const config = dnsConfig.value;
+ config.customNameservers = customNameservers.value;
const tlsConfig = {
provider: tlsProvider.value,
@@ -203,70 +70,24 @@ async function onSubmit() {
dialog.value.close();
}
-function onGcdnsFileInputChange(event) {
- const reader = new FileReader();
- reader.onload = function (result) {
- if (!result.target || !result.target.result) return console.error('Unable to read local file');
- const serviceAccount = JSON.parse(result.target.result);
- gcdnsProjectId.value = serviceAccount.project_id;
- gcdnsClientEmail.value = serviceAccount.client_email;
- gcdnsPrivateKey.value = serviceAccount.private_key;
- };
- reader.readAsText(event.target.files[0]);
-}
-
defineExpose({
open(d) {
d = d || { config: {}, tlsConfig: {}};
+ provider.value = d.provider || '';
+ dnsConfig.value = d.config;
+ tlsProvider.value = d.tlsConfig.provider || 'letsencrypt-prod-wildcard';
+ tlsConfig.value = d.tlsConfig;
+
busy.value = false;
showAdvanced.value = false;
errorMessage.value = '';
editing.value = !!d.domain;
domain.value = d.domain || '';
zoneName.value = d.zoneName || '';
- provider.value = d.provider || '';
- tlsProvider.value = d.tlsConfig.provider || 'letsencrypt-prod-wildcard';
customNameservers.value = d.config.customNameservers;
- gcdnsProjectId.value = (d.provider === 'gcdns' && d.config.projectId) || '';
- gcdnsClientEmail.value = (d.provider === 'gcdns' && d.config?.credentials.client_email) || '';
- gcdnsPrivateKey.value = (d.provider === 'gcdns' && d.config?.credentials.private_key) || '';
-
- accessKeyId.value = (d.provider === 'route53' && d.config.accessKeyId) || '';
- secretAccessKey.value = (d.provider === 'route53' && d.config.secretAccessKey) || '';
- digitalOceanToken.value = (d.provider === 'digitalocean' && d.config.token) || '';
- gandiTokenType.value = (d.provider === 'gandi' && d.config.tokenType) || 'ApiKey';
- gandiApiKey.value = (d.provider === 'gandi' && d.config.token) || '';
- godaddyApiKey.value = (d.provider === 'godaddy' && d.config.apiKey) || '';
- godaddyApiSecret.value = (d.provider === 'godaddy' && d.config.apiSecret) || '';
- netcupCustomerNumber.value = (d.provider === 'netcup' && d.config.customerNumber) || '';
- netcupApiKey.value = (d.provider === 'netcup' && d.config.apiKey) || '';
- netcupApiPassword.value = (d.provider === 'netcup' && d.config.apiPassword) || '';
- ovhEndpoint.value = (d.provider === 'ovh' && d.config.endpoint) || ENDPOINTS_OVH[0].value;
- ovhConsumerKey.value = (d.provider === 'ovh' && d.config.consumerKey) || '';
- ovhAppKey.value = (d.provider === 'ovh' && d.config.appKey) || '';
- ovhAppSecret.value = (d.provider === 'ovh' && d.config.appSecret) || '';
- porkbunSecretapikey.value = (d.provider === 'porkbun' && d.config.secretapikey) || '';
- porkbunApikey.value = (d.provider === 'porkbun' && d.config.apikey) || '';
- cloudflareTokenType.value = (d.provider === 'cloudflare' && d.config.tokenType) || 'ApiToken';
- cloudflareToken.value = (d.provider === 'cloudflare' && d.config.token) || '';
- cloudflareEmail.value = (d.provider === 'cloudflare' && d.config.email) || '';
- cloudflareDefaultProxyStatus.value = d.provider === 'cloudflare' ? d.config.defaultProxyStatus : false;
- linodeToken.value = (d.provider === 'linode' && d.config.token) || '';
- bunnyAccessKey.value = (d.provider === 'bunny' && d.config.accessKey) || '';
- dnsimpleAccessToken.value = (d.provider === 'dnsimple' && d.config.accessToken) || '';
- hetznerToken.value = (d.provider === 'hetzner' && d.config.token) || '';
- vultrToken.value = (d.provider === 'vultr' && d.config.token) || '';
- deSecToken.value = (d.provider === 'desec' && d.config.token) || '';
- nameComUsername.value = (d.provider === 'namecom' && d.config.username) || '';
- nameComToken.value = (d.provider === 'namecom' && d.config.token) || '';
- namecheapUsername.value = (d.provider === 'namecheap' && d.config.username) || '';
- namecheapApiKey.value = (d.provider === 'namecheap' && d.config.token) || '';
- inwxUsername.value = (d.provider === 'inwx' && d.config.username) || '';
- inwxPassword.value = (d.provider === 'inwx' && d.config.password) || '';
-
dialog.value.open();
}
});
@@ -297,200 +118,7 @@ defineExpose({
{{ $t('domains.domainDialog.advancedAction') }}