setting.js 5.05 KB
/**
 * [个人中心]个人设置
 * @author: jiangmin
 * @date: 2016/07/13
 */

'use strict';

const api = global.yoho.API;
const crypto = require('crypto');
const fs = require('fs');

/**
 * 日期数据
 * @returns {{selectYear: Array, selectMonth: Array, selectDay: Array}}
 */
const getSelect = ()=> {
    let date = new Date();
    let year = date.getFullYear();
    let selectYear = [];
    let selectMonth = [];
    let selectDay = [];

    for (let i = 1950; i < year + 1; i++) {
        selectYear.push({
            id: i,
            value: i + ''
        });
    }
    for (let j = 1; j < 13; j++) {
        selectMonth.push({
            id: j,
            value: j + ''
        });
    }
    for (let k = 1; k < 32; k++) {
        selectDay.push({
            id: k,
            value: k + ''
        });
    }

    return {
        selectYear,
        selectMonth,
        selectDay
    };
};

/**
 * 查询个人详细信息
 * @param uid
 * @returns {*}
 */
const _getUserInfo = (uid) => {

    return api.get('', {
        method: 'app.passport.profile',
        uid: uid
    }).then(result => {
        if (result && result.data) {
            let genders = [
                {
                    name: '男',
                    value: '1'
                },
                {
                    name: '女',
                    value: '2'
                },
                {
                    name: '保密',
                    value: '3'
                }
            ];

            return {
                info: result.data,
                genders: genders
            };
        }

    });
};

/**
 * 查询个人联系信息
 * @param uid
 * @returns {*}
 * @private
 */
const _getUserContactInfo = (uid)=> {
    return api.get('', {
        method: 'web.passport.getUserContacts',
        uid: uid
    }).then(result => result.data);
};

/**
 * 合并查询个人信息
 * @param uid
 * @returns {*}
 */
const getUserInfo = (uid) => {
    let getData = [_getUserInfo(uid), _getUserContactInfo(uid)];


    return Promise.all(getData).then(result => {
        return {
            info: result[0].info,
            genders: result[0].genders,
            concat: result[1],
            date: getSelect()
        };
    });
};


/**
 * 编辑个人详细信息
 * @param uid
 * @param nickName
 * @param username
 * @param gender
 * @param birthday
 * @returns {*}
 * @private
 */
const _editInfo = (uid, nickName, username, gender, birthday)=> {
    return api.get('', {
        method: 'app.passport.modifyBase',
        uid: uid,
        nick_name: nickName,
        username: username,
        gender: gender,
        birthday: birthday
    }).then(result => result);
};

/**
 * 编辑个人联系信息
 * @param uid
 * @param areaCode
 * @param mobile
 * @param fullAddress
 * @param zipCode
 * @returns {*}
 * @private
 */
const _editUserContactInfo = (uid, areaCode, mobile, fullAddress, zipCode)=> {
    let param = {
        method: 'web.passport.modifyUserContacts',
        uid: uid
    };

    if (mobile) {
        param.mobile = mobile;
    }
    if (zipCode) {
        param.zip_code = zipCode;
    }
    if (areaCode) {
        param.area_code = areaCode;
    }
    if (fullAddress) {
        param.full_address = fullAddress;
    }
    return api.get('', param).then(result => result);
};

/**
 * 合并编辑个人信息
 * @param uid
 * @param info
 * @returns {*}
 */
const editUserInfo = (uid, info) => {
    let getData = [
        _editInfo(uid, info.nick_name, info.username, info.gender, info.birthday),
        _editUserContactInfo(uid, info.area_code, info.mobile, info.full_address, info.zip_code)
    ];

    return Promise.all(getData).then(result => {
        return result;
    });
};

/**
 * 加密
 * @param data
 * @returns {string}
 */
const cipheriv = (data) => {
    let algorithm = 'aes-128-ecb';
    let key = 'yoho9646yoho9646';
    let clearEncoding = 'utf8';
    let cipherEncoding = 'base64';
    let iv = '';
    let cipher = crypto.createCipheriv(algorithm, key, iv);
    let cipherChunks = [];

    cipherChunks.push(cipher.update(data, clearEncoding, cipherEncoding));
    cipherChunks.push(cipher.final(cipherEncoding));

    return cipherChunks.join('');
};

/**
 * 解密
 * @param data
 * @returns {string}
 */
const decipheriv = (data) => {
    let algorithm = 'aes-128-ecb';
    let key = 'yoho9646yoho9646';
    let decipherEncoding = 'utf8';
    let clearEncoding = 'base64';
    let iv = '';
    let decipher = crypto.createDecipheriv(algorithm, key, iv);
    let decipherChunks = [];

    decipherChunks.push(decipher.update(data, clearEncoding, decipherEncoding));
    decipherChunks.push(decipher.final(decipherEncoding));

    return decipherChunks.join('');
};

/**
 * 上传头像
 * @param uid
 * @param bucket
 * @param fileData
 */
const modifyHead = (uid, bucket, fileData)=> {
    return api.postFile('', {
        method: 'app.passport.modifyHead',
        uid: uid,
        bucket: bucket
    }, {
        file_data: fs.createReadStream(fileData)
    });
};


module.exports = {
    getUserInfo,
    editUserInfo,
    cipheriv,
    decipheriv,
    modifyHead

};