mirror of
				https://github.com/NginxProxyManager/nginx-proxy-manager.git
				synced 2025-10-31 15:53:33 +00:00 
			
		
		
		
	Fixes custom certificate upload
This commit is contained in:
		| @@ -139,7 +139,11 @@ function FileUpload(path, fd) { | ||||
|         xhr.onreadystatechange = function () { | ||||
|             if (this.readyState === XMLHttpRequest.DONE) { | ||||
|                 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)); | ||||
|                     }   | ||||
|                 } else { | ||||
|                     resolve(xhr.responseText); | ||||
|                 } | ||||
| @@ -587,7 +591,8 @@ module.exports = { | ||||
|              * @param {Object}  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}); | ||||
|             }, | ||||
|  | ||||
|   | ||||
| @@ -4,17 +4,14 @@ | ||||
|         <button type="button" class="close cancel non-loader-content" aria-label="Close" data-dismiss="modal"> </button> | ||||
|     </div> | ||||
|     <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="loader mx-auto my-6"></div> | ||||
|             <p><%- i18n('ssl', 'obtaining-certificate-info') %></p> | ||||
|             <p><%- i18n('ssl', 'processing-info') %></p> | ||||
|         </div> | ||||
|         <form class="non-loader-content"> | ||||
|             <div class="row"> | ||||
|                 <% 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="form-group"> | ||||
|                             <label class="form-label"><%- i18n('all-hosts', 'domain-names') %> <span class="form-required">*</span></label> | ||||
|   | ||||
| @@ -76,11 +76,12 @@ module.exports = Mn.View.extend({ | ||||
|                 return; | ||||
|             } | ||||
|  | ||||
|             let view      = this; | ||||
|             let data      = this.ui.form.serializeJSON(); | ||||
|             data.provider = this.model.get('provider'); | ||||
|             let ssl_files = []; | ||||
|  | ||||
|  | ||||
|             if (data.provider === 'letsencrypt') { | ||||
|                 if (typeof data.meta === 'undefined') data.meta = {}; | ||||
|  | ||||
|                 let domain_err = false; | ||||
|                 if (!data.meta.dns_challenge) {                 | ||||
| @@ -97,7 +98,6 @@ module.exports = Mn.View.extend({ | ||||
|                 } | ||||
|  | ||||
|                 // Manipulate | ||||
|             if (typeof data.meta === 'undefined') data.meta = {}; | ||||
|                 data.meta.letsencrypt_agree = data.meta.letsencrypt_agree == 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) { | ||||
|                     data.domain_names = data.domain_names.split(','); | ||||
|                 } | ||||
|  | ||||
|             let ssl_files = []; | ||||
|  | ||||
|             } else if (data.provider === 'other' && !this.model.hasSslFiles()) { | ||||
|                 // 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) { | ||||
|                     alert('Certificate file is not attached'); | ||||
|                     return; | ||||
| @@ -153,14 +150,14 @@ module.exports = Mn.View.extend({ | ||||
|  | ||||
|             // compile file data | ||||
|             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) { | ||||
|                     form_data.append(file.name, file.file); | ||||
|                 }); | ||||
|             } | ||||
|  | ||||
|             new Promise(resolve => { | ||||
|                 if (view.model.get('provider') === 'other') { | ||||
|                 if (data.provider === 'other') { | ||||
|                     resolve(App.Api.Nginx.Certificates.validate(form_data)); | ||||
|                 } else { | ||||
|                     resolve(); | ||||
| @@ -170,13 +167,13 @@ module.exports = Mn.View.extend({ | ||||
|                     return App.Api.Nginx.Certificates.create(data); | ||||
|                 }) | ||||
|                 .then(result => { | ||||
|                     view.model.set(result); | ||||
|                     this.model.set(result); | ||||
|  | ||||
|                     // Now upload the certs if we need to | ||||
|                     if (view.model.get('provider') === 'other') { | ||||
|                         return App.Api.Nginx.Certificates.upload(view.model.get('id'), form_data) | ||||
|                     if (data.provider === 'other') { | ||||
|                         return App.Api.Nginx.Certificates.upload(this.model.get('id'), form_data) | ||||
|                             .then(result => { | ||||
|                                 view.model.set('meta', _.assign({}, view.model.get('meta'), result)); | ||||
|                                 this.model.set('meta', _.assign({}, this.model.get('meta'), result)); | ||||
|                             }); | ||||
|                     } | ||||
|                 }) | ||||
|   | ||||
| @@ -112,7 +112,7 @@ | ||||
|       "stored-as-plaintext-info": "This data will be stored as plaintext in the database!", | ||||
|       "propagation-seconds": "Propagation Seconds", | ||||
|       "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": { | ||||
|       "title": "Proxy Hosts", | ||||
|   | ||||
		Reference in New Issue
	
	Block a user