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 () { |         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) { | ||||||
|                     reject(new Error('Upload failed: ' + xhr.status)); |                     try { | ||||||
|  |                         reject(new Error('Upload failed: ' + JSON.parse(xhr.responseText).error.message)); | ||||||
|  |                     } catch (err) { | ||||||
|  |                         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}); | ||||||
|             }, |             }, | ||||||
|  |  | ||||||
|   | |||||||
| @@ -4,17 +4,14 @@ | |||||||
|         <button type="button" class="close cancel non-loader-content" aria-label="Close" data-dismiss="modal"> </button> |         <button type="button" class="close cancel non-loader-content" aria-label="Close" data-dismiss="modal"> </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> | ||||||
|   | |||||||
| @@ -76,47 +76,44 @@ 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 domain_err = false; |  | ||||||
|             if (!data.meta.dns_challenge) {                 |  | ||||||
|                 data.domain_names.split(',').map(function (name) { |  | ||||||
|                     if (name.match(/\*/im)) { |  | ||||||
|                         domain_err = true; |  | ||||||
|                     } |  | ||||||
|                 }); |  | ||||||
|             } |  | ||||||
|  |  | ||||||
|             if (domain_err) { |  | ||||||
|                 alert(i18n('ssl', 'no-wildcard-without-dns')); |  | ||||||
|                 return; |  | ||||||
|             } |  | ||||||
|  |  | ||||||
|             // 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; |  | ||||||
|  |  | ||||||
|             if(!data.meta.dns_challenge){ |  | ||||||
|                 data.meta.dns_provider = undefined; |  | ||||||
|                 data.meta.dns_provider_credentials = undefined; |  | ||||||
|                 data.meta.propagation_seconds = undefined; |  | ||||||
|             } else { |  | ||||||
|                 if(data.meta.propagation_seconds === '') data.meta.propagation_seconds = undefined;  |  | ||||||
|             } |  | ||||||
|  |  | ||||||
|             if (typeof data.domain_names === 'string' && data.domain_names) { |  | ||||||
|                 data.domain_names = data.domain_names.split(','); |  | ||||||
|             } |  | ||||||
|  |  | ||||||
|             let ssl_files = []; |             let ssl_files = []; | ||||||
|  |  | ||||||
|             // check files are attached |             if (data.provider === 'letsencrypt') { | ||||||
|             if (this.model.get('provider') === 'other' && !this.model.hasSslFiles()) { |                 if (typeof data.meta === 'undefined') data.meta = {}; | ||||||
|  |  | ||||||
|  |                 let domain_err = false; | ||||||
|  |                 if (!data.meta.dns_challenge) {                 | ||||||
|  |                     data.domain_names.split(',').map(function (name) { | ||||||
|  |                         if (name.match(/\*/im)) { | ||||||
|  |                             domain_err = true; | ||||||
|  |                         } | ||||||
|  |                     }); | ||||||
|  |                 } | ||||||
|  |  | ||||||
|  |                 if (domain_err) { | ||||||
|  |                     alert(i18n('ssl', 'no-wildcard-without-dns')); | ||||||
|  |                     return; | ||||||
|  |                 } | ||||||
|  |  | ||||||
|  |                 // Manipulate | ||||||
|  |                 data.meta.letsencrypt_agree = data.meta.letsencrypt_agree == 1; | ||||||
|  |                 data.meta.dns_challenge = data.meta.dns_challenge == 1; | ||||||
|  |  | ||||||
|  |                 if(!data.meta.dns_challenge){ | ||||||
|  |                     data.meta.dns_provider = undefined; | ||||||
|  |                     data.meta.dns_provider_credentials = undefined; | ||||||
|  |                     data.meta.propagation_seconds = undefined; | ||||||
|  |                 } else { | ||||||
|  |                     if(data.meta.propagation_seconds === '') data.meta.propagation_seconds = undefined;  | ||||||
|  |                 } | ||||||
|  |  | ||||||
|  |                 if (typeof data.domain_names === 'string' && data.domain_names) { | ||||||
|  |                     data.domain_names = data.domain_names.split(','); | ||||||
|  |                 } | ||||||
|  |             } else if (data.provider === 'other' && !this.model.hasSslFiles()) { | ||||||
|  |                 // check files are attached | ||||||
|                 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)); | ||||||
|                             }); |                             }); | ||||||
|                     } |                     } | ||||||
|                 }) |                 }) | ||||||
| @@ -187,7 +184,7 @@ module.exports = Mn.View.extend({ | |||||||
|                 }) |                 }) | ||||||
|                 .catch(err => { |                 .catch(err => { | ||||||
|                     let more_info = ''; |                     let more_info = ''; | ||||||
|                     if(err.code === 500 && err.debug){ |                     if (err.code === 500 && err.debug) { | ||||||
|                         try{ |                         try{ | ||||||
|                             more_info = JSON.parse(err.debug).debug.stack.join("\n"); |                             more_info = JSON.parse(err.debug).debug.stack.join("\n"); | ||||||
|                         } catch(e) {} |                         } catch(e) {} | ||||||
|   | |||||||
| @@ -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", | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user