@@ -3,6 +3,8 @@ const Mn = require('backbone.marionette');
33const App = require ( '../../main' ) ;
44const CertificateModel = require ( '../../../models/certificate' ) ;
55const template = require ( './form.ejs' ) ;
6+ const i18n = require ( '../../i18n' ) ;
7+ const dns_providers = require ( '../../../../../utils/certbot-dns-plugins' ) ;
68
79require ( 'jquery-serializejson' ) ;
810require ( 'selectize' ) ;
@@ -21,25 +23,46 @@ module.exports = Mn.View.extend({
2123 other_certificate : '#other_certificate' ,
2224 other_certificate_label : '#other_certificate_label' ,
2325 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]"]' ,
2732 other_certificate_key_label : '#other_certificate_key_label' ,
2833 other_intermediate_certificate : '#other_intermediate_certificate' ,
2934 other_intermediate_certificate_label : '#other_intermediate_certificate_label'
3035 } ,
3136
3237 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 ( ) ;
4163 }
4264 } ,
65+
4366 'click @ui.save' : function ( e ) {
4467 e . preventDefault ( ) ;
4568
@@ -56,7 +79,7 @@ module.exports = Mn.View.extend({
5679
5780
5881 let domain_err = false ;
59- if ( ! data . meta . cloudflare_use ) {
82+ if ( ! data . meta . dns_challenge ) {
6083 data . domain_names . split ( ',' ) . map ( function ( name ) {
6184 if ( name . match ( / \* / im) ) {
6285 domain_err = true ;
@@ -65,16 +88,17 @@ module.exports = Mn.View.extend({
6588 }
6689
6790 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' ) ) ;
6992 return ;
7093 }
7194
7295 // Manipulate
7396 if ( typeof data . meta !== 'undefined' && typeof data . meta . letsencrypt_agree !== 'undefined' ) {
7497 data . meta . letsencrypt_agree = ! ! data . meta . letsencrypt_agree ;
7598 }
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 ;
78102 }
79103
80104 if ( typeof data . domain_names === 'string' && data . domain_names ) {
@@ -176,14 +200,22 @@ module.exports = Mn.View.extend({
176200 getLetsencryptEmail : function ( ) {
177201 return typeof this . meta . letsencrypt_email !== 'undefined' ? this . meta . letsencrypt_email : App . Cache . User . get ( 'email' ) ;
178202 } ,
179-
180203 getLetsencryptAgree : function ( ) {
181204 return typeof this . meta . letsencrypt_agree !== 'undefined' ? this . meta . letsencrypt_agree : false ;
182205 } ,
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 ,
187219 } ,
188220
189221 onRender : function ( ) {
@@ -199,7 +231,8 @@ module.exports = Mn.View.extend({
199231 } ,
200232 createFilter : / ^ (?: [ ^ . ] + \. ? ) + [ ^ . ] $ /
201233 } ) ;
202- this . ui . cloudflare . hide ( ) ;
234+ this . ui . dns_challenge_content . hide ( ) ;
235+ this . ui . credentials_file_content . hide ( ) ;
203236 } ,
204237
205238 initialize : function ( options ) {
0 commit comments