captcha-img-service.js 1.78 KB
const CaptchaApi = require('./captcha-api');
const logger = global.yoho.logger;
const config = global.yoho.config;

const _ = require('lodash');

module.exports = class extends global.yoho.BaseModel {
    constructor(ctx) {
        super(ctx);

        this.api = new CaptchaApi(ctx);
    }

    generateCaptcha(id) {
        return this.api.gen(id)
            .then(result => {
                logger.info('get captcha from ', result.data.url);
                return result;
            });
    }

    _checkUniverse(captcha) {
        return captcha === config.UNIVERSAL_CAPTCHA ?
            Promise.resolve({code: 200}) :
            Promise.reject();
    }

    check(id, captcha) {
        return this._checkUniverse(captcha)
            .catch(() => this.api.check(id, captcha))
            .then((result) => {
                logger.info(`app.verified.graphic [${captcha}] result: `, JSON.stringify(result));
                return result;
            })
            .then((result) => {
                if (result.code === 200) {
                    return {
                        code: 200,
                        message: '验证成功'
                    };
                } else if (result.code === 503 || result.code === 504 || result.code === 501) {
                    return {
                        code: 403,
                        message: result.message
                    };
                } else {
                    return {
                        code: 405,
                        message: result.message,
                        data: {
                            needCaptcha: true
                        }
                    };
                }
            });
    }

    async try() {
        const result = this.api.try();

        return _.get(result, 'data', true);
    }
};