path-white-list.js 1.34 KB

const _ = require('lodash');
const logger = global.yoho.logger;
const cache = global.yoho.cache.master;
const WHITE_LIST_KEY = 'pc:limiter:whitelist:path';

const DEFAULT_PATH_WHITE_LIST = [
    '/3party/check',
    '/passport/images-risk.png',
    '/passport/images.png',
    '/passport/cert/headerTip',
    '/common/getbanner',
    '/common/suggestfeedback',
    '/product/search/history',
    '/product/search/suggest',
    '/3party/captcha.png'
];

const cacheWhiteList = {
    nowTime() {
        return Date.parse(new Date()) / 1000;
    },
    getValue() {
        if (this.updateTime || this.nowTime() - this.updateTime > 60 * 10) {
            this.syncRemoteConfig();
        }

        return _.uniq(_.concat([], DEFAULT_PATH_WHITE_LIST, _.toArray(this.whiteList)));
    },
    syncRemoteConfig() {
        if (this.syncing) {
            return;
        }

        this.syncing = true;

        cache.getAsync(WHITE_LIST_KEY).then(res => {
            this.updateTime = this.nowTime();

            if (!res) {
                return;
            }

            this.whiteList = JSON.parse(res);
            this.syncing = false;
        }).catch((e) => {
            this.syncing = false;
            logger.debug('whitelist path parse error. ' + JSON.stringfy(e));
        });
    }
};

module.exports = () => {
    return cacheWhiteList.getValue();
};