2018-05-04 14:08:36 +00:00
|
|
|
// private presets
|
|
|
|
import MuxPreset from './_mux';
|
2017-09-08 02:47:36 +00:00
|
|
|
|
2017-09-20 05:33:42 +00:00
|
|
|
// basic
|
2017-10-20 02:56:03 +00:00
|
|
|
import BaseAuthPreset from './base-auth';
|
2017-09-20 05:33:42 +00:00
|
|
|
|
2017-09-08 02:47:36 +00:00
|
|
|
// shadowsocks
|
2017-08-16 03:47:53 +00:00
|
|
|
import SsBasePreset from './ss-base';
|
|
|
|
import SsStreamCipherPreset from './ss-stream-cipher';
|
|
|
|
import SsAeadCipherPreset from './ss-aead-cipher';
|
2017-09-08 02:47:36 +00:00
|
|
|
|
2017-10-31 14:50:06 +00:00
|
|
|
// shadowsocksr
|
2017-11-01 03:42:23 +00:00
|
|
|
import SsrAuthAes128Md5Preset from './ssr-auth-aes128-md5';
|
|
|
|
import SsrAuthAes128Sha1Preset from './ssr-auth-aes128-sha1';
|
2017-11-03 07:45:41 +00:00
|
|
|
import SsrAuthChainAPreset from './ssr-auth-chain-a';
|
|
|
|
import SsrAuthChainBPreset from './ssr-auth-chain-b';
|
2017-10-31 14:50:06 +00:00
|
|
|
|
2017-09-13 07:02:02 +00:00
|
|
|
// v2ray
|
|
|
|
import V2rayVmessPreset from './v2ray-vmess';
|
|
|
|
|
2017-09-08 02:47:36 +00:00
|
|
|
// obfuscator
|
|
|
|
import ObfsRandomPaddingPreset from './obfs-random-padding';
|
2017-08-16 03:47:53 +00:00
|
|
|
import ObfsHttpPreset from './obfs-http';
|
|
|
|
import ObfsTls12TicketPreset from './obfs-tls1.2-ticket';
|
2017-09-08 02:47:36 +00:00
|
|
|
|
|
|
|
// others
|
|
|
|
import AeadRandomCipherPreset from './aead-random-cipher';
|
2017-08-16 03:47:53 +00:00
|
|
|
|
2018-06-02 01:55:11 +00:00
|
|
|
/**
|
|
|
|
* check if a class is a valid preset class
|
|
|
|
* @param clazz
|
|
|
|
* @returns {boolean}
|
|
|
|
*/
|
|
|
|
function checkPresetClass(clazz) {
|
|
|
|
if (typeof clazz !== 'function') {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
// check require hooks
|
|
|
|
const requiredMethods = [
|
|
|
|
'onDestroy', 'onInit',
|
|
|
|
'beforeOut', 'beforeIn', 'clientOut', 'serverIn', 'serverOut', 'clientIn',
|
|
|
|
'beforeOutUdp', 'beforeInUdp', 'clientOutUdp', 'serverInUdp', 'serverOutUdp', 'clientInUdp'
|
|
|
|
];
|
|
|
|
if (requiredMethods.some((method) => typeof clazz.prototype[method] !== 'function')) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
const requiredStaticMethods = ['onCheckParams', 'onCache'];
|
|
|
|
return !requiredStaticMethods.some((method) => typeof clazz[method] !== 'function');
|
|
|
|
}
|
|
|
|
|
|
|
|
export const builtInPresetMap = {
|
2017-09-08 02:47:36 +00:00
|
|
|
// functional
|
2017-12-25 08:42:01 +00:00
|
|
|
'mux': MuxPreset,
|
2017-09-08 02:47:36 +00:00
|
|
|
|
2017-09-20 05:33:42 +00:00
|
|
|
// basic
|
2017-10-20 02:56:03 +00:00
|
|
|
'base-auth': BaseAuthPreset,
|
2017-09-20 05:33:42 +00:00
|
|
|
|
2017-09-08 02:47:36 +00:00
|
|
|
// shadowsocks
|
2017-08-16 03:47:53 +00:00
|
|
|
'ss-base': SsBasePreset,
|
|
|
|
'ss-stream-cipher': SsStreamCipherPreset,
|
|
|
|
'ss-aead-cipher': SsAeadCipherPreset,
|
2017-09-08 02:47:36 +00:00
|
|
|
|
2017-10-31 14:50:06 +00:00
|
|
|
// shadowsocksr
|
2017-11-01 03:42:23 +00:00
|
|
|
'ssr-auth-aes128-md5': SsrAuthAes128Md5Preset,
|
|
|
|
'ssr-auth-aes128-sha1': SsrAuthAes128Sha1Preset,
|
2017-11-03 07:45:41 +00:00
|
|
|
'ssr-auth-chain-a': SsrAuthChainAPreset,
|
|
|
|
'ssr-auth-chain-b': SsrAuthChainBPreset,
|
2017-10-31 14:50:06 +00:00
|
|
|
|
2017-09-13 07:02:02 +00:00
|
|
|
// v2ray
|
|
|
|
'v2ray-vmess': V2rayVmessPreset,
|
|
|
|
|
2017-09-08 02:47:36 +00:00
|
|
|
// obfuscator
|
2017-09-05 09:55:37 +00:00
|
|
|
'obfs-random-padding': ObfsRandomPaddingPreset,
|
2017-08-16 03:47:53 +00:00
|
|
|
'obfs-http': ObfsHttpPreset,
|
2017-08-28 14:41:45 +00:00
|
|
|
'obfs-tls1.2-ticket': ObfsTls12TicketPreset,
|
2017-09-08 02:47:36 +00:00
|
|
|
|
|
|
|
// others
|
2017-09-05 09:55:37 +00:00
|
|
|
'aead-random-cipher': AeadRandomCipherPreset
|
2017-08-16 03:47:53 +00:00
|
|
|
};
|
|
|
|
|
2018-05-04 14:08:36 +00:00
|
|
|
export function getPresetClassByName(name, allowPrivate = false) {
|
2018-06-02 01:55:11 +00:00
|
|
|
// load from built-in
|
|
|
|
let clazz = builtInPresetMap[name];
|
2017-08-16 03:47:53 +00:00
|
|
|
if (clazz === undefined) {
|
2017-10-19 13:32:40 +00:00
|
|
|
try {
|
2018-06-02 01:55:11 +00:00
|
|
|
// load from external
|
2017-10-19 13:32:40 +00:00
|
|
|
clazz = require(name);
|
|
|
|
} catch (err) {
|
2018-02-18 09:44:12 +00:00
|
|
|
throw Error(`cannot load preset "${name}" from built-in modules or external`);
|
2017-10-19 13:32:40 +00:00
|
|
|
}
|
2017-10-21 03:57:58 +00:00
|
|
|
if (!checkPresetClass(clazz)) {
|
2017-10-19 13:32:40 +00:00
|
|
|
throw Error(`definition of preset "${name}" is invalid`);
|
|
|
|
}
|
2017-08-16 03:47:53 +00:00
|
|
|
}
|
2018-05-04 14:08:36 +00:00
|
|
|
if (!allowPrivate && clazz.isPrivate) {
|
|
|
|
throw Error(`cannot load private preset "${name}"`);
|
|
|
|
}
|
2017-08-16 03:47:53 +00:00
|
|
|
return clazz;
|
|
|
|
}
|
2018-07-07 02:21:15 +00:00
|
|
|
|
|
|
|
export * from './defs';
|