mirror of
https://github.com/avwo/whistle.git
synced 2026-10-29 15:09:28 +08:00
refactor: refine code
This commit is contained in:
+55
-57
@@ -1089,64 +1089,62 @@ module.exports = function(socket, next, isWebPort) {
|
||||
var requestCert = (enable.clientCert || enable.requestCert) && !disable.clientCert && !disable.requestCert;
|
||||
var curCert = remoteCerts.get(servername);
|
||||
domain = getDomain(servername);
|
||||
if (!socket.isLocalUIUrl) {
|
||||
socket.curUrl = socket.fullUrl = 'https://' + servername;
|
||||
socket.useSNI = useSNI;
|
||||
socket.serverName = socket.servername = servername;
|
||||
socket.commonName = domain;
|
||||
var plugin = rules.resolveSNICallback(socket);
|
||||
if (plugin) {
|
||||
if (socket.rules) {
|
||||
socket.rules.sniCallback = plugin;
|
||||
}
|
||||
if (SNI_CALLBACK_RE.test(plugin.matcher)) {
|
||||
socket.sniRuleValue = RegExp.$2;
|
||||
var pluginName = RegExp.$1;
|
||||
plugin = pluginMgr.getPlugin(pluginName + ':');
|
||||
if (plugin) {
|
||||
if (curCert && curCert.name) {
|
||||
socket.hasCertCache = curCert.name + (curCert.mtime ? '+' + curCert.mtime : '');
|
||||
}
|
||||
var cbKey = servername + '/' + pluginName;
|
||||
var cbList = certCallbacks[cbKey];
|
||||
var handleCert = function(cert) {
|
||||
if (socket._hasError) {
|
||||
return destroy();
|
||||
}
|
||||
if (cert === false) {
|
||||
return next(chunk);
|
||||
}
|
||||
if (cert && util.isString(cert.key) && util.isString(cert.cert)) {
|
||||
socket.sniPlugin = cert.name;
|
||||
if (!curCert || curCert.key !== cert.key || curCert.cert !== cert.cert) {
|
||||
remoteCerts.set(servername, cert);
|
||||
}
|
||||
domain = servername;
|
||||
} else {
|
||||
if (curCert) {
|
||||
if (cert) {
|
||||
socket.sniPlugin = curCert.name;
|
||||
domain = servername;
|
||||
} else {
|
||||
remoteCerts.del(servername);
|
||||
curCert = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
handleRequest();
|
||||
};
|
||||
if (cbList) {
|
||||
return cbList.push(handleCert);
|
||||
}
|
||||
certCallbacks[cbKey] = [handleCert];
|
||||
return pluginMgr.loadCert(socket, plugin, function(cert) {
|
||||
cbList = certCallbacks[cbKey];
|
||||
delete certCallbacks[cbKey];
|
||||
cbList && cbList.forEach(function(handleCb) {
|
||||
handleCb(cert);
|
||||
});
|
||||
});
|
||||
socket.curUrl = socket.fullUrl = 'https://' + servername;
|
||||
socket.useSNI = useSNI;
|
||||
socket.serverName = socket.servername = servername;
|
||||
socket.commonName = domain;
|
||||
var plugin = rules.resolveSNICallback(socket);
|
||||
if (plugin) {
|
||||
if (socket.rules) {
|
||||
socket.rules.sniCallback = plugin;
|
||||
}
|
||||
if (SNI_CALLBACK_RE.test(plugin.matcher)) {
|
||||
socket.sniRuleValue = RegExp.$2;
|
||||
var pluginName = RegExp.$1;
|
||||
plugin = pluginMgr.getPlugin(pluginName + ':');
|
||||
if (plugin) {
|
||||
if (curCert && curCert.name) {
|
||||
socket.hasCertCache = curCert.name + (curCert.mtime ? '+' + curCert.mtime : '');
|
||||
}
|
||||
var cbKey = servername + '/' + pluginName;
|
||||
var cbList = certCallbacks[cbKey];
|
||||
var handleCert = function(cert) {
|
||||
if (socket._hasError) {
|
||||
return destroy();
|
||||
}
|
||||
if (cert === false) {
|
||||
return next(chunk);
|
||||
}
|
||||
if (cert && util.isString(cert.key) && util.isString(cert.cert)) {
|
||||
socket.sniPlugin = cert.name;
|
||||
if (!curCert || curCert.key !== cert.key || curCert.cert !== cert.cert) {
|
||||
remoteCerts.set(servername, cert);
|
||||
}
|
||||
domain = servername;
|
||||
} else {
|
||||
if (curCert) {
|
||||
if (cert) {
|
||||
socket.sniPlugin = curCert.name;
|
||||
domain = servername;
|
||||
} else {
|
||||
remoteCerts.del(servername);
|
||||
curCert = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
handleRequest();
|
||||
};
|
||||
if (cbList) {
|
||||
return cbList.push(handleCert);
|
||||
}
|
||||
certCallbacks[cbKey] = [handleCert];
|
||||
return pluginMgr.loadCert(socket, plugin, function(cert) {
|
||||
cbList = certCallbacks[cbKey];
|
||||
delete certCallbacks[cbKey];
|
||||
cbList && cbList.forEach(function(handleCb) {
|
||||
handleCb(cert);
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user