mirror of
https://github.com/HackPlan/RootPanel.git
synced 2026-01-12 22:27:09 +08:00
finish mongodb plugin
This commit is contained in:
@@ -16,7 +16,9 @@
|
||||
mongo
|
||||
|
||||
use admin
|
||||
db.addUser({user: 'rpadmin', pwd: 'password', roles: ['readWriteAnyDatabase', 'userAdminAnyDatabase', 'dbAdminAnyDatabase']})
|
||||
db.addUser({user: 'rpadmin', pwd: 'password', roles: ['userAdminAnyDatabase', 'dbAdminAnyDatabase']})
|
||||
use RootPanel
|
||||
db.addUser({user: 'rpadmin', pwd: 'password', roles: ['readWrite']})
|
||||
|
||||
vi /etc/mongodb.conf
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ RP3 的核心功能包括:
|
||||
|
||||
## 技术构成
|
||||
|
||||
* 前端:Bootstrap3, jQuery, Jade, Less
|
||||
* 前端:Bootstrap(3), jQuery, Jade, Less
|
||||
* 后端:Express, Coffee
|
||||
* 数据库:MongoDB, redis
|
||||
* 数据库:MongoDB(2.4), Redis
|
||||
* 操作系统支持:Ubuntu 14.04
|
||||
|
||||
@@ -7,6 +7,8 @@ i18n = require './i18n'
|
||||
config = require './../config'
|
||||
{requestAuthenticate} = require './router/middleware'
|
||||
|
||||
app.plugins = {}
|
||||
|
||||
exports.get = (name) ->
|
||||
return require path.join(__dirname, "../plugin/#{name}")
|
||||
|
||||
|
||||
@@ -12,6 +12,27 @@ $ ->
|
||||
.success ->
|
||||
location.reload()
|
||||
|
||||
$('#widget-mongodb button.create-database').click ->
|
||||
$.post '/plugin/mongodb/create_database', JSON.stringify
|
||||
name: $(@).parents('.input-group').find('input').val()
|
||||
.success ->
|
||||
location.reload()
|
||||
|
||||
$('#widget-mongodb button.delete-database').click ->
|
||||
if window.confirm 'Are you sure?'
|
||||
$.post '/plugin/mongodb/delete_database', JSON.stringify
|
||||
name: $(@).parents('tr').data 'name'
|
||||
.success ->
|
||||
location.reload()
|
||||
|
||||
$('#widget-mongodb button.update-password').click ->
|
||||
$.post '/plugin/mongodb/update_password', JSON.stringify
|
||||
password: $(@).parents('.input-group').find('input').val()
|
||||
.success ->
|
||||
location.reload()
|
||||
|
||||
# refactored above
|
||||
|
||||
service = $ '#service'
|
||||
service.find 'button'
|
||||
.on 'click', (e) ->
|
||||
|
||||
@@ -58,7 +58,7 @@ block content
|
||||
button(data-name= name).btn.btn-success 开启 #{t('plugins.' + name + '.name')}
|
||||
|
||||
for widget in widgets
|
||||
.row
|
||||
.row(id='widget-#{widget.plugin.name}')
|
||||
!= widget.html
|
||||
|
||||
append footer
|
||||
|
||||
@@ -1,5 +1,65 @@
|
||||
crypto = require 'crypto'
|
||||
|
||||
{assertInService} = require '../../core/router/middleware'
|
||||
|
||||
mongodb = app.plugins.mongodb
|
||||
|
||||
mAccount = require '../../core/model/account'
|
||||
|
||||
module.exports = exports = express.Router()
|
||||
|
||||
exports.use assertInService 'mongodb'
|
||||
|
||||
exports.post '/update_password', (req, res) ->
|
||||
unless req.body.password or /^[A-Za-z0-9\-_]+$/.test req.body.password
|
||||
return res.error 'invalid_password'
|
||||
|
||||
md5 = crypto.createHash 'md5'
|
||||
md5.update "#{req.account.username}:mongo:#{req.body.password}"
|
||||
pwd = md5.digest 'hex'
|
||||
|
||||
mongodb.admin_users.update user: req.account.username,
|
||||
$set:
|
||||
pwd: pwd
|
||||
, (err, result) ->
|
||||
mongodb.admin.listDatabases (err, result) ->
|
||||
dbs = _.filter result.databases, (i) ->
|
||||
return i.name[..req.account.username.length] == "#{req.account.username}_"
|
||||
|
||||
async.each dbs, (db, callback) ->
|
||||
db_users = app.db.db(db.name).collection 'system.users'
|
||||
db_users.update user: req.account.username,
|
||||
$set:
|
||||
pwd: pwd
|
||||
, ->
|
||||
callback()
|
||||
, ->
|
||||
res.json {}
|
||||
|
||||
exports.post '/create_database', (req, res) ->
|
||||
unless req.body.name[..req.account.username.length] == "#{req.account.username}_"
|
||||
return res.error 'invalid_name'
|
||||
|
||||
unless /^[A-Za-z0-9_]+$/.test req.body.name
|
||||
return res.error 'invalid_name'
|
||||
|
||||
mongodb.admin_users.findOne
|
||||
user: req.account.username
|
||||
, (err, result) ->
|
||||
db_users = app.db.db(req.body.name).collection 'system.users'
|
||||
db_users.insert
|
||||
user: req.account.username
|
||||
pwd: result.pwd
|
||||
roles: ['readWrite', 'dbAdmin']
|
||||
, (err) ->
|
||||
res.json {}
|
||||
|
||||
exports.post '/delete_database', (req, res) ->
|
||||
unless req.body.name[..req.account.username.length] == "#{req.account.username}_"
|
||||
return res.error 'invalid_name'
|
||||
|
||||
unless /^[A-Za-z0-9_]+$/.test req.body.name
|
||||
return res.error 'invalid_name'
|
||||
|
||||
app.db.db(req.body.name).dropDatabase ->
|
||||
res.json {}
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
app.plugins.mongodb = {}
|
||||
|
||||
action = require './action'
|
||||
service = require './service'
|
||||
|
||||
|
||||
@@ -1,30 +1,56 @@
|
||||
jade = require 'jade'
|
||||
path = require 'path'
|
||||
async = require 'async'
|
||||
crypto = require 'crypto'
|
||||
|
||||
config = require '../../config'
|
||||
|
||||
mAccount = require '../../core/model/account'
|
||||
|
||||
mongodb = app.plugins.mongodb
|
||||
|
||||
mongodb.admin = app.db.admin()
|
||||
mongodb.admin.authenticate config.mongodb.user, config.mongodb.password, ->
|
||||
mongodb.admin_users = app.db.db('admin').collection 'system.users'
|
||||
|
||||
module.exports =
|
||||
enable: (account, callback) ->
|
||||
callback()
|
||||
md5 = crypto.createHash 'md5'
|
||||
md5.update "#{account.username}:mongo:#{mAccount.randomSalt()}"
|
||||
pwd = md5.digest 'hex'
|
||||
|
||||
mongodb.admin_users.insert
|
||||
user: account.username
|
||||
pwd: pwd
|
||||
roles: []
|
||||
, (err, result) ->
|
||||
console.log err, result
|
||||
callback()
|
||||
|
||||
delete: (account, callback) ->
|
||||
callback()
|
||||
mongodb.admin_users.remove
|
||||
user: account.username
|
||||
, (err) ->
|
||||
mongodb.admin.listDatabases (err, result) ->
|
||||
dbs = _.filter result.databases, (i) ->
|
||||
return i.name[..account.username.length] == "#{account.username}_"
|
||||
|
||||
async.each dbs, (db, callback) ->
|
||||
app.db.db(db.name).dropDatabase ->
|
||||
callback()
|
||||
, ->
|
||||
callback()
|
||||
|
||||
widget: (account, callback) ->
|
||||
admin = app.db.admin()
|
||||
admin.authenticate config.mongodb.user, config.mongodb.password, ->
|
||||
admin.listDatabases (err, result) ->
|
||||
dbs = _.filter result.databases, (i) ->
|
||||
return i.name.slice(0, account.username.length + 1) == "#{account.username}_"
|
||||
mongodb.admin.listDatabases (err, result) ->
|
||||
dbs = _.filter result.databases, (i) ->
|
||||
return i.name[..account.username.length] == "#{account.username}_"
|
||||
|
||||
jade.renderFile path.join(__dirname, 'view/widget.jade'),
|
||||
account: account
|
||||
dbs: dbs
|
||||
, (err, html) ->
|
||||
callback html
|
||||
jade.renderFile path.join(__dirname, 'view/widget.jade'),
|
||||
account: account
|
||||
dbs: dbs
|
||||
, (err, html) ->
|
||||
callback html
|
||||
|
||||
preview: (callback) ->
|
||||
jade.renderFile path.join(__dirname, 'view/preview.jade'), {}, (err, html) ->
|
||||
|
||||
@@ -4,18 +4,19 @@ header MongoDB
|
||||
.panel-heading
|
||||
h3.panel-title 新建数据库
|
||||
.panel-body
|
||||
.input-group#mongodb-create
|
||||
.input-group
|
||||
input.form-control(value='#{account.username}_')
|
||||
span.input-group-btn
|
||||
button.btn.btn-default(type='button') 提交
|
||||
button.create-database.btn.btn-default(type='button') 提交
|
||||
.panel.panel-warning
|
||||
.panel-heading
|
||||
h3.panel-title 设置 MongoDB 密码
|
||||
.panel-body
|
||||
.input-group#mongodb-input
|
||||
.input-group
|
||||
input.form-control(type='password')
|
||||
span.input-group-btn
|
||||
button.btn.btn-default(type='button') 提交
|
||||
button.update-password.btn.btn-default(type='button') 提交
|
||||
|
||||
.col-md-6
|
||||
table(style= 'table-layout: fixed;').table.table-hover
|
||||
thead
|
||||
@@ -29,5 +30,5 @@ header MongoDB
|
||||
td(style= 'white-space: nowrap; overflow: hidden;', title= db.name)= db.name
|
||||
td #{(db.sizeOnDisk / 1024 / 1024).toFixed(1)}M
|
||||
td
|
||||
button.nginx-remove-btn.btn.btn-danger.btn-xs
|
||||
button.delete-database.btn.btn-danger.btn-xs
|
||||
span.glyphicon.glyphicon-remove-sign
|
||||
|
||||
@@ -10,7 +10,7 @@ module.exports = exports = express.Router()
|
||||
|
||||
exports.use assertInService 'mysql'
|
||||
|
||||
exports.post '/update_password/', (req, res) ->
|
||||
exports.post '/update_password', (req, res) ->
|
||||
unless req.body.password or /^[A-Za-z0-9\-_]+$/.test req.body.password
|
||||
return res.error 'invalid_password'
|
||||
|
||||
|
||||
Reference in New Issue
Block a user