diff --git a/dashboard/src/components/DomainDialog.vue b/dashboard/src/components/DomainDialog.vue
index e7b16ad0a..0db20345f 100644
--- a/dashboard/src/components/DomainDialog.vue
+++ b/dashboard/src/components/DomainDialog.vue
@@ -21,30 +21,7 @@ const tlsProvider = ref('letsencrypt-prod-wildcard');
const showAdvanced = ref(false);
const customNameservers = ref(false);
-// we have to define all properties here which are used in the DomainProviderForm to keep reactivity alive
-const dnsConfig = ref({
- accessKeyId: '',
- accessKey: '',
- accessToken: '',
- apiKey: '',
- apikey: '',
- appSecret: '',
- apiPassword: '',
- apiSecret: '',
- consumerKey: '',
- credentials: { client_email: '', private_key: '' },
- customerNumber: '',
- defaultProxyStatus: false,
- email: '',
- endpoint: '',
- password: '',
- projectId: '',
- secretAccessKey: '',
- secretapikey: '',
- token: '',
- tokenType: '',
- username: '',
-});
+const dnsConfig = ref(DomainsModel.createEmptyConfig());
const isFormValid = ref(false);
function checkValidity() {
diff --git a/dashboard/src/components/DomainProviderForm.vue b/dashboard/src/components/DomainProviderForm.vue
index 8c0175542..dd35e3045 100644
--- a/dashboard/src/components/DomainProviderForm.vue
+++ b/dashboard/src/components/DomainProviderForm.vue
@@ -6,6 +6,7 @@ const t = i18n.t;
import { TextInput, FormGroup, Checkbox, SingleSelect } from 'pankow';
import { ENDPOINTS_OVH } from '../constants.js';
+import DomainsModel from '../models/DomainsModel.js';
defineProps({
domain: {
@@ -22,31 +23,6 @@ const provider = defineModel('provider');
const dnsConfig = defineModel('dnsConfig');
const tlsProvider = defineModel('tlsProvider');
-// 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 tlsProviders = [
{ name: 'Let\'s Encrypt Prod', value: 'letsencrypt-prod' },
{ name: 'Let\'s Encrypt Prod - Wildcard', value: 'letsencrypt-prod-wildcard' },
@@ -128,7 +104,7 @@ function onGcdnsFileInputChange(event) {
-
+
diff --git a/dashboard/src/models/DomainsModel.js b/dashboard/src/models/DomainsModel.js
index 989006484..d0170a420 100644
--- a/dashboard/src/models/DomainsModel.js
+++ b/dashboard/src/models/DomainsModel.js
@@ -2,6 +2,35 @@
import { fetcher } from 'pankow';
import { API_ORIGIN } from '../constants.js';
+const providers = [
+ { 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' }
+];
+
+function prettyProviderName(provider) {
+ const tmp = providers.find(p => provider === p.value);
+ return tmp ? tmp.name : provider;
+};
+
function filterForProvider(provider, config) {
let props = [];
switch (provider) {
@@ -66,6 +95,33 @@ function filterForProvider(provider, config) {
return ret;
}
+// creates an object with all potential properties for the UI forms to work with
+function createEmptyConfig() {
+ return {
+ accessKeyId: '',
+ accessKey: '',
+ accessToken: '',
+ apiKey: '',
+ apikey: '',
+ appSecret: '',
+ apiPassword: '',
+ apiSecret: '',
+ consumerKey: '',
+ credentials: { client_email: '', private_key: '' },
+ customerNumber: '',
+ defaultProxyStatus: false,
+ email: '',
+ endpoint: '',
+ password: '',
+ projectId: '',
+ secretAccessKey: '',
+ secretapikey: '',
+ token: '',
+ tokenType: '',
+ username: '',
+ };
+}
+
function create() {
const accessToken = localStorage.token;
@@ -190,4 +246,7 @@ function create() {
export default {
create,
+ createEmptyConfig,
+ prettyProviderName,
+ providers,
};
diff --git a/dashboard/src/views/DomainsView.vue b/dashboard/src/views/DomainsView.vue
index d75948990..cc21a98c6 100644
--- a/dashboard/src/views/DomainsView.vue
+++ b/dashboard/src/views/DomainsView.vue
@@ -25,33 +25,6 @@ const dashboardDomain = ref('');
const domainDialog = useTemplateRef('domainDialog');
const wellKnownDialog = useTemplateRef('wellKnownDialog');
-function prettyProviderName(domain) {
- switch (domain.provider) {
- case 'bunny': return 'Bunny';
- case 'route53': return 'AWS Route53';
- case 'cloudflare': return 'Cloudflare';
- case 'desec': return 'deSEC';
- case 'digitalocean': return 'DigitalOcean';
- case 'dnsimple': return 'dnsimple';
- case 'gandi': return 'Gandi LiveDNS';
- case 'hetzner': return 'Hetzner DNS';
- case 'inwx': return 'INWX';
- case 'linode': return 'Linode';
- case 'namecom': return 'Name.com';
- case 'namecheap': return 'Namecheap';
- case 'netcup': return 'Netcup';
- case 'ovh': return 'OVH';
- case 'gcdns': return 'Google Cloud';
- case 'godaddy': return 'GoDaddy';
- case 'vultr': return 'Vultr';
- case 'manual': return 'Manual';
- case 'porkbun': return 'Porkbun';
- case 'wildcard': return 'Wildcard';
- case 'noop': return 'No-op';
- default: return 'Unknown';
- }
-};
-
function onAdd () {
domainDialog.value.open(null);
}
@@ -141,7 +114,7 @@ onMounted(async () => {
- {{ prettyProviderName(domain) }}
+ {{ DomainsModel.prettyProviderName(domain.provider) }}