bail on install
This commit is contained in:
		
							parent
							
								
									9467269cd7
								
							
						
					
					
						commit
						c0bab90b89
					
				@ -1,5 +1,8 @@
 | 
				
			|||||||
#!/bin/bash
 | 
					#!/bin/bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo "no install yet"
 | 
				
			||||||
 | 
					exit 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sudo mkdir -p /srv/walnut/{certs,core,letsencrypt,lib,etc,config}
 | 
					sudo mkdir -p /srv/walnut/{certs,core,letsencrypt,lib,etc,config}
 | 
				
			||||||
sudo mkdir -p /srv/walnut/etc/org.oauth3.consumer
 | 
					sudo mkdir -p /srv/walnut/etc/org.oauth3.consumer
 | 
				
			||||||
sudo mkdir -p /srv/walnut/etc/org.oauth3.provider
 | 
					sudo mkdir -p /srv/walnut/etc/org.oauth3.provider
 | 
				
			||||||
 | 
				
			|||||||
@ -1,68 +0,0 @@
 | 
				
			|||||||
'use strict';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function loadCerts(secureContexts, certPaths, domainname, prevdomainname) {
 | 
					 | 
				
			||||||
  var PromiseA = require('bluebird');
 | 
					 | 
				
			||||||
  var fs = PromiseA.promisifyAll(require('fs'));
 | 
					 | 
				
			||||||
  var path = require('path');
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  if (/(^|\.)proxyable\./.test(domainname)) {
 | 
					 | 
				
			||||||
    // device-id-12345678.proxyable.myapp.mydomain.com => myapp.mydomain.com
 | 
					 | 
				
			||||||
    // proxyable.myapp.mydomain.com => myapp.mydomain.com
 | 
					 | 
				
			||||||
    // TODO myapp.mydomain.com.proxyable.com => myapp.mydomain.com
 | 
					 | 
				
			||||||
    domainname = domainname.replace(/.*\.?proxyable\./, '');
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  if (secureContexts[domainname]) {
 | 
					 | 
				
			||||||
    return PromiseA.resolve(secureContexts[domainname]);
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  return PromiseA.some(certPaths.map(function (pathname) {
 | 
					 | 
				
			||||||
    return PromiseA.all([
 | 
					 | 
				
			||||||
      fs.readFileAsync(path.join(pathname, domainname, 'privkey.pem'), 'ascii')
 | 
					 | 
				
			||||||
    , fs.readFileAsync(path.join(pathname, domainname, 'fullchain.pem'), 'ascii')
 | 
					 | 
				
			||||||
    ]);
 | 
					 | 
				
			||||||
  }), 1).then(function (some) {
 | 
					 | 
				
			||||||
    var one = some[0];
 | 
					 | 
				
			||||||
    secureContexts[domainname] = require('tls').createSecureContext({
 | 
					 | 
				
			||||||
      key:  one[0]
 | 
					 | 
				
			||||||
    , cert: one[1]
 | 
					 | 
				
			||||||
      // https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
 | 
					 | 
				
			||||||
      // https://nodejs.org/api/tls.html
 | 
					 | 
				
			||||||
      // removed :ECDH+AES256:DH+AES256 and added :!AES256 because AES-256 wastes CPU
 | 
					 | 
				
			||||||
    , ciphers: 'ECDH+AESGCM:DH+AESGCM:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS:!AES256'
 | 
					 | 
				
			||||||
    , honorCipherOrder: true
 | 
					 | 
				
			||||||
    });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // guard against race condition on Promise.some
 | 
					 | 
				
			||||||
    if (prevdomainname && !secureContexts[prevdomainname]) {
 | 
					 | 
				
			||||||
      // TODO XXX make sure that letsencrypt www. domains handle the bare domains also (and vice versa)
 | 
					 | 
				
			||||||
      secureContexts[prevdomainname] = secureContexts[domainname];
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return secureContexts[domainname];
 | 
					 | 
				
			||||||
  }, function (/*err*/) {
 | 
					 | 
				
			||||||
    // AggregateError means both promises failed
 | 
					 | 
				
			||||||
    // TODO check ENOENT
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // test "is this server <<domainname>>?"
 | 
					 | 
				
			||||||
    // try letsencrypt
 | 
					 | 
				
			||||||
    // fail with www.example.com
 | 
					 | 
				
			||||||
    if (/^www\./i.test(domainname)) {
 | 
					 | 
				
			||||||
      return loadCerts(secureContexts, certPaths, domainname.replace(/^www\./i, ''), domainname);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return (secureContexts['www.example.com'] || secureContexts['example.com']);
 | 
					 | 
				
			||||||
  }).then(function (ctx) {
 | 
					 | 
				
			||||||
    // TODO generate some self-signed certs?
 | 
					 | 
				
			||||||
    if (!ctx) {
 | 
					 | 
				
			||||||
      console.error("[loadCerts()] Could not load default HTTPS certificates!!!");
 | 
					 | 
				
			||||||
      return PromiseA.reject({
 | 
					 | 
				
			||||||
        message: "No default certificates for https"
 | 
					 | 
				
			||||||
      , code: 'E_NO_DEFAULT_CERTS'
 | 
					 | 
				
			||||||
      });
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return ctx;
 | 
					 | 
				
			||||||
  });
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
module.exports.load = loadCerts;
 | 
					 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user