refactor: refine code

This commit is contained in:
avwo
2021-12-03 00:34:57 +08:00
parent f4851a7e16
commit a2aa80c2e2
+55 -57
View File
@@ -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);
});
});
}
}
}