From 4c675235dd7191ef23fd6b5cca80a75360c76eac Mon Sep 17 00:00:00 2001 From: Enrico Fasoli Date: Fri, 4 Dec 2015 11:41:37 +0100 Subject: [PATCH] it's not perfect but whitelist support is in --- lib/boards-api.js | 38 ++++++++++++++++++---------------- webapp/components/postlist.jsx | 2 ++ webapp/pages/board.jsx | 8 ++++++- webapp/style.css | 5 +++++ 4 files changed, 34 insertions(+), 19 deletions(-) diff --git a/lib/boards-api.js b/lib/boards-api.js index 4af76e8..93558df 100644 --- a/lib/boards-api.js +++ b/lib/boards-api.js @@ -45,7 +45,7 @@ function replyAsObj(res,isJson,done){ } }) } else if(res.split || res.toString){ - console.log('got string or buffer:',res) + //console.log('got string or buffer:',res) if(res.toString) res = res.toString() // Is a string if(isJson){ @@ -237,16 +237,16 @@ BoardsAPI.prototype.getBoardSettings = function(userID,board){ if(settings.whitelist == true){ // Get the whitelist var url = r+this.baseurl+'boards/'+board+'/whitelist' - this.ipfs.cat(url,(err,whitelist) => { + this.ipfs.cat(url,(err,res) => { if(err){ this.ee.emit('error',err) // Emit an empty whitelist. - this.emit('whitelist for '+board+'@'+userID,[]) - } else { + this.ee.emit('whitelist for '+board+'@'+userID,[]) + } else replyAsObj(res,false,(err,whitelist) => { // Send whitelist - var w = whitelist.split(' ') - this.emit('whitelist for '+board+'@'+userID,w) - } + var w = whitelist.split(' ').map(x => x.trim()) + this.ee.emit('whitelist for '+board+'@'+userID,w) + }) }) } if(!settings.whitelist_only && !settings.approval_required && settings.blacklist == true){ @@ -271,22 +271,24 @@ BoardsAPI.prototype.getBoardSettings = function(userID,board){ } BoardsAPI.prototype.downloadPost = function(hash,adminID,board,op,done){ + console.log('Downloading post',hash) this.ipfs.cat(hash,(err2,r) => { if(err2){ this.ee.emit('error',err2) console.log('Could not download post',hash,'of',board+'@'+adminID) if(done && done.apply) done(err2) } else { - // TODO: add JSON parsing error handling - var post = JSON.parse(r.toString()) - post.hash = hash - if(op) post.op = op // Inject op - if(board){ - if(adminID) this.ee.emit('post in '+board+'@'+adminID,post,hash) - else this.ee.emit('post in '+board,post,hash) - } - this.ee.emit(hash,post,adminID,board) - if(done && done.apply) done(null,post) + replyAsObj(r,true,(err,post) => { + // TODO: add JSON parsing error handling + post.hash = hash + if(op) post.op = op // Inject op + if(board){ + if(adminID) this.ee.emit('post in '+board+'@'+adminID,post,hash) + else this.ee.emit('post in '+board,post,hash) + } + this.ee.emit(hash,post,adminID,board) + if(done && done.apply) done(null,post) + }) } }) return this.ee @@ -336,7 +338,7 @@ BoardsAPI.prototype.getPostsInBoard = function(adminID,board){ // download posts for each user in whitelist whitelist.forEach(item => { this.getUserPostListInBoard(item,board,(err,postList) => { - postList.forEach( i => this.downloadPost(i,adminID,board)) + postList.forEach( i => this.downloadPost(i.hash,adminID,board,item)) }) }) }) diff --git a/webapp/components/postlist.jsx b/webapp/components/postlist.jsx index 590e472..298d96a 100644 --- a/webapp/components/postlist.jsx +++ b/webapp/components/postlist.jsx @@ -11,6 +11,7 @@ module.exports = React.createClass({ return (b.date || 0) - (a.date || 0) }, init: function(boards){ + if(this.state.init) return this.setState({ api: true }) boards.getPostsInBoard(this.props.admin,this.props.board) .on('post in '+this.props.board+(this.props.admin?'@'+this.props.admin:''),(post,hash) => { @@ -27,6 +28,7 @@ module.exports = React.createClass({ } this.setState({ posts }) }) + this.setState({ init: true }) }, componentDidMount: function(){ var boards = this.props.api diff --git a/webapp/pages/board.jsx b/webapp/pages/board.jsx index d0f78ee..10e06b4 100644 --- a/webapp/pages/board.jsx +++ b/webapp/pages/board.jsx @@ -9,7 +9,7 @@ var GetIPFS = require('getipfs.jsx') module.exports = function(boardsAPI){ return React.createClass({ getInitialState: function(){ - return { name: this.props.params.boardname, api: false } + return { name: this.props.params.boardname, api: false, whitelist: [] } }, componentDidMount: function(){ boardsAPI.use(boards => { @@ -28,6 +28,9 @@ module.exports = function(boardsAPI){ } }) if(this.props.params.userid){ + ee.on('whitelist for '+this.props.params.boardname+'@'+this.props.params.userid,(whitelist) => { + if(this.isMounted()) this.setState({ whitelist }) + }) ee.on('settings for '+this.props.params.boardname+'@'+this.props.params.userid, (res) => { if(!this.isMounted()) return true if(res) this.setState({ name: res.fullname, description: res.description }) @@ -53,6 +56,9 @@ module.exports = function(boardsAPI){

{this.state.name}

{this.props.params.userid?
:

} +
+ {this.state.whitelist.map(i => )} +

) diff --git a/webapp/style.css b/webapp/style.css index c5b9e44..a01af3e 100644 --- a/webapp/style.css +++ b/webapp/style.css @@ -70,6 +70,11 @@ a:hover { margin-right: .25rem; } +.whitelist .user-id { + display: inline; + margin-right: .3em +} + .post { display: block; max-width: 65rem;