mirror of
https://github.com/midoks/mdserver-web.git
synced 2026-10-20 08:25:50 +08:00
update
This commit is contained in:
@@ -24,7 +24,7 @@
|
||||
<p onclick="pluginInitD('mongodb');">自启动</p>
|
||||
<p onclick="mongoSetConfig();">配置修改</p>
|
||||
<p onclick="pluginConfig('mongodb');">配置文件</p>
|
||||
<p onclick="docList();">文档列表</p>
|
||||
<p onclick="dbList();">数据列表</p>
|
||||
<p onclick="mongoDocStatus();">文档状态</p>
|
||||
<p onclick="mongoStatus();">负载状态</p>
|
||||
<p onclick="mongoReplStatus();">复制状态</p>
|
||||
|
||||
+126
-9
@@ -310,6 +310,54 @@ def saveConfig():
|
||||
reload()
|
||||
return mw.returnJson(True,'设置成功')
|
||||
|
||||
# print(mg_pass)
|
||||
# listDbs = client.admin.command({"listDatabases": 1})
|
||||
# print(listDbs)
|
||||
# print(client_pass.list_database_names());
|
||||
def initMgRoot(password='',force=0):
|
||||
|
||||
if force == 1:
|
||||
d = getConfigData()
|
||||
auth_t = d['security']['authorization']
|
||||
d['security']['authorization'] = 'disabled'
|
||||
setConfig(d)
|
||||
reload()
|
||||
|
||||
client = mongdbClient()
|
||||
db = client.admin
|
||||
|
||||
db_all_rules = [
|
||||
{'role': 'root', 'db': 'admin'},
|
||||
{'role': 'clusterAdmin', 'db': 'admin'},
|
||||
{'role': 'readAnyDatabase', 'db': 'admin'},
|
||||
{'role': 'readWriteAnyDatabase', 'db': 'admin'},
|
||||
{'role': 'userAdminAnyDatabase', 'db': 'admin'},
|
||||
{'role': 'dbAdminAnyDatabase', 'db': 'admin'},
|
||||
{'role': 'userAdmin', 'db': 'admin'},
|
||||
{'role': 'dbAdmin', 'db': 'admin'}
|
||||
]
|
||||
|
||||
if password =='':
|
||||
mg_pass = mw.getRandomString(8)
|
||||
else:
|
||||
mg_pass = password
|
||||
|
||||
try:
|
||||
db.command("createUser", "root", pwd=mg_pass, roles=db_all_rules)
|
||||
except Exception as e:
|
||||
if force == 0:
|
||||
db.command("updateUser", "root", pwd=mg_pass, roles=db_all_rules)
|
||||
else:
|
||||
db.command('dropUser','root')
|
||||
db.command("createUser", "root", pwd=mg_pass, roles=db_all_rules)
|
||||
r = pSqliteDb('config').where('id=?', (1,)).save('mg_root',(mg_pass,))
|
||||
|
||||
if force == 1:
|
||||
d['security']['authorization'] = auth_t
|
||||
setConfig(d)
|
||||
reload()
|
||||
return True
|
||||
|
||||
def initUserRoot():
|
||||
d = getConfigData()
|
||||
auth_t = d['security']['authorization']
|
||||
@@ -342,11 +390,6 @@ def initUserRoot():
|
||||
# print(r1, r2)
|
||||
|
||||
r = pSqliteDb('config').where('id=?', (1,)).save('mg_root',(mg_pass,))
|
||||
# print(r)
|
||||
# print(mg_pass)
|
||||
# listDbs = client.admin.command({"listDatabases": 1})
|
||||
# print(listDbs)
|
||||
# print(client_pass.list_database_names());
|
||||
|
||||
d['security']['authorization'] = auth_t
|
||||
setConfig(d)
|
||||
@@ -445,7 +488,7 @@ def runReplInfo():
|
||||
|
||||
return mw.returnJson(True, 'OK', result)
|
||||
|
||||
def getDocList():
|
||||
def getDbList():
|
||||
args = getArgs()
|
||||
page = 1
|
||||
page_size = 10
|
||||
@@ -482,7 +525,7 @@ def getDocList():
|
||||
_page['count'] = count
|
||||
_page['p'] = page
|
||||
_page['row'] = page_size
|
||||
_page['tojs'] = 'docList'
|
||||
_page['tojs'] = 'dbList'
|
||||
data['page'] = mw.getPage(_page)
|
||||
data['data'] = clist
|
||||
|
||||
@@ -492,6 +535,76 @@ def getDocList():
|
||||
return mw.getJson(data)
|
||||
# return mw.returnJson(True,'ok',data)
|
||||
|
||||
def addDb():
|
||||
t = status()
|
||||
if t == 'stop':
|
||||
return mw.returnJson(False,'未启动!')
|
||||
|
||||
client = mongdbClient()
|
||||
db = client.admin
|
||||
|
||||
args = getArgs()
|
||||
data = checkArgs(args, ['ps','name','db_user','password'])
|
||||
if not data[0]:
|
||||
return data[1]
|
||||
|
||||
data_name = args['name'].strip()
|
||||
if not data_name:
|
||||
return mw.returnJson(False, "数据库名不能为空!")
|
||||
|
||||
addTime = time.strftime('%Y-%m-%d %X', time.localtime())
|
||||
username = ''
|
||||
password = ''
|
||||
# auth为true时如果__DB_USER为空则将它赋值为 root,用于开启本地认证后数据库用户为空的情况
|
||||
auth_status = getConfAuth() == "enabled"
|
||||
|
||||
if auth_status:
|
||||
data_name = args['name']
|
||||
username = args['db_user']
|
||||
password = args['password']
|
||||
else:
|
||||
username = data_name
|
||||
|
||||
|
||||
client['data_name'].insert_one({})
|
||||
# print(data_name)
|
||||
|
||||
user_roles = [{'role': 'dbOwner', 'db': data_name}, {'role': 'userAdmin', 'db': data_name}]
|
||||
if auth_status:
|
||||
db.command("dropUser", username)
|
||||
db.command("createUser", username, pwd=password, roles=user_roles)
|
||||
|
||||
ps = args['ps']
|
||||
|
||||
if ps == '':
|
||||
ps = data_name
|
||||
|
||||
# 添加入SQLITE
|
||||
pSqliteDb('databases').add('name,username,password,accept,ps,addtime', (data_name, username, password, '127.0.0.1', ps, addTime))
|
||||
return mw.returnJson(True, '添加成功')
|
||||
|
||||
|
||||
def setRootPwd(version=''):
|
||||
args = getArgs()
|
||||
data = checkArgs(args, ['password'])
|
||||
if not data[0]:
|
||||
return data[1]
|
||||
|
||||
#强制修改
|
||||
force = 0
|
||||
if 'force' in args and args['force'] == '1':
|
||||
force = 1
|
||||
|
||||
password = args['password']
|
||||
try:
|
||||
msg = ''
|
||||
if force == 1:
|
||||
msg = ',无须强制!'
|
||||
initMgRoot(password, force)
|
||||
return mw.returnJson(True, '数据库root密码修改成功!'+msg)
|
||||
except Exception as ex:
|
||||
return mw.returnJson(False, '修改错误:' + str(ex))
|
||||
|
||||
def testData():
|
||||
'''
|
||||
cd /www/server/mdserver-web && source bin/activate && python3 /www/server/mdserver-web/plugins/mongodb/index.py test_data
|
||||
@@ -674,8 +787,12 @@ if __name__ == "__main__":
|
||||
print(saveConfig())
|
||||
elif func == 'set_config_auth':
|
||||
print(setConfigAuth())
|
||||
elif func == 'get_doc_list':
|
||||
print(getDocList())
|
||||
elif func == 'get_db_list':
|
||||
print(getDbList())
|
||||
elif func == 'add_db':
|
||||
print(addDb())
|
||||
elif func == 'set_root_pwd':
|
||||
print(setRootPwd())
|
||||
elif func == 'run_log':
|
||||
print(runLog())
|
||||
elif func == 'test':
|
||||
|
||||
@@ -187,7 +187,7 @@ function mongoConfigSave(){
|
||||
});
|
||||
}
|
||||
|
||||
function docList(page, search){
|
||||
function dbList(page, search){
|
||||
var _data = {};
|
||||
if (typeof(page) =='undefined'){
|
||||
var page = 1;
|
||||
@@ -200,7 +200,7 @@ function docList(page, search){
|
||||
_data['page'] = page;
|
||||
_data['page_size'] = 10;
|
||||
console.log(_data);
|
||||
mgPost('get_doc_list', '',_data, function(data){
|
||||
mgPost('get_db_list', '',_data, function(data){
|
||||
console.log(data);
|
||||
var rdata = $.parseJSON(data.data);
|
||||
console.log(rdata);
|
||||
@@ -252,9 +252,8 @@ function docList(page, search){
|
||||
//<button onclick="" id="dataRecycle" title="删除选中项" class="btn btn-default btn-sm" style="margin-left: 5px;"><span class="glyphicon glyphicon-trash" style="margin-right: 5px;"></span>回收站</button>
|
||||
var con = '<div class="safe bgw">\
|
||||
<button onclick="addDatabase()" title="添加数据库" class="btn btn-success btn-sm" type="button" style="margin-right: 5px;">添加数据库</button>\
|
||||
<button onclick="setRootPwd(0,\''+rdata.info['root_pwd']+'\')" title="设置MySQL管理员密码" class="btn btn-default btn-sm" type="button" style="margin-right: 5px;">root密码</button>\
|
||||
<button onclick="setRootPwd(0,\''+rdata.info['root_pwd']+'\')" title="设置Mongodb管理员密码" class="btn btn-default btn-sm" type="button" style="margin-right: 5px;">root密码</button>\
|
||||
<button onclick="setDbAccess(\'root\')" title="ROOT权限" class="btn btn-default btn-sm" type="button" style="margin-right: 5px;">ROOT权限</button>\
|
||||
<button onclick="fixDbAccess(\'root\')" title="修复" class="btn btn-default btn-sm" type="button" style="margin-right: 5px;">修复</button>\
|
||||
<span style="float:right"> \
|
||||
<button batch="true" style="float: right;display: none;margin-left:10px;" onclick="delDbBatch();" title="删除选中项" class="btn btn-default btn-sm">删除选中</button>\
|
||||
</span>\
|
||||
@@ -289,3 +288,133 @@ function docList(page, search){
|
||||
});
|
||||
}
|
||||
|
||||
function addDatabase(type){
|
||||
layer.open({
|
||||
type: 1,
|
||||
area: '500px',
|
||||
title: '添加数据库',
|
||||
closeBtn: 1,
|
||||
shift: 5,
|
||||
shadeClose: true,
|
||||
btn:["提交","关闭"],
|
||||
content: "<form class='bt-form pd20' id='add_db'>\
|
||||
<div class='line'>\
|
||||
<span class='tname'>数据库名</span>\
|
||||
<div class='info-r'><input name='name' class='bt-input-text mr5' placeholder='新的数据库名称' type='text' style='width:65%' value=''>\
|
||||
</div>\
|
||||
</div>\
|
||||
<div class='line'><span class='tname'>用户名</span><div class='info-r'><input name='db_user' class='bt-input-text mr5' placeholder='数据库用户' type='text' style='width:65%' value=''></div></div>\
|
||||
<div class='line'>\
|
||||
<span class='tname'>密码</span>\
|
||||
<div class='info-r'><input class='bt-input-text mr5' type='text' name='password' id='MyPassword' style='width:330px' value='"+(randomStrPwd(16))+"' /><span title='随机密码' class='glyphicon glyphicon-repeat cursor' onclick='repeatPwd(16)'></span></div>\
|
||||
</div>\
|
||||
<div class='line'>\
|
||||
<span class='tname'>访问权限</span>\
|
||||
<div class='info-r '>\
|
||||
<select class='bt-input-text mr5' name='dataAccess' style='width:100px'>\
|
||||
<option value='127.0.0.1'>本地服务器</option>\
|
||||
<option value=\"%\">所有人</option>\
|
||||
<option value='ip'>指定IP</option>\
|
||||
</select>\
|
||||
</div>\
|
||||
</div>\
|
||||
<input type='hidden' name='ps' value='' />\
|
||||
</form>",
|
||||
success:function(){
|
||||
$("input[name='name']").keyup(function(){
|
||||
var v = $(this).val();
|
||||
$("input[name='db_user']").val(v);
|
||||
$("input[name='ps']").val(v);
|
||||
});
|
||||
|
||||
$('select[name="dataAccess"]').change(function(){
|
||||
var v = $(this).val();
|
||||
if (v == 'ip'){
|
||||
$(this).after("<input id='dataAccess_subid' class='bt-input-text mr5' type='text' name='address' placeholder='多个IP使用逗号(,)分隔' style='width: 230px; display: inline-block;'>");
|
||||
} else {
|
||||
$('#dataAccess_subid').remove();
|
||||
}
|
||||
});
|
||||
},
|
||||
yes:function(index) {
|
||||
var data = $("#add_db").serialize();
|
||||
data = decodeURIComponent(data);
|
||||
var dataObj = toArrayObject(data);
|
||||
if(!dataObj['address']){
|
||||
dataObj['address'] = dataObj['dataAccess'];
|
||||
}
|
||||
mgPost('add_db', '',dataObj, function(data){
|
||||
var rdata = $.parseJSON(data.data);
|
||||
showMsg(rdata.msg,function(){
|
||||
if (rdata.status){
|
||||
layer.close(index);
|
||||
dbList();
|
||||
}
|
||||
},{icon: rdata.status ? 1 : 2}, 2000);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function setRootPwd(type, pwd){
|
||||
if (type==1){
|
||||
var password = $("#MyPassword").val();
|
||||
mgPost('set_root_pwd', '',{password:password}, function(data){
|
||||
var rdata = $.parseJSON(data.data);
|
||||
showMsg(rdata.msg,function(){
|
||||
dbList();
|
||||
},{icon: rdata.status ? 1 : 2});
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
var index = layer.open({
|
||||
type: 1,
|
||||
area: '500px',
|
||||
title: '修改数据库密码',
|
||||
closeBtn: 1,
|
||||
shift: 5,
|
||||
btn:["提交", "关闭", "复制ROOT密码", "强制修改"],
|
||||
shadeClose: true,
|
||||
content: "<form class='bt-form pd20' id='mod_pwd'>\
|
||||
<div class='line'>\
|
||||
<span class='tname'>root密码</span>\
|
||||
<div class='info-r'><input class='bt-input-text mr5' type='text' name='password' id='MyPassword' style='width:330px' value='"+pwd+"' />\
|
||||
<span title='随机密码' class='glyphicon glyphicon-repeat cursor' onclick='repeatPwd(16)'></span>\
|
||||
</div>\
|
||||
</div>\
|
||||
</form>",
|
||||
yes:function(layerIndex){
|
||||
var password = $("#MyPassword").val();
|
||||
mgPost('set_root_pwd', '',{password:password}, function(data){
|
||||
var rdata = $.parseJSON(data.data);
|
||||
showMsg(rdata.msg,function(){
|
||||
layer.close(layerIndex);
|
||||
dbList();
|
||||
},{icon: rdata.status ? 1 : 2});
|
||||
});
|
||||
},
|
||||
btn3:function(){
|
||||
var password = $("#MyPassword").val();
|
||||
copyText(password);
|
||||
return false;
|
||||
},
|
||||
btn4:function(layerIndex){
|
||||
layer.confirm('强制修改,是为了在重建时使用,确定强制?', {
|
||||
btn: ['确定', '取消']
|
||||
}, function(index, layero){
|
||||
layer.close(index);
|
||||
var password = $("#MyPassword").val();
|
||||
mgPost('set_root_pwd', '',{password:password,force:'1'}, function(data){
|
||||
var rdata = $.parseJSON(data.data);
|
||||
showMsg(rdata.msg,function(){
|
||||
layer.close(layerIndex);
|
||||
dbList();
|
||||
},{icon: rdata.status ? 1 : 2});
|
||||
});
|
||||
});
|
||||
return false;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user