Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
A
antSword
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
HuangJunbo
antSword
Commits
6431e477
Commit
6431e477
authored
Apr 30, 2016
by
antoor
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Reconstruction of optimized code
重构优化代码
parent
c03f6d26
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
474 additions
and
364 deletions
+474
-364
cache.js
modules/cache.js
+127
-109
config.js
modules/config.js
+47
-0
database.js
modules/database.js
+288
-244
menubar.js
modules/menubar.js
+12
-11
No files found.
modules/cache.js
View file @
6431e477
//
/**
// 缓存管理模块
* 缓存管理模块
//
* 更新:2016/04/28
* 作者:蚁逅 <https://github.com/antoor>
*/
'use strict'
;
'use strict'
;
const
fs
=
require
(
'fs'
);
const
fs
=
require
(
'fs'
),
const
path
=
require
(
'path'
);
path
=
require
(
'path'
),
const
log4js
=
require
(
'log4js'
);
CONF
=
require
(
'./config'
),
const
Datastore
=
require
(
'nedb'
);
logger
=
require
(
'log4js'
).
getLogger
(
'Cache'
),
Datastore
=
require
(
'nedb'
);
const
logger
=
log4js
.
getLogger
(
'Cache'
);
class
Cache
{
class
Cache
{
/**
* 初始化监听事件
* @param {Object} electron electron对象
* @return {[type]} [description]
*/
constructor
(
electron
)
{
constructor
(
electron
)
{
// 创建数据库
electron
.
ipcMain
// 获取用户保存目录(mac&&*unix=/home/path/,win=c:/path/appdata
.
on
(
'cache-add'
,
this
.
addCache
.
bind
(
this
))
let
dbPath
=
''
;
.
on
(
'cache-set'
,
this
.
setCache
.
bind
(
this
))
if
(
process
.
env
.
HOME
)
{
.
on
(
'cache-get'
,
this
.
getCache
.
bind
(
this
))
dbPath
=
path
.
join
(
process
.
env
.
HOME
,
'.antSword'
);
.
on
(
'cache-del'
,
this
.
delCache
.
bind
(
this
))
}
else
if
(
process
.
env
.
LOCALAPPPATH
)
{
.
on
(
'cache-clear'
,
this
.
clearCache
.
bind
(
this
))
dbPath
=
path
.
join
(
process
.
env
.
LOCALAPPPATH
,
'.antSword'
);
.
on
(
'cache-clearAll'
,
this
.
clearAllCache
.
bind
(
this
));
}
else
{
dbPath
=
'database'
;
};
// 创建数据目录
if
(
!
fs
.
existsSync
(
dbPath
))
{
fs
.
mkdirSync
(
dbPath
);
};
// 创建缓存目录
const
cachePath
=
path
.
join
(
dbPath
,
'cache'
);
if
(
!
fs
.
existsSync
(
cachePath
))
{
fs
.
mkdirSync
(
cachePath
);
};
this
.
dbPath
=
dbPath
;
this
.
cachePath
=
cachePath
;
// 监听数据请求
this
.
listenHandle
(
electron
.
ipcMain
);
}
listenHandle
(
ipcMain
)
{
logger
.
info
(
'listenHandle'
);
ipcMain
// 添加缓存
// arg={id="shellID",tag="存储标识",cache="存储内容"}
.
on
(
'cache-add'
,
(
event
,
arg
)
=>
{
logger
.
debug
(
'cache-add'
,
arg
);
this
.
createDB
(
arg
[
'id'
]).
insert
({
tag
:
arg
[
'tag'
],
cache
:
arg
[
'cache'
]
},
(
err
,
ret
)
=>
{
event
.
returnValue
=
err
||
ret
;
});
})
// 更新缓存
// arg = {id, tag, cache}
.
on
(
'cache-set'
,
(
event
,
arg
)
=>
{
logger
.
debug
(
'cache-set'
,
arg
);
this
.
createDB
(
arg
[
'id'
]).
update
({
tag
:
arg
[
'tag'
]
},
{
$set
:
{
cache
:
arg
[
'cache'
]
}
},
(
err
,
ret
)
=>
{
event
.
returnValue
=
err
||
ret
;
});
})
// 查询缓存
// arg={id="shellID", tag="存储标识"}
.
on
(
'cache-get'
,
(
event
,
arg
)
=>
{
logger
.
debug
(
'cache-get'
,
arg
);
this
.
createDB
(
arg
[
'id'
]).
findOne
({
tag
:
arg
[
'tag'
]
},
(
err
,
ret
)
=>
{
event
.
returnValue
=
err
||
ret
;
})
})
// 删除缓存
// arg = {id: 'SHELL-ID', tag: 'SAVE-TAG'}
.
on
(
'cache-del'
,
(
event
,
arg
)
=>
{
logger
.
warn
(
'cache-del'
,
arg
);
this
.
createDB
(
arg
[
'id'
]).
remove
({
tag
:
arg
[
'tag'
]
},
(
err
,
ret
)
=>
{
event
.
returnValue
=
err
||
ret
;
})
})
// 清空缓存
// arg = {id: 'SHELL-ID'}
.
on
(
'cache-clear'
,
(
event
,
arg
)
=>
{
logger
.
fatal
(
'cache-clear'
,
arg
);
try
{
fs
.
unlinkSync
(
path
.
join
(
this
.
cachePath
,
arg
[
'id'
]));
event
.
returnValue
=
true
;
}
catch
(
e
)
{
event
.
returnValue
=
e
;
}
})
// 清空所有缓存
.
on
(
'cache-clearAll'
,
(
event
,
arg
)
=>
{
logger
.
fatal
(
'cache-clearAll'
,
arg
);
try
{
fs
.
readdirSync
(
this
.
cachePath
).
map
((
_
)
=>
{
fs
.
unlinkSync
(
path
.
join
(
this
.
cachePath
,
_
));
});
event
.
returnValue
=
true
;
}
catch
(
e
)
{
event
.
returnValue
=
e
;
}
})
}
}
createDB
(
id
)
{
/**
// 创建数据库
* 创建nedb数据库文件
* @param {String} id 数据存储文件名
* @return {[type]} [description]
*/
createDB
(
id
=
String
(
+
new
Date
))
{
return
new
Datastore
({
return
new
Datastore
({
filename
:
path
.
join
(
this
.
cachePath
,
id
),
filename
:
path
.
join
(
CONF
.
cachePath
,
id
),
autoload
:
true
autoload
:
true
});
});
}
}
/**
* 添加缓存数据
* @param {Object} event ipcMain对象
* @param {Object} opts 缓存配置(id,tag,cache
*/
addCache
(
event
,
opts
)
{
logger
.
debug
(
'addCache'
,
opts
);
this
.
createDB
(
opts
[
'id'
]).
insert
({
tag
:
opts
[
'tag'
],
cache
:
opts
[
'cache'
]
},
(
err
,
ret
)
=>
{
event
.
returnValue
=
err
||
ret
;
});
}
/**
* 设置缓存数据
* @param {Object} event ipcMain对象
* @param {Object} opts 缓存配置(id,tag,cache
*/
setCache
(
event
,
opts
)
{
logger
.
debug
(
'setCache'
,
opts
);
this
.
createDB
(
opts
[
'id'
]).
update
({
tag
:
opts
[
'tag'
]
},
{
$set
:
{
cache
:
opts
[
'cache'
]
}
},
(
err
,
ret
)
=>
{
event
.
returnValue
=
err
||
ret
;
});
}
/**
* 获取缓存数据
* @param {Object} event ipcMain对象
* @param {Object} opts 缓存配置(id,tag)
* @return {[type]} [description]
*/
getCache
(
event
,
opts
)
{
logger
.
debug
(
'getCache'
,
opts
);
this
.
createDB
(
opts
[
'id'
]).
findOne
({
tag
:
opts
[
'tag'
]
},
(
err
,
ret
)
=>
{
event
.
returnValue
=
err
||
ret
;
})
}
/**
* 删除缓存
* @param {Object} event ipcMain对象
* @param {Object} opts 缓存配置(id,tag)
* @return {[type]} [description]
*/
delCache
(
event
,
opts
)
{
logger
.
warn
(
'delCache'
,
opts
);
this
.
createDB
(
opts
[
'id'
]).
remove
({
tag
:
opts
[
'tag'
]
},
(
err
,
ret
)
=>
{
event
.
returnValue
=
err
||
ret
;
});
}
/**
* 清空缓存数据
* @param {Object} event ipcMain对象
* @param {Object} opts 缓存配置(id)
* @return {[type]} [description]
*/
clearCache
(
event
,
opts
)
{
logger
.
fatal
(
'clearCache'
,
opts
);
try
{
fs
.
unlinkSync
(
path
.
join
(
CONF
.
cachePath
,
opts
[
'id'
]));
event
.
returnValue
=
true
;
}
catch
(
e
)
{
event
.
returnValue
=
e
;
}
}
/**
* 清空所有缓存数据
* @param {Object} event ipcMain对象
* @param {Object} opts 缓存配置(null)
* @return {[type]} [description]
*/
clearAllCache
(
event
,
opts
)
{
logger
.
fatal
(
'clearAllCache'
,
opts
);
try
{
fs
.
readdirSync
(
CONF
.
cachePath
).
map
((
_
)
=>
{
fs
.
unlinkSync
(
path
.
join
(
CONF
.
cachePath
,
_
));
});
event
.
returnValue
=
true
;
}
catch
(
e
)
{
event
.
returnValue
=
e
;
}
}
}
}
module
.
exports
=
Cache
;
\ No newline at end of file
module
.
exports
=
Cache
;
modules/config.js
0 → 100644
View file @
6431e477
/**
* 中国蚁剑::后端配置模块
* ? 用于进行一些通用的变量如初始化目录等设置
* 开写:2016/04/26
* 更新:2016/04/28
* 作者:蚁逅 <https://github.com/antoor>
*/
'use strict'
;
const
fs
=
require
(
'fs'
),
path
=
require
(
'path'
);
class
Conf
{
constructor
()
{
// 获取数据存储目录
this
.
basePath
=
path
.
join
(
process
.
env
.
HOME
||
process
.
env
.
LOCALAPPPATH
||
process
.
cwd
()
||
'.'
,
'.antSword'
);
// 创建.antSword目录
!
fs
.
existsSync
(
this
.
basePath
)
?
fs
.
mkdirSync
(
this
.
basePath
)
:
null
;
}
/**
* 获取数据存储路径
* @return {String} file-path
*/
get
dataPath
()
{
return
path
.
join
(
this
.
basePath
,
'shell.db'
);
}
/**
* 获取缓存目录
* @return {String} dir-path
*/
get
cachePath
()
{
let
_
=
path
.
join
(
this
.
basePath
,
'/cache/'
);
// 创建缓存目录
!
fs
.
existsSync
(
_
)
?
fs
.
mkdirSync
(
_
)
:
null
;
return
_
;
}
}
module
.
exports
=
new
Conf
();
modules/database.js
View file @
6431e477
//
/**
// shell数据管理模块
* Shell数据库管理模块
//
* 更新:2016/04/28
* 作者:蚁逅 <https://github.com/antoor>
*/
'use strict'
;
'use strict'
;
const
fs
=
require
(
'fs'
);
const
fs
=
require
(
'fs'
),
const
dns
=
require
(
'dns'
);
dns
=
require
(
'dns'
),
const
path
=
require
(
'path'
);
path
=
require
(
'path'
),
const
log4js
=
require
(
'log4js'
);
CONF
=
require
(
'./config'
),
const
Datastore
=
require
(
'nedb'
);
logger
=
require
(
'log4js'
).
getLogger
(
'Database'
),
const
qqwry
=
require
(
"lib-qqwry"
).
info
();
Datastore
=
require
(
'nedb'
),
qqwry
=
require
(
"lib-qqwry"
).
info
();
const
logger
=
log4js
.
getLogger
(
'Database'
);
class
Database
{
class
Database
{
/**
* 初始化数据库
* @param {electron} electron electron对象
* @return {[type]} [description]
*/
constructor
(
electron
)
{
constructor
(
electron
)
{
this
.
cursor
=
this
.
createDB
();
this
.
cursor
=
new
Datastore
({
// 监听数据请求
filename
:
CONF
.
dataPath
,
const
ipcMain
=
electron
.
ipcMain
;
this
.
listenHandle
(
ipcMain
);
}
createDB
()
{
// 创建数据库
// 获取用户保存目录(mac&&*unix=/home/path/,win=c:/path/appdata
let
dbPath
=
''
;
if
(
process
.
env
.
HOME
)
{
dbPath
=
path
.
join
(
process
.
env
.
HOME
,
'.antSword'
);
}
else
if
(
process
.
env
.
LOCALAPPPATH
)
{
dbPath
=
path
.
join
(
process
.
env
.
LOCALAPPPATH
,
'.antSword'
);
}
else
{
dbPath
=
'database'
;
};
// 创建目录
if
(
!
fs
.
existsSync
(
dbPath
))
{
fs
.
mkdirSync
(
dbPath
);
};
// 创建数据库
return
new
Datastore
({
filename
:
path
.
join
(
dbPath
,
'shell.db'
),
autoload
:
true
autoload
:
true
});
});
// 监听事件
electron
.
ipcMain
.
on
(
'shell-add'
,
this
.
addShell
.
bind
(
this
))
.
on
(
'shell-del'
,
this
.
delShell
.
bind
(
this
))
.
on
(
'shell-edit'
,
this
.
editShell
.
bind
(
this
))
.
on
(
'shell-move'
,
this
.
moveShell
.
bind
(
this
))
.
on
(
'shell-find'
,
this
.
findShell
.
bind
(
this
))
.
on
(
'shell-clear'
,
this
.
clearShell
.
bind
(
this
))
.
on
(
'shell-findOne'
,
this
.
findOneShell
.
bind
(
this
))
.
on
(
'shell-addDataConf'
,
this
.
addDataConf
.
bind
(
this
))
.
on
(
'shell-delDataConf'
,
this
.
delDataConf
.
bind
(
this
))
.
on
(
'shell-getDataConf'
,
this
.
getDataConf
.
bind
(
this
))
.
on
(
'shell-renameCategory'
,
this
.
renameShellCategory
.
bind
(
this
));
}
}
listenHandle
(
ipcMain
)
{
/**
ipcMain
* 查询shell数据
// 查询数据数据,arg=find条件,比如arg={category:'test'}
* @param {Object} event ipcMain对象
.
on
(
'shell-find'
,
(
event
,
arg
)
=>
{
* @param {Object} opts 查询配置
logger
.
debug
(
'shell-find'
,
arg
);
* @return {[type]} [description]
this
.
cursor
*/
.
find
(
arg
||
{})
findShell
(
event
,
opts
=
{})
{
.
sort
({
logger
.
debug
(
'findShell'
,
opts
);
utime
:
-
1
this
.
cursor
})
.
find
(
opts
)
.
exec
((
err
,
ret
)
=>
{
.
sort
({
event
.
returnValue
=
ret
||
[];
utime
:
-
1
});
})
// 查询单数据
.
on
(
'shell-findOne'
,
(
event
,
id
)
=>
{
logger
.
debug
(
'shell-findOne'
,
id
);
this
.
cursor
.
findOne
({
_id
:
id
},
(
err
,
ret
)
=>
{
event
.
returnValue
=
err
||
ret
;
});
})
// 插入数据
// arg={category,url,pwd,ip,addr,type,encode,encoder,ctime,utime}
.
on
(
'shell-add'
,
(
event
,
arg
)
=>
{
logger
.
info
(
'shell-add
\
n'
,
arg
);
// 获取目标IP以及地理位置
// 1. 获取域名
const
parse
=
arg
[
'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
:
arg
[
'category'
]
||
'default'
,
url
:
arg
[
'url'
],
pwd
:
arg
[
'pwd'
],
type
:
arg
[
'type'
],
ip
:
ip
,
addr
:
`
${
addr
.
Country
}
${
addr
.
Area
}
`
,
encode
:
arg
[
'encode'
],
encoder
:
arg
[
'encoder'
],
ctime
:
+
new
Date
,
utime
:
+
new
Date
},
(
err
,
ret
)
=>
{
event
.
returnValue
=
err
||
ret
;
});
});
})
/*
// 编辑数据
// {url,pwd,encode,type,encoder,utime}
*/
.
on
(
'shell-edit'
,
(
event
,
arg
)
=>
{
logger
.
warn
(
'shell-edit
\
n'
,
arg
);
// 获取目标IP以及地理位置
// 1. 获取域名
const
parse
=
arg
[
'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
:
arg
[
'_id'
]
},
{
$set
:
{
ip
:
ip
,
addr
:
`
${
addr
.
Country
}
${
addr
.
Area
}
`
,
url
:
arg
[
'url'
],
pwd
:
arg
[
'pwd'
],
type
:
arg
[
'type'
],
encode
:
arg
[
'encode'
],
encoder
:
arg
[
'encoder'
],
utime
:
+
new
Date
}
},
(
err
,
num
)
=>
{
event
.
returnValue
=
err
||
num
;
})
});
})
// 删除数据
.
on
(
'shell-del'
,
(
event
,
ids
)
=>
{
logger
.
warn
(
'shell-del'
,
ids
);
this
.
cursor
.
remove
({
_id
:
{
$in
:
ids
}
},
{
multi
:
true
},
(
err
,
num
)
=>
{
event
.
returnValue
=
err
||
num
;
})
})
// 清空分类数据
.
on
(
'shell-clear'
,
(
event
,
category
)
=>
{
logger
.
fatal
(
'shell-clear'
,
category
);
this
.
cursor
.
remove
({
category
:
category
},
{
multi
:
true
},
(
err
,
num
)
=>
{
event
.
returnValue
=
err
||
num
;
})
})
// 重命名分类
// {oldName, newName}
.
on
(
'shell-renameCategory'
,
(
event
,
arg
)
=>
{
logger
.
warn
(
'shell-renameCategory'
,
arg
);
this
.
cursor
.
update
({
category
:
arg
[
'oldName'
]
},
{
$set
:
{
category
:
arg
[
'newName'
]
}
},
{
multi
:
true
},
(
err
,
num
)
=>
{
event
.
returnValue
=
err
||
num
;
})
})
})
// 移动数据
.
exec
((
err
,
ret
)
=>
{
.
on
(
'shell-move'
,
(
event
,
arg
)
=>
{
event
.
returnValue
=
ret
||
[];
logger
.
info
(
'shell-move'
,
arg
);
});
this
.
cursor
.
update
({
}
_id
:
{
$in
:
arg
[
'ids'
]
||
[]
/**
}
* 查询单一shell数据
},
{
* @param {Object} event ipcMain对象
$set
:
{
* @param {String} opts shell id
category
:
arg
[
'category'
]
||
'default'
,
* @return {[type]} [description]
utime
:
+
new
Date
*/
}
findOneShell
(
event
,
opts
)
{
},
{
logger
.
debug
(
'findOneShell'
,
opts
);
multi
:
true
this
.
cursor
.
findOne
({
},
(
err
,
num
)
=>
{
_id
:
opts
event
.
returnValue
=
err
||
num
;
},
(
err
,
ret
)
=>
{
})
event
.
returnValue
=
err
||
ret
;
})
});
//
}
// 添加数据库配置
//
/**
.
on
(
'shell-addDataConf'
,
(
event
,
arg
)
=>
{
* 添加shell数据
logger
.
info
(
'shell-addDataConf'
,
arg
);
* @param {Object} event ipcMain对象
// 1. 获取原配置列表
* @param {Object} opts 数据(url,category,pwd,type,encode,encoder
this
.
cursor
.
findOne
({
*/
_id
:
arg
[
'_id'
]
addShell
(
event
,
opts
)
{
},
(
err
,
ret
)
=>
{
logger
.
info
(
'addShell'
,
opts
);
let
confs
=
ret
[
'database'
]
||
{};
// 获取目标IP以及地理位置
// 随机Id(顺序增长
// 1. 获取域名
const
random_id
=
parseInt
(
+
new
Date
+
Math
.
random
()
*
1000
).
toString
(
16
);
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'
};
confs
[
random_id
]
=
arg
[
'data'
];
// 2. 获取域名IP
// 更新数据库
dns
.
lookup
(
parse
[
2
],
(
err
,
ip
)
=>
{
this
.
cursor
.
update
({
if
(
err
)
{
return
event
.
returnValue
=
err
.
toString
()
};
_id
:
arg
[
'_id'
]
// 3. 查询IP对应物理位置
},
{
const
addr
=
qqwry
.
searchIP
(
ip
);
$set
:
{
// 插入数据库
database
:
confs
,
this
.
cursor
.
insert
({
utime
:
+
new
Date
category
:
opts
[
'category'
]
||
'default'
,
}
url
:
opts
[
'url'
],
},
(
_err
,
_ret
)
=>
{
pwd
:
opts
[
'pwd'
],
event
.
returnValue
=
random_id
;
type
:
opts
[
'type'
],
});
ip
:
ip
,
});
addr
:
`
${
addr
.
Country
}
${
addr
.
Area
}
`
,
})
encode
:
opts
[
'encode'
],
//
encoder
:
opts
[
'encoder'
],
// 删除数据库配置
ctime
:
+
new
Date
,
// arg={_id: 'shell-ID',id: 'data-id'}
utime
:
+
new
Date
//
},
(
err
,
ret
)
=>
{
.
on
(
'shell-delDataConf'
,
(
event
,
arg
)
=>
{
event
.
returnValue
=
err
||
ret
;
logger
.
info
(
'shell-delDataConf'
,
arg
);
});
// 1. 获取原配置
});
this
.
cursor
.
findOne
({
}
_id
:
arg
[
'_id'
]
},
(
err
,
ret
)
=>
{
/**
let
confs
=
ret
[
'database'
]
||
{};
* 编辑shell数据
// 2. 删除配置
* @param {Object} event ipcMain对象
delete
confs
[
arg
[
'id'
]];
* @param {Object} opts 数据(url,_id,pwd,type,encode,encoder
// 3. 更新数据库
* @return {[type]} [description]
this
.
cursor
.
update
({
*/
_id
:
arg
[
'_id'
]
editShell
(
event
,
opts
)
{
},
{
logger
.
warn
(
'editShell'
,
opts
);
$set
:
{
// 获取目标IP以及地理位置
database
:
confs
,
// 1. 获取域名
utime
:
+
new
Date
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'
};
},
(
_err
,
_ret
)
=>
{
// 2. 获取域名IP
event
.
returnValue
=
_err
||
_ret
;
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'
]
.
on
(
'shell-getDataConf'
,
(
event
,
arg
)
=>
{
},
{
logger
.
info
(
'shell-getDataConf'
,
arg
);
$set
:
{
this
.
cursor
.
findOne
({
ip
:
ip
,
_id
:
arg
[
'_id'
]
addr
:
`
${
addr
.
Country
}
${
addr
.
Area
}
`
,
},
(
err
,
ret
)
=>
{
url
:
opts
[
'url'
],
const
confs
=
ret
[
'database'
]
||
{};
pwd
:
opts
[
'pwd'
],
event
.
returnValue
=
err
||
confs
[
arg
[
'id'
]];
type
:
opts
[
'type'
],
});
encode
:
opts
[
'encode'
],
encoder
:
opts
[
'encoder'
],
utime
:
+
new
Date
}
},
(
err
,
num
)
=>
{
event
.
returnValue
=
err
||
num
;
})
})
});
}
/**
* 删除shell数据
* @param {Object} event ipcMain对象
* @param {Array} opts 要删除的shell-id列表
* @return {[type]} [description]
*/
delShell
(
event
,
opts
)
{
logger
.
warn
(
'delShell'
,
opts
);
this
.
cursor
.
remove
({
_id
:
{
$in
:
opts
}
},
{
multi
:
true
},
(
err
,
num
)
=>
{
event
.
returnValue
=
err
||
num
;
})
}
/**
* 删除分类shell数据
* @param {Object} event ipcMain对象
* @param {String} opts shell分类名
* @return {[type]} [description]
*/
clearShell
(
event
,
opts
)
{
logger
.
fatal
(
'clearShell'
,
opts
);
this
.
cursor
.
remove
({
category
:
opts
},
{
multi
:
true
},
(
err
,
num
)
=>
{
event
.
returnValue
=
err
||
num
;
})
}
/**
* 重命名shell分类
* @param {Object} event ipcMain对象
* @param {Object} opts 配置(oldName,newName
* @return {[type]} [description]
*/
renameShellCategory
(
event
,
opts
)
{
logger
.
warn
(
'renameShellCategory'
,
opts
);
this
.
cursor
.
update
({
category
:
opts
[
'oldName'
]
},
{
$set
:
{
category
:
opts
[
'newName'
]
}
},
{
multi
:
true
},
(
err
,
num
)
=>
{
event
.
returnValue
=
err
||
num
;
})
}
}
/**
* 移动shell数据分类
* @param {Object} event ipcMain对象
* @param {Object} opts 配置(ids,category
* @return {[type]} [description]
*/
moveShell
(
event
,
opts
)
{
logger
.
info
(
'moveShell'
,
opts
);
this
.
cursor
.
update
({
_id
:
{
$in
:
opts
[
'ids'
]
||
[]
}
},
{
$set
:
{
category
:
opts
[
'category'
]
||
'default'
,
utime
:
+
new
Date
}
},
{
multi
:
true
},
(
err
,
num
)
=>
{
event
.
returnValue
=
err
||
num
;
})
}
/**
* 添加数据库配置
* @param {Object} event ipcMain对象
* @param {Object} opts 配置(_id,data
*/
addDataConf
(
event
,
opts
)
{
logger
.
info
(
'addDataConf'
,
opts
);
// 1. 获取原配置列表
this
.
cursor
.
findOne
({
_id
:
opts
[
'_id'
]
},
(
err
,
ret
)
=>
{
let
confs
=
ret
[
'database'
]
||
{};
// 随机Id(顺序增长
const
random_id
=
parseInt
(
+
new
Date
+
Math
.
random
()
*
1000
).
toString
(
16
);
// 添加到配置
confs
[
random_id
]
=
opts
[
'data'
];
// 更新数据库
this
.
cursor
.
update
({
_id
:
opts
[
'_id'
]
},
{
$set
:
{
database
:
confs
,
utime
:
+
new
Date
}
},
(
_err
,
_ret
)
=>
{
event
.
returnValue
=
random_id
;
});
});
}
/**
* 删除数据库配置
* @param {Object} event ipcMain对象
* @param {Object} opts 配置(_id,id
* @return {[type]} [description]
*/
delDataConf
(
event
,
opts
)
{
logger
.
info
(
'delDataConf'
,
opts
);
// 1. 获取原配置
this
.
cursor
.
findOne
({
_id
:
opts
[
'_id'
]
},
(
err
,
ret
)
=>
{
let
confs
=
ret
[
'database'
]
||
{};
// 2. 删除配置
delete
confs
[
opts
[
'id'
]];
// 3. 更新数据库
this
.
cursor
.
update
({
_id
:
opts
[
'_id'
]
},
{
$set
:
{
database
:
confs
,
utime
:
+
new
Date
}
},
(
_err
,
_ret
)
=>
{
event
.
returnValue
=
_err
||
_ret
;
});
})
}
/**
* 获取单个数据库配置
* @param {Object} event ipcMain对象
* @param {Object} opts 配置(_id,id
* @return {[type]} [description]
*/
getDataConf
(
event
,
opts
)
{
logger
.
info
(
'getDatConf'
,
opts
);
this
.
cursor
.
findOne
({
_id
:
opts
[
'_id'
]
},
(
err
,
ret
)
=>
{
const
confs
=
ret
[
'database'
]
||
{};
event
.
returnValue
=
err
||
confs
[
opts
[
'id'
]];
});
}
}
}
module
.
exports
=
Database
;
module
.
exports
=
Database
;
\ No newline at end of file
modules/menubar.js
View file @
6431e477
...
@@ -4,20 +4,18 @@
...
@@ -4,20 +4,18 @@
'use strict'
;
'use strict'
;
// 读取package.json信息
const
info
=
require
(
'../package'
);
class
Menubar
{
class
Menubar
{
constructor
(
electron
,
app
,
mainWindow
)
{
constructor
(
electron
,
app
,
mainWindow
)
{
const
Menu
=
electron
.
Menu
;
const
Menu
=
electron
.
Menu
;
const
ipcMain
=
electron
.
ipcMain
;
// 清空菜单栏
// 清空菜单栏
Menu
.
setApplicationMenu
(
Menu
.
buildFromTemplate
([]));
Menu
.
setApplicationMenu
(
Menu
.
buildFromTemplate
([]));
// 监听重载菜单事件
// 监听重载菜单事件
ipcMain
.
on
(
'menubar'
,
this
.
reload
.
bind
(
this
));
electron
.
ipcMain
ipcMain
.
on
(
'quit'
,
app
.
quit
.
bind
(
app
));
.
on
(
'quit'
,
app
.
quit
.
bind
(
app
))
.
on
(
'menubar'
,
this
.
reload
.
bind
(
this
));
this
.
electron
=
electron
;
this
.
electron
=
electron
;
this
.
app
=
app
;
this
.
app
=
app
;
...
@@ -25,7 +23,12 @@ class Menubar {
...
@@ -25,7 +23,12 @@ class Menubar {
this
.
mainWindow
=
mainWindow
;
this
.
mainWindow
=
mainWindow
;
}
}
// 刷新菜单
/**
* 重新载入菜单
* @param {Object} event ipcMain对象
* @param {Object} LANG 语言模板
* @return {[type]} [description]
*/
reload
(
event
,
LANG
)
{
reload
(
event
,
LANG
)
{
// 菜单模板
// 菜单模板
const
template
=
[
const
template
=
[
...
@@ -36,9 +39,7 @@ class Menubar {
...
@@ -36,9 +39,7 @@ class Menubar {
{
{
label
:
LANG
[
'shell'
][
'add'
],
label
:
LANG
[
'shell'
][
'add'
],
accelerator
:
'Shift+A'
,
accelerator
:
'Shift+A'
,
click
:
()
=>
{
click
:
event
.
sender
.
send
.
bind
(
event
.
sender
,
'menubar'
,
'shell-add'
)
event
.
sender
.
send
(
'menubar'
,
'shell-add'
);
}
},
{
},
{
label
:
LANG
[
'shell'
][
'search'
],
label
:
LANG
[
'shell'
][
'search'
],
accelerator
:
'Shift+S'
,
accelerator
:
'Shift+S'
,
...
@@ -99,7 +100,7 @@ class Menubar {
...
@@ -99,7 +100,7 @@ class Menubar {
}
}
];
];
// 调试菜单
// 调试菜单
if
(
info
[
'
debug'
])
{
if
(
process
.
env
[
'npm_package_
debug'
])
{
template
.
push
({
template
.
push
({
label
:
LANG
[
'debug'
][
'title'
],
label
:
LANG
[
'debug'
][
'title'
],
submenu
:
[
submenu
:
[
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment