Merge pull request #656 from chaptergy/fixes-custom-certificate-upload

Fixes custom certificate upload
This commit is contained in:
jc21 2020-10-16 08:33:51 +10:00 committed by GitHub
commit c14236823a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 51 additions and 52 deletions

View File

@ -139,7 +139,11 @@ function FileUpload(path, fd) {
xhr.onreadystatechange = function () { xhr.onreadystatechange = function () {
if (this.readyState === XMLHttpRequest.DONE) { if (this.readyState === XMLHttpRequest.DONE) {
if (xhr.status !== 200 && xhr.status !== 201) { if (xhr.status !== 200 && xhr.status !== 201) {
try {
reject(new Error('Upload failed: ' + JSON.parse(xhr.responseText).error.message));
} catch (err) {
reject(new Error('Upload failed: ' + xhr.status)); reject(new Error('Upload failed: ' + xhr.status));
}
} else { } else {
resolve(xhr.responseText); resolve(xhr.responseText);
} }
@ -587,7 +591,8 @@ module.exports = {
* @param {Object} data * @param {Object} data
*/ */
create: function (data) { create: function (data) {
const timeout = 180000 + (data.meta.propagation_seconds ? Number(data.meta.propagation_seconds) * 1000 : 0);
const timeout = 180000 + (data && data.meta && data.meta.propagation_seconds ? Number(data.meta.propagation_seconds) * 1000 : 0);
return fetch('post', 'nginx/certificates', data, {timeout}); return fetch('post', 'nginx/certificates', data, {timeout});
}, },

View File

@ -4,17 +4,14 @@
<button type="button" class="close cancel non-loader-content" aria-label="Close" data-dismiss="modal">&nbsp;</button> <button type="button" class="close cancel non-loader-content" aria-label="Close" data-dismiss="modal">&nbsp;</button>
</div> </div>
<div class="modal-body"> <div class="modal-body">
<div class="alert alert-danger mb-0 rounded-0" id="le-error-info" role="alert"></div>
<div class="text-center loader-content"> <div class="text-center loader-content">
<div class="loader mx-auto my-6"></div> <div class="loader mx-auto my-6"></div>
<p><%- i18n('ssl', 'obtaining-certificate-info') %></p> <p><%- i18n('ssl', 'processing-info') %></p>
</div> </div>
<form class="non-loader-content"> <form class="non-loader-content">
<div class="row"> <div class="row">
<% if (provider === 'letsencrypt') { %> <% if (provider === 'letsencrypt') { %>
<div class="col-sm-12 col-md-12">
<div class="alert alert-danger" id="le-error-info" role="alert"></div>
</div>
<div class="col-sm-12 col-md-12"> <div class="col-sm-12 col-md-12">
<div class="form-group"> <div class="form-group">
<label class="form-label"><%- i18n('all-hosts', 'domain-names') %> <span class="form-required">*</span></label> <label class="form-label"><%- i18n('all-hosts', 'domain-names') %> <span class="form-required">*</span></label>

View File

@ -76,11 +76,12 @@ module.exports = Mn.View.extend({
return; return;
} }
let view = this;
let data = this.ui.form.serializeJSON(); let data = this.ui.form.serializeJSON();
data.provider = this.model.get('provider'); data.provider = this.model.get('provider');
let ssl_files = [];
if (data.provider === 'letsencrypt') {
if (typeof data.meta === 'undefined') data.meta = {};
let domain_err = false; let domain_err = false;
if (!data.meta.dns_challenge) { if (!data.meta.dns_challenge) {
@ -97,7 +98,6 @@ module.exports = Mn.View.extend({
} }
// Manipulate // Manipulate
if (typeof data.meta === 'undefined') data.meta = {};
data.meta.letsencrypt_agree = data.meta.letsencrypt_agree == 1; data.meta.letsencrypt_agree = data.meta.letsencrypt_agree == 1;
data.meta.dns_challenge = data.meta.dns_challenge == 1; data.meta.dns_challenge = data.meta.dns_challenge == 1;
@ -112,11 +112,8 @@ module.exports = Mn.View.extend({
if (typeof data.domain_names === 'string' && data.domain_names) { if (typeof data.domain_names === 'string' && data.domain_names) {
data.domain_names = data.domain_names.split(','); data.domain_names = data.domain_names.split(',');
} }
} else if (data.provider === 'other' && !this.model.hasSslFiles()) {
let ssl_files = [];
// check files are attached // check files are attached
if (this.model.get('provider') === 'other' && !this.model.hasSslFiles()) {
if (!this.ui.other_certificate[0].files.length || !this.ui.other_certificate[0].files[0].size) { if (!this.ui.other_certificate[0].files.length || !this.ui.other_certificate[0].files[0].size) {
alert('Certificate file is not attached'); alert('Certificate file is not attached');
return; return;
@ -153,14 +150,14 @@ module.exports = Mn.View.extend({
// compile file data // compile file data
let form_data = new FormData(); let form_data = new FormData();
if (view.model.get('provider') && ssl_files.length) { if (data.provider === 'other' && ssl_files.length) {
ssl_files.map(function (file) { ssl_files.map(function (file) {
form_data.append(file.name, file.file); form_data.append(file.name, file.file);
}); });
} }
new Promise(resolve => { new Promise(resolve => {
if (view.model.get('provider') === 'other') { if (data.provider === 'other') {
resolve(App.Api.Nginx.Certificates.validate(form_data)); resolve(App.Api.Nginx.Certificates.validate(form_data));
} else { } else {
resolve(); resolve();
@ -170,13 +167,13 @@ module.exports = Mn.View.extend({
return App.Api.Nginx.Certificates.create(data); return App.Api.Nginx.Certificates.create(data);
}) })
.then(result => { .then(result => {
view.model.set(result); this.model.set(result);
// Now upload the certs if we need to // Now upload the certs if we need to
if (view.model.get('provider') === 'other') { if (data.provider === 'other') {
return App.Api.Nginx.Certificates.upload(view.model.get('id'), form_data) return App.Api.Nginx.Certificates.upload(this.model.get('id'), form_data)
.then(result => { .then(result => {
view.model.set('meta', _.assign({}, view.model.get('meta'), result)); this.model.set('meta', _.assign({}, this.model.get('meta'), result));
}); });
} }
}) })

View File

@ -112,7 +112,7 @@
"stored-as-plaintext-info": "This data will be stored as plaintext in the database!", "stored-as-plaintext-info": "This data will be stored as plaintext in the database!",
"propagation-seconds": "Propagation Seconds", "propagation-seconds": "Propagation Seconds",
"propagation-seconds-info": "Leave empty to use the plugins default value. Number of seconds to wait for DNS propagation.", "propagation-seconds-info": "Leave empty to use the plugins default value. Number of seconds to wait for DNS propagation.",
"obtaining-certificate-info": "Obtaining certificate... This might take a few minutes." "processing-info": "Processing... This might take a few minutes."
}, },
"proxy-hosts": { "proxy-hosts": {
"title": "Proxy Hosts", "title": "Proxy Hosts",