Blame view

doraemon/middleware/limiter/rules/useragent.js 1.28 KB
姜枫 authored
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
'use strict';

const cache = global.yoho.cache.master;
const _ = require('lodash');
const logger = global.yoho.logger;


module.exports = (limiter, policy) => {
    const blackKey = 'pc:limiter:ua:black',
        whiteKey = 'pc:limiter:ua:white';

    const ua = limiter.req.header('User-Agent');

    return Promise.all([
        cache.getAsync(blackKey),
        cache.getAsync(whiteKey)
    ]).then((args) => {
        const blacklist = args[0] || [], whitelist = args[1] || [];

        if (blacklist.length === 0 && whitelist.length === 0) {
            return Promise.resolve(true);
        }

        const test = (list) => {
            let result = false;

            _.each(list, (item) => {
                let regexp;

                try {
                    regexp = new RegExp(item);
                } catch (e) {
                    logger.error(e);
                }

                if (regexp.test(ua)) {
                    result = true;
                }
            });

            return result;
        };

        if (test(blacklist)) {
            return Promise.resolve(policy);
        } else if (test(whitelist)) {
            return Promise.resolve({
                exclusion: true
            });
        } else {
            return Promise.resolve(true);
        }
    });

};