ip-white-list.js 1.27 KB
const _ = require('lodash');
const co = Promise.coroutine;
const logger = global.yoho.logger;
const cache = global.yoho.cache.master;
const WHITE_LIST_KEY = 'whitelist:ip:';

const IP_WHITE_LIST = [
    '106.38.38.146', // 北京办公区域
    '106.38.38.147', // 北京办公区域
    '106.39.86.227', // 北京办公区域
    '218.94.75.58', // 南京办公区域
    '218.94.75.50', // 南京办公区域
    '218.94.77.166', // 南京办公区域

    // '222.73.196.18', // B站合作方单击次数快加白名单
    '123.206.73.107', // 腾讯云出口IP
    '139.199.35.21', // 腾讯云出口IP
    '139.199.29.44', // 腾讯云出口IP
    '123.206.21.19' // 腾讯云出口IP
];

const IP_WHITE_SEGMENT = [
    '10.66.', // 内网IP段
    '192.168.' // 内网IP段
];

module.exports = (remoteIp) => {
    let key = `${WHITE_LIST_KEY}${remoteIp}`;
    let remoteIpSegment = `${remoteIp.split('.').slice(0, 2).join('.')}.`;

    return co(function* () {
        if (_.includes(IP_WHITE_LIST, remoteIp) || _.includes(IP_WHITE_SEGMENT, remoteIpSegment)) {
            return true;
        }

        let result = Boolean(yield cache.getAsync(key));

        logger.debug(key, result);

        return result;
    })().catch(e => {
        console.error(e);
        return false;
    });
};