@@ -33,6 +33,9 @@ module.exports = Mn.View.extend({
3333 hsts_enabled : 'input[name="hsts_enabled"]' ,
3434 hsts_subdomains : 'input[name="hsts_subdomains"]' ,
3535 http2_support : 'input[name="http2_support"]' ,
36+ cloudflare_switch : 'input[name="meta[cloudflare_use]"]' ,
37+ cloudflare_token : 'input[name="meta[cloudflare_token]"' ,
38+ cloudflare : '.cloudflare' ,
3639 forward_scheme : 'select[name="forward_scheme"]' ,
3740 letsencrypt : '.letsencrypt'
3841 } ,
@@ -46,6 +49,7 @@ module.exports = Mn.View.extend({
4649 let id = this . ui . certificate_select . val ( ) ;
4750 if ( id === 'new' ) {
4851 this . ui . letsencrypt . show ( ) . find ( 'input' ) . prop ( 'disabled' , false ) ;
52+ this . ui . cloudflare . hide ( ) ;
4953 } else {
5054 this . ui . letsencrypt . hide ( ) . find ( 'input' ) . prop ( 'disabled' , true ) ;
5155 }
@@ -91,6 +95,17 @@ module.exports = Mn.View.extend({
9195 }
9296 } ,
9397
98+ 'change @ui.cloudflare_switch' : function ( ) {
99+ let checked = this . ui . cloudflare_switch . prop ( 'checked' ) ;
100+ if ( checked ) {
101+ this . ui . cloudflare_token . prop ( 'required' , 'required' ) ;
102+ this . ui . cloudflare . show ( ) ;
103+ } else {
104+ this . ui . cloudflare_token . prop ( 'required' , false ) ;
105+ this . ui . cloudflare . hide ( ) ;
106+ }
107+ } ,
108+
94109 'click @ui.add_location_btn' : function ( e ) {
95110 e . preventDefault ( ) ;
96111
@@ -134,20 +149,23 @@ module.exports = Mn.View.extend({
134149 }
135150
136151 // Check for any domain names containing wildcards, which are not allowed with letsencrypt
137- if ( data . certificate_id === 'new' ) {
152+ if ( data . certificate_id === 'new' ) {
138153 let domain_err = false ;
139- data . domain_names . map ( function ( name ) {
140- if ( name . match ( / \* / im) ) {
141- domain_err = true ;
142- }
143- } ) ;
154+ if ( ! data . meta . cloudflare_use ) {
155+ data . domain_names . map ( function ( name ) {
156+ if ( name . match ( / \* / im) ) {
157+ domain_err = true ;
158+ }
159+ } ) ;
160+ }
144161
145162 if ( domain_err ) {
146- alert ( 'Cannot request Let\'s Encrypt Certificate for wildcard domains' ) ;
163+ alert ( 'Cannot request Let\'s Encrypt Certificate for wildcard domains without CloudFlare DNS. ' ) ;
147164 return ;
148165 }
149166
150- data . meta . letsencrypt_agree = data . meta . letsencrypt_agree === '1' ;
167+ data . meta . cloudflare_use = data . meta . cloudflare_use === '1' ;
168+ data . meta . letsencrypt_agree = data . meta . letsencrypt_agree === '1' ;
151169 } else {
152170 data . certificate_id = parseInt ( data . certificate_id , 10 ) ;
153171 }
@@ -163,6 +181,8 @@ module.exports = Mn.View.extend({
163181 }
164182
165183 this . ui . buttons . prop ( 'disabled' , true ) . addClass ( 'btn-disabled' ) ;
184+ this . ui . save . addClass ( 'btn-loading' ) ;
185+
166186 method ( data )
167187 . then ( result => {
168188 view . model . set ( result ) ;
@@ -176,6 +196,7 @@ module.exports = Mn.View.extend({
176196 . catch ( err => {
177197 alert ( err . message ) ;
178198 this . ui . buttons . prop ( 'disabled' , false ) . removeClass ( 'btn-disabled' ) ;
199+ this . ui . save . removeClass ( 'btn-loading' ) ;
179200 } ) ;
180201 }
181202 } ,
@@ -203,7 +224,7 @@ module.exports = Mn.View.extend({
203224 text : input
204225 } ;
205226 } ,
206- createFilter : / ^ (?: \* \ .) ? (?: [ ^ . * ] + \. ? ) + [ ^ . ] $ /
227+ createFilter : / ^ (?: \. ) ? (?: [ ^ . * ] + \. ? ) + [ ^ . ] $ /
207228 } ) ;
208229
209230 // Access Lists
0 commit comments