@@ -3,6 +3,8 @@ const Mn = require('backbone.marionette');
3
3
const App = require ( '../../main' ) ;
4
4
const CertificateModel = require ( '../../../models/certificate' ) ;
5
5
const template = require ( './form.ejs' ) ;
6
+ const i18n = require ( '../../i18n' ) ;
7
+ const dns_providers = require ( '../../../../../utils/certbot-dns-plugins' ) ;
6
8
7
9
require ( 'jquery-serializejson' ) ;
8
10
require ( 'selectize' ) ;
@@ -21,25 +23,46 @@ module.exports = Mn.View.extend({
21
23
other_certificate : '#other_certificate' ,
22
24
other_certificate_label : '#other_certificate_label' ,
23
25
other_certificate_key : '#other_certificate_key' ,
24
- cloudflare_switch : 'input[name="meta[cloudflare_use]"]' ,
25
- cloudflare_token : 'input[name="meta[cloudflare_token]"' ,
26
- cloudflare : '.cloudflare' ,
26
+ dns_challenge_switch : 'input[name="meta[dns_challenge]"]' ,
27
+ dns_challenge_content : '.dns-challenge' ,
28
+ dns_provider : 'select[name="meta[dns_provider]"]' ,
29
+ credentials_file_content : '.credentials-file-content' ,
30
+ dns_provider_credentials : 'textarea[name="meta[dns_provider_credentials]"]' ,
31
+ propagation_seconds : 'input[name="meta[propagation_seconds]"]' ,
27
32
other_certificate_key_label : '#other_certificate_key_label' ,
28
33
other_intermediate_certificate : '#other_intermediate_certificate' ,
29
34
other_intermediate_certificate_label : '#other_intermediate_certificate_label'
30
35
} ,
31
36
32
37
events : {
33
- 'change @ui.cloudflare_switch' : function ( ) {
34
- let checked = this . ui . cloudflare_switch . prop ( 'checked' ) ;
35
- if ( checked ) {
36
- this . ui . cloudflare_token . prop ( 'required' , 'required' ) ;
37
- this . ui . cloudflare . show ( ) ;
38
- } else {
39
- this . ui . cloudflare_token . prop ( 'required' , false ) ;
40
- this . ui . cloudflare . hide ( ) ;
38
+ 'change @ui.dns_challenge_switch' : function ( ) {
39
+ const checked = this . ui . dns_challenge_switch . prop ( 'checked' ) ;
40
+ if ( checked ) {
41
+ this . ui . dns_provider . prop ( 'required' , 'required' ) ;
42
+ const selected_provider = this . ui . dns_provider [ 0 ] . options [ this . ui . dns_provider [ 0 ] . selectedIndex ] . value ;
43
+ if ( selected_provider != '' && dns_providers [ selected_provider ] . credentials !== false ) {
44
+ this . ui . dns_provider_credentials . prop ( 'required' , 'required' ) ;
45
+ }
46
+ this . ui . dns_challenge_content . show ( ) ;
47
+ } else {
48
+ this . ui . dns_provider . prop ( 'required' , false ) ;
49
+ this . ui . dns_provider_credentials . prop ( 'required' , false ) ;
50
+ this . ui . dns_challenge_content . hide ( ) ;
51
+ }
52
+ } ,
53
+
54
+ 'change @ui.dns_provider' : function ( ) {
55
+ const selected_provider = this . ui . dns_provider [ 0 ] . options [ this . ui . dns_provider [ 0 ] . selectedIndex ] . value ;
56
+ if ( selected_provider != '' && dns_providers [ selected_provider ] . credentials !== false ) {
57
+ this . ui . dns_provider_credentials . prop ( 'required' , 'required' ) ;
58
+ this . ui . dns_provider_credentials [ 0 ] . value = dns_providers [ selected_provider ] . credentials ;
59
+ this . ui . credentials_file_content . show ( ) ;
60
+ } else {
61
+ this . ui . dns_provider_credentials . prop ( 'required' , false ) ;
62
+ this . ui . credentials_file_content . hide ( ) ;
41
63
}
42
64
} ,
65
+
43
66
'click @ui.save' : function ( e ) {
44
67
e . preventDefault ( ) ;
45
68
@@ -56,7 +79,7 @@ module.exports = Mn.View.extend({
56
79
57
80
58
81
let domain_err = false ;
59
- if ( ! data . meta . cloudflare_use ) {
82
+ if ( ! data . meta . dns_challenge ) {
60
83
data . domain_names . split ( ',' ) . map ( function ( name ) {
61
84
if ( name . match ( / \* / im) ) {
62
85
domain_err = true ;
@@ -65,16 +88,17 @@ module.exports = Mn.View.extend({
65
88
}
66
89
67
90
if ( domain_err ) {
68
- alert ( 'Cannot request Let\'s Encrypt Certificate for wildcard domains when not using CloudFlare DNS' ) ;
91
+ alert ( i18n ( 'ssl' , 'no- wildcard-without-dns' ) ) ;
69
92
return ;
70
93
}
71
94
72
95
// Manipulate
73
96
if ( typeof data . meta !== 'undefined' && typeof data . meta . letsencrypt_agree !== 'undefined' ) {
74
97
data . meta . letsencrypt_agree = ! ! data . meta . letsencrypt_agree ;
75
98
}
76
- if ( typeof data . meta !== 'undefined' && typeof data . meta . cloudflare_use !== 'undefined' ) {
77
- data . meta . cloudflare_use = ! ! data . meta . cloudflare_use ;
99
+
100
+ if ( typeof data . meta !== 'undefined' && typeof data . meta . dns_challenge !== 'undefined' ) {
101
+ data . meta . dns_challenge = ! ! data . meta . dns_challenge ;
78
102
}
79
103
80
104
if ( typeof data . domain_names === 'string' && data . domain_names ) {
@@ -176,14 +200,22 @@ module.exports = Mn.View.extend({
176
200
getLetsencryptEmail : function ( ) {
177
201
return typeof this . meta . letsencrypt_email !== 'undefined' ? this . meta . letsencrypt_email : App . Cache . User . get ( 'email' ) ;
178
202
} ,
179
-
180
203
getLetsencryptAgree : function ( ) {
181
204
return typeof this . meta . letsencrypt_agree !== 'undefined' ? this . meta . letsencrypt_agree : false ;
182
205
} ,
183
-
184
- getCloudflareUse : function ( ) {
185
- return typeof this . meta . cloudflare_use !== 'undefined' ? this . meta . cloudflare_use : false ;
186
- }
206
+ getUseDnsChallenge : function ( ) {
207
+ return typeof this . meta . dns_challenge !== 'undefined' ? this . meta . dns_challenge : false ;
208
+ } ,
209
+ getDnsProvider : function ( ) {
210
+ return typeof this . meta . dns_provider !== 'undefined' && this . meta . dns_provider != '' ? this . meta . dns_provider : null ;
211
+ } ,
212
+ getDnsProviderCredentials : function ( ) {
213
+ return typeof this . meta . dns_provider_credentials !== 'undefined' ? this . meta . dns_provider_credentials : '' ;
214
+ } ,
215
+ getPropagationSeconds : function ( ) {
216
+ return typeof this . meta . propagation_seconds !== 'undefined' ? this . meta . propagation_seconds : '' ;
217
+ } ,
218
+ dns_plugins : dns_providers ,
187
219
} ,
188
220
189
221
onRender : function ( ) {
@@ -199,7 +231,8 @@ module.exports = Mn.View.extend({
199
231
} ,
200
232
createFilter : / ^ (?: [ ^ . ] + \. ? ) + [ ^ . ] $ /
201
233
} ) ;
202
- this . ui . cloudflare . hide ( ) ;
234
+ this . ui . dns_challenge_content . hide ( ) ;
235
+ this . ui . credentials_file_content . hide ( ) ;
203
236
} ,
204
237
205
238
initialize : function ( options ) {
0 commit comments