Commit d325c984 authored by antoor's avatar antoor

Optimizing the database operation code

优化数据库操作代码
parent 464c23d6
/**
* Shell数据库管理模块
* 更新:2016/04/28
* 作者:蚁逅 <https://github.com/antoor>
* 更新:2016/06/28
*/
'use strict';
......@@ -10,13 +9,10 @@ const fs = require('fs'),
dns = require('dns'),
path = require('path'),
CONF = require('./config'),
// Logger = require('./logger'),
// logger = null,
// logger = require('log4js').getLogger('Database'),
Datastore = require('nedb'),
qqwry = require("geoips").info();
let logger;
var logger;
class Database {
......@@ -80,6 +76,36 @@ class Database {
});
}
/**
* 根据URL解析出IP&&地理位置
* @param {String} url URL地址
* @return {Promise} ip, addr
*/
_url2ip(url) {
return new Promise((res, rej) => {
// 解析domain
const urlArr = url.match(/(\w+):\/\/([\w\.\-]+)[:]?([\d]*)([\s\S]*)/i);
// 无效url
if (!urlArr || urlArr.length < 3) {
return rej('Unable to resolve domain name from URL');
}
// 获取IP
const domain = urlArr[2];
dns.lookup(domain, (err, ip) => {
if (err) {
return rej(err.toString());
}
// 获取地理位置
const _addr = qqwry.searchIP(ip);
return res({
ip: ip,
addr: `${_addr.Country} ${_addr.Area}`
});
})
})
}
/**
* 添加shell数据
* @param {Object} event ipcMain对象
......@@ -87,31 +113,27 @@ class Database {
*/
addShell(event, opts) {
logger.info('addShell', opts);
// 获取目标IP以及地理位置
// 1. 获取域名
let parse = opts['url'].match(/(\w+):\/\/([\w\.\-]+)[:]?([\d]*)([\s\S]*)/i);
if (!parse || parse.length < 3) { return event.returnValue = 'Unable to resolve domain name from URL' };
// 2. 获取域名IP
dns.lookup(parse[2], (err, ip) => {
if (err) { return event.returnValue = err.toString() };
// 3. 查询IP对应物理位置
const addr = qqwry.searchIP(ip);
// 插入数据库
this.cursor.insert({
category: opts['category'] || 'default',
url: opts['url'],
pwd: opts['pwd'],
type: opts['type'],
ip: ip,
addr: `${addr.Country} ${addr.Area}`,
encode: opts['encode'],
encoder: opts['encoder'],
ctime: +new Date,
utime: +new Date
}, (err, ret) => {
event.returnValue = err || ret;
});
});
this._url2ip(opts['url'])
.then((ret) => {
this.cursor.insert({
category: opts['category'] || 'default',
url: opts['url'],
pwd: opts['pwd'],
type: opts['type'],
ip: ret['ip'],
addr: ret['addr'],
encode: opts['encode'],
encoder: opts['encoder'],
ctime: +new Date,
utime: +new Date
}, (_err, _ret) => {
event.returnValue = _err || _ret;
});
})
.catch((_err) => {
event.returnValue = _err;
})
}
/**
......@@ -122,33 +144,29 @@ class Database {
*/
editShell(event, opts) {
logger.warn('editShell', opts);
// 获取目标IP以及地理位置
// 1. 获取域名
let parse = opts['url'].match(/(\w+):\/\/([\w\.\-]+)[:]?([\d]*)([\s\S]*)/i);
if (!parse || parse.length < 3) { return event.returnValue = 'Unable to resolve domain name from URL' };
// 2. 获取域名IP
dns.lookup(parse[2], (err, ip) => {
if (err) { return event.returnValue = err.toString() };
// 3. 查询IP对应物理位置
const addr = qqwry.searchIP(ip);
// 更新数据库
this.cursor.update({
_id: opts['_id']
}, {
$set: {
ip: ip,
addr: `${addr.Country} ${addr.Area}`,
url: opts['url'],
pwd: opts['pwd'],
type: opts['type'],
encode: opts['encode'],
encoder: opts['encoder'],
utime: +new Date
}
}, (err, num) => {
event.returnValue = err || num;
this._url2ip(opts['url'])
.then((ret) => {
this.cursor.update({
_id: opts['_id']
}, {
$set: {
ip: ret['ip'],
addr: ret['addr'],
url: opts['url'],
pwd: opts['pwd'],
type: opts['type'],
encode: opts['encode'],
encoder: opts['encoder'],
utime: +new Date
}
}, (_err, _ret) => {
event.returnValue = _err || _ret;
})
})
});
.catch((_err) => {
event.returnValue = _err;
});
}
/**
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment