occaecatidicta
Version:
199 lines (178 loc) • 5.43 kB
text/typescript
import * as crypto from 'crypto';
import * as util from 'util';
import * as path from 'path';
import * as fs from 'fs';
import {ServerInfo, AdminUserInfo, DEFAULT_ADMIN_PATH} from './constants';
/**
* Check and invoke callback
*/
export function invokeCallback (cb: Function , ...args: any[]) {
if (!!cb && typeof cb === 'function') {
cb.apply(null, Array.prototype.slice.call(arguments, 1));
}
}
/*
* Date format
*/
export function format(date: Date, format ?: string) {
format = format || 'MM-dd-hhmm';
let o: any = {
'M+': date.getMonth() + 1, // month
'd+': date.getDate(), // day
'h+': date.getHours(), // hour
'm+': date.getMinutes(), // minute
's+': date.getSeconds(), // second
'q+': Math.floor((date.getMonth() + 3) / 3), // quarter
'S': date.getMilliseconds() // millisecond
};
if (/(y+)/.test(format)) {
format = format.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));
}
for (let k in o) {
if (new RegExp('(' + k + ')').test(format)) {
format = format.replace(RegExp.$1,
RegExp.$1.length === 1 ? o[k] :
('00' + o[k]).substr(('' + o[k]).length));
}
}
return format;
}
export function compareServer(server1: ServerInfo, server2: ServerInfo) {
return (server1['host'] === server2['host']) &&
(server1['port'] === server2['port']);
}
/**
* Get the count of elements of object
*/
export function size(obj: any, type ?: string) {
let count = 0;
for (let i in obj) {
if (obj.hasOwnProperty(i) && typeof obj[i] !== 'function') {
if (!type) {
count++;
continue;
}
if (type && type === obj[i]['type']) {
count++;
}
}
}
return count;
}
export function md5(str: string) {
let md5sum = crypto.createHash('md5');
md5sum.update(str);
str = md5sum.digest('hex');
return str;
}
function canBeResolve(path: string) {
try {
require.resolve(path);
} catch (err) {
return false;
}
return true;
}
export function defaultAuthUser(msg: {username: string, password: string, md5: string}, env: string, cb: (user: AdminUserInfo) => void) {
let adminUser = null;
let appBase = process.cwd();
let adminUserPath = path.join(appBase, DEFAULT_ADMIN_PATH.ADMIN_USER);
let presentPath = path.join(appBase, 'config', env, DEFAULT_ADMIN_PATH.ADMIN_FILENAME);
if (canBeResolve(adminUserPath)) {
adminUser = require(adminUserPath);
} else if (canBeResolve(presentPath)) {
adminUser = require(presentPath);
} else {
cb(null);
return;
}
let username = msg['username'];
let password = msg['password'];
let md5Str = msg['md5'];
let len = adminUser.length;
if (md5Str) {
for (let i = 0; i < len; i++) {
let user = adminUser[i];
let p = '';
if (user['username'] === username) {
p = md5(user['password']);
if (password === p) {
cb(user);
return;
}
}
}
} else {
for (let i = 0; i < len; i++) {
let user = adminUser[i];
if (user['username'] === username && user['password'] === password) {
cb(user);
return;
}
}
}
cb(null);
}
export function defaultAuthServerMaster(msg: {id: string, serverType: string, token: string}, env: string, cb: (result: 'ok' | 'bad') => void) {
let id = msg['id'];
let type = msg['serverType'];
let token = msg['token'];
if (type === 'master') {
cb('ok');
return;
}
let servers = null;
let appBase = process.cwd();
let serverPath = path.join(appBase, '/config/adminServer');
let presentPath = null;
if (env) {
presentPath = path.join(appBase, 'config', env, 'adminServer');
}
if (canBeResolve(serverPath)) {
servers = require(serverPath);
} else if (canBeResolve(presentPath)) {
servers = require(presentPath);
} else {
cb('ok');
return;
}
let len = servers.length;
for (let i = 0; i < len; i++) {
let server = servers[i];
if (server['type'] === type && server['token'] === token) {
cb('ok');
return;
}
}
cb('bad');
return;
}
export function defaultAuthServerMonitor(msg: {id: string, serverType: string}, env: string, cb: (result: 'ok' | 'bad') => void) {
let id = msg['id'];
let type = msg['serverType'];
let servers = null;
let appBase = process.cwd();
let serverPath = path.join(appBase, '/config/adminServer');
let presentPath = null;
if (env) {
presentPath = path.join(appBase, 'config', env, 'adminServer');
}
if (canBeResolve(serverPath)) {
servers = require(serverPath);
} else if (canBeResolve(presentPath)) {
servers = require(presentPath);
} else {
cb('ok');
return;
}
let len = servers.length;
for (let i = 0; i < len; i++) {
let server = servers[i];
if (server['type'] === type) {
cb(server['token']);
return;
}
}
cb(null);
return;
}