summaryrefslogtreecommitdiff
path: root/bucky
diff options
context:
space:
mode:
Diffstat (limited to 'bucky')
-rw-r--r--bucky/app/federate.js60
-rw-r--r--bucky/app/index.js6
-rw-r--r--bucky/app/router.js10
3 files changed, 71 insertions, 5 deletions
diff --git a/bucky/app/federate.js b/bucky/app/federate.js
new file mode 100644
index 0000000..56550fc
--- /dev/null
+++ b/bucky/app/federate.js
@@ -0,0 +1,60 @@
+var fetch = require('fetch')
+var db = require('../db')
+
+module.exports = {
+
+ route: (app) => {
+ app.put('/raw/import/thread/', importRaw(db.Thread), (req, res) => res.send({ status: 'ok' }))
+ app.put('/raw/import/keyword/', importRaw(db.Keyword), (req, res) => res.send({ status: 'ok' }))
+ app.put('/raw/import/file/', importRaw(db.File), (req, res) => res.send({ status: 'ok' }))
+ app.put('/raw/import/comment/', importRaw(db.Comment), (req, res) => res.send({ status: 'ok' }))
+
+ app.get('/raw/export/thread/:id', exportThread, (req, res) => res.send({ status: 'ok' }))
+ app.get('/raw/export/keyword/:id', exportKeyword, (req, res) => res.send({ status: 'ok' }))
+
+ function importRaw (model) {
+ return (req, res, next) => {
+ new model(req.body).save().then((el) => {
+ res.el = el;
+ next()
+ })
+ }
+ }
+ function exportKeyword (req, res, next) {
+ db.getKeyword(req.params.keyword).then(keyword => {
+ send("keyword", keyword)
+ return db.getThreadsForKeyword(keyword)
+ }).then(threads => {
+ var promises = threads.map(thread => {
+ exportThread({ params: { id: thread.get('id') } }, res, function(){})
+ })
+ return Promise.all(promises)
+ }).then( () => {
+ next()
+ })
+ }
+ function exportThread (req, res, next) {
+ return db.getThread(req.params.id).then(thread => {
+ send("thread", thread)
+ return db.getCommentsForThread(req.params.id)
+ }).then(comments => {
+ var promises = comments.map(comment => send("comment", comment))
+ return Promise.all(promises)
+ }).then( () => {
+ return db.getFilesForThread(req.params.id)
+ }).then(files => {
+ var promises = files.map(comment => send("comment", comment))
+ return promises
+ }).then( () => {
+ next()
+ })
+ }
+ function send(type, data){
+ var json = data.toJSON()
+ fetch("https://bucky.asdf.us/raw/import/" + type, {
+ method: 'PUT',
+ }).then(() => {})
+ }
+
+ }
+} \ No newline at end of file
diff --git a/bucky/app/index.js b/bucky/app/index.js
index 71b2d57..19435da 100644
--- a/bucky/app/index.js
+++ b/bucky/app/index.js
@@ -18,6 +18,8 @@ var upload = require('../util/upload')
var app, server
+var federate = require('./federate')
+
var site = module.exports = {}
site.init = function(){
app = express()
@@ -48,9 +50,11 @@ site.init = function(){
saveUninitialized: false,
}))
+ federate.route(app)
+
app.use(csurf({
cookie: true,
- value: (req) => req.headers['csrf-token'],
+ value: (req) => { req.headers['csrf-token'] }
}))
app.disable('x-powered-by')
diff --git a/bucky/app/router.js b/bucky/app/router.js
index 7df8fd2..7380a22 100644
--- a/bucky/app/router.js
+++ b/bucky/app/router.js
@@ -1,11 +1,13 @@
var multer = require('multer')()
var auth = require('../util/auth')
var middleware = require('../util/middleware')
-var fortune = require('../db/fortune')
-var bucky = require('./bucky')
-var db = require('../db')
var util = require('../util/util')
+
+var db = require('../db')
+var bucky = require('./bucky')
var search = require('../search/middleware')
+var fortune = require('../db/fortune')
+var federate = require('./federate')
module.exports = function(app){
app.all('*', middleware.ensureLocals)
@@ -361,6 +363,6 @@ module.exports = function(app){
function(req, res){
res.json({ status: "ok" })
})
-
+
auth.route(app)
}