Skip to content

Commit e8596c1

Browse files
committed
cloudflare DNS also possible while adding proxy, redirection and 404
1 parent ab67481 commit e8596c1

File tree

6 files changed

+140
-25
lines changed

6 files changed

+140
-25
lines changed

frontend/js/app/nginx/dead/form.ejs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,23 @@
7373
</div>
7474
</div>
7575

76+
<!-- CloudFlare -->
77+
<div class="col-sm-12 col-md-12 letsencrypt">
78+
<div class="form-group">
79+
<label class="custom-switch">
80+
<input type="checkbox" class="custom-switch-input" name="meta[cloudflare_use]" value="1">
81+
<span class="custom-switch-indicator"></span>
82+
<span class="custom-switch-description"><%= i18n('ssl', 'use-cloudflare') %></span>
83+
</label>
84+
</div>
85+
</div>
86+
<div class="col-sm-12 col-md-12 cloudflare letsencrypt">
87+
<div class="form-group">
88+
<label class="form-label">CloudFlare DNS API Token <span class="form-required">*</span></label>
89+
<input type="text" name="meta[cloudflare_token]" class="form-control" id="cloudflare_token">
90+
</div>
91+
</div>
92+
7693
<!-- Lets encrypt -->
7794
<div class="col-sm-12 col-md-12 letsencrypt">
7895
<div class="form-group">

frontend/js/app/nginx/dead/form.js

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ module.exports = Mn.View.extend({
2323
hsts_enabled: 'input[name="hsts_enabled"]',
2424
hsts_subdomains: 'input[name="hsts_subdomains"]',
2525
http2_support: 'input[name="http2_support"]',
26+
cloudflare_switch: 'input[name="meta[cloudflare_use]"]',
27+
cloudflare_token: 'input[name="meta[cloudflare_token]"',
28+
cloudflare: '.cloudflare',
2629
letsencrypt: '.letsencrypt'
2730
},
2831

@@ -31,10 +34,12 @@ module.exports = Mn.View.extend({
3134
let id = this.ui.certificate_select.val();
3235
if (id === 'new') {
3336
this.ui.letsencrypt.show().find('input').prop('disabled', false);
37+
this.ui.cloudflare.hide();
3438
} else {
3539
this.ui.letsencrypt.hide().find('input').prop('disabled', true);
3640
}
3741

42+
3843
let enabled = id === 'new' || parseInt(id, 10) > 0;
3944

4045
let inputs = this.ui.ssl_forced.add(this.ui.http2_support);
@@ -76,6 +81,17 @@ module.exports = Mn.View.extend({
7681
}
7782
},
7883

84+
'change @ui.cloudflare_switch': function() {
85+
let checked = this.ui.cloudflare_switch.prop('checked');
86+
if (checked) {
87+
this.ui.cloudflare_token.prop('required', 'required');
88+
this.ui.cloudflare.show();
89+
} else {
90+
this.ui.cloudflare_token.prop('required', false);
91+
this.ui.cloudflare.hide();
92+
}
93+
},
94+
7995
'click @ui.save': function (e) {
8096
e.preventDefault();
8197

@@ -98,20 +114,23 @@ module.exports = Mn.View.extend({
98114
}
99115

100116
// Check for any ___domain names containing wildcards, which are not allowed with letsencrypt
101-
if (data.certificate_id === 'new') {
117+
if (data.certificate_id === 'new') {
102118
let domain_err = false;
103-
data.domain_names.map(function (name) {
104-
if (name.match(/\*/im)) {
105-
domain_err = true;
106-
}
107-
});
119+
if (!data.meta.cloudflare_use) {
120+
data.domain_names.map(function (name) {
121+
if (name.match(/\*/im)) {
122+
domain_err = true;
123+
}
124+
});
125+
}
108126

109127
if (domain_err) {
110-
alert('Cannot request Let\'s Encrypt Certificate for wildcard domains');
128+
alert('Cannot request Let\'s Encrypt Certificate for wildcard domains without CloudFlare DNS.');
111129
return;
112130
}
113131

114-
data.meta.letsencrypt_agree = data.meta.letsencrypt_agree === '1';
132+
data.meta.cloudflare_use = data.meta.cloudflare_use === '1';
133+
data.meta.letsencrypt_agree = data.meta.letsencrypt_agree === '1';
115134
} else {
116135
data.certificate_id = parseInt(data.certificate_id, 10);
117136
}
@@ -127,6 +146,8 @@ module.exports = Mn.View.extend({
127146
}
128147

129148
this.ui.buttons.prop('disabled', true).addClass('btn-disabled');
149+
this.ui.save.addClass('btn-loading');
150+
130151
method(data)
131152
.then(result => {
132153
view.model.set(result);
@@ -140,6 +161,7 @@ module.exports = Mn.View.extend({
140161
.catch(err => {
141162
alert(err.message);
142163
this.ui.buttons.prop('disabled', false).removeClass('btn-disabled');
164+
this.ui.save.removeClass('btn-loading');
143165
});
144166
}
145167
},

frontend/js/app/nginx/proxy/form.ejs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,23 @@
141141
</div>
142142
</div>
143143

144+
<!-- CloudFlare -->
145+
<div class="col-sm-12 col-md-12 letsencrypt">
146+
<div class="form-group">
147+
<label class="custom-switch">
148+
<input type="checkbox" class="custom-switch-input" name="meta[cloudflare_use]" value="1">
149+
<span class="custom-switch-indicator"></span>
150+
<span class="custom-switch-description"><%= i18n('ssl', 'use-cloudflare') %></span>
151+
</label>
152+
</div>
153+
</div>
154+
<div class="col-sm-12 col-md-12 cloudflare letsencrypt">
155+
<div class="form-group">
156+
<label class="form-label">CloudFlare DNS API Token <span class="form-required">*</span></label>
157+
<input type="text" name="meta[cloudflare_token]" class="form-control" id="cloudflare_token">
158+
</div>
159+
</div>
160+
144161
<!-- Lets encrypt -->
145162
<div class="col-sm-12 col-md-12 letsencrypt">
146163
<div class="form-group">

frontend/js/app/nginx/proxy/form.js

Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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

frontend/js/app/nginx/redirection/form.ejs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,23 @@
9797
</div>
9898
</div>
9999

100+
<!-- CloudFlare -->
101+
<div class="col-sm-12 col-md-12 letsencrypt">
102+
<div class="form-group">
103+
<label class="custom-switch">
104+
<input type="checkbox" class="custom-switch-input" name="meta[cloudflare_use]" value="1">
105+
<span class="custom-switch-indicator"></span>
106+
<span class="custom-switch-description"><%= i18n('ssl', 'use-cloudflare') %></span>
107+
</label>
108+
</div>
109+
</div>
110+
<div class="col-sm-12 col-md-12 cloudflare letsencrypt">
111+
<div class="form-group">
112+
<label class="form-label">CloudFlare DNS API Token <span class="form-required">*</span></label>
113+
<input type="text" name="meta[cloudflare_token]" class="form-control" id="cloudflare_token">
114+
</div>
115+
</div>
116+
100117
<!-- Lets encrypt -->
101118
<div class="col-sm-12 col-md-12 letsencrypt">
102119
<div class="form-group">

frontend/js/app/nginx/redirection/form.js

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ module.exports = Mn.View.extend({
2323
hsts_enabled: 'input[name="hsts_enabled"]',
2424
hsts_subdomains: 'input[name="hsts_subdomains"]',
2525
http2_support: 'input[name="http2_support"]',
26+
cloudflare_switch: 'input[name="meta[cloudflare_use]"]',
27+
cloudflare_token: 'input[name="meta[cloudflare_token]"',
28+
cloudflare: '.cloudflare',
2629
letsencrypt: '.letsencrypt'
2730
},
2831

@@ -31,6 +34,7 @@ module.exports = Mn.View.extend({
3134
let id = this.ui.certificate_select.val();
3235
if (id === 'new') {
3336
this.ui.letsencrypt.show().find('input').prop('disabled', false);
37+
this.ui.cloudflare.hide();
3438
} else {
3539
this.ui.letsencrypt.hide().find('input').prop('disabled', true);
3640
}
@@ -76,6 +80,17 @@ module.exports = Mn.View.extend({
7680
}
7781
},
7882

83+
'change @ui.cloudflare_switch': function() {
84+
let checked = this.ui.cloudflare_switch.prop('checked');
85+
if (checked) {
86+
this.ui.cloudflare_token.prop('required', 'required');
87+
this.ui.cloudflare.show();
88+
} else {
89+
this.ui.cloudflare_token.prop('required', false);
90+
this.ui.cloudflare.hide();
91+
}
92+
},
93+
7994
'click @ui.save': function (e) {
8095
e.preventDefault();
8196

@@ -100,20 +115,23 @@ module.exports = Mn.View.extend({
100115
}
101116

102117
// Check for any ___domain names containing wildcards, which are not allowed with letsencrypt
103-
if (data.certificate_id === 'new') {
118+
if (data.certificate_id === 'new') {
104119
let domain_err = false;
105-
data.domain_names.map(function (name) {
106-
if (name.match(/\*/im)) {
107-
domain_err = true;
108-
}
109-
});
120+
if (!data.meta.cloudflare_use) {
121+
data.domain_names.map(function (name) {
122+
if (name.match(/\*/im)) {
123+
domain_err = true;
124+
}
125+
});
126+
}
110127

111128
if (domain_err) {
112-
alert('Cannot request Let\'s Encrypt Certificate for wildcard domains');
129+
alert('Cannot request Let\'s Encrypt Certificate for wildcard domains without CloudFlare DNS.');
113130
return;
114131
}
115132

116-
data.meta.letsencrypt_agree = data.meta.letsencrypt_agree === '1';
133+
data.meta.cloudflare_use = data.meta.cloudflare_use === '1';
134+
data.meta.letsencrypt_agree = data.meta.letsencrypt_agree === '1';
117135
} else {
118136
data.certificate_id = parseInt(data.certificate_id, 10);
119137
}
@@ -129,6 +147,8 @@ module.exports = Mn.View.extend({
129147
}
130148

131149
this.ui.buttons.prop('disabled', true).addClass('btn-disabled');
150+
this.ui.save.addClass('btn-loading');
151+
132152
method(data)
133153
.then(result => {
134154
view.model.set(result);
@@ -142,6 +162,7 @@ module.exports = Mn.View.extend({
142162
.catch(err => {
143163
alert(err.message);
144164
this.ui.buttons.prop('disabled', false).removeClass('btn-disabled');
165+
this.ui.save.removeClass('btn-loading');
145166
});
146167
}
147168
},

0 commit comments

Comments
 (0)