switch to https, place all object metadata in _meta for simpler projections
This commit is contained in:
parent
e4c150b840
commit
06d6f85960
8 changed files with 42 additions and 50 deletions
11
db/setup.js
11
db/setup.js
|
@ -4,8 +4,17 @@ const crypto = require('crypto')
|
|||
module.exports = async function dbSetup (db, domain) {
|
||||
// inbox
|
||||
await db.collection('streams').createIndex({
|
||||
_target: 1,
|
||||
'_meta._target': 1,
|
||||
_id: -1,
|
||||
}, {
|
||||
name: 'inbox'
|
||||
})
|
||||
// followers
|
||||
await db.collection('streams').createIndex({
|
||||
'_meta._target': 1,
|
||||
}, {
|
||||
partialFilterExpression: {type: 'Follow'},
|
||||
name: 'followers'
|
||||
})
|
||||
// outbox
|
||||
await db.collection('streams').createIndex({
|
||||
|
|
59
index.js
59
index.js
|
@ -1,9 +1,19 @@
|
|||
const { promisify } = require('util')
|
||||
const config = require('./config.json');
|
||||
const { USER, PASS, DOMAIN, PRIVKEY_PATH, CERT_PATH, PORT } = config;
|
||||
const path = require('path')
|
||||
const express = require('express');
|
||||
const app = express();
|
||||
const MongoClient = require('mongodb').MongoClient;
|
||||
const fs = require('fs');
|
||||
const routes = require('./routes')
|
||||
const bodyParser = require('body-parser')
|
||||
const cors = require('cors')
|
||||
const http = require('http')
|
||||
const https = require('https')
|
||||
const basicAuth = require('express-basic-auth');
|
||||
|
||||
const config = require('./config.json');
|
||||
const { USER, PASS, DOMAIN, KEY_PATH, CERT_PATH, PORT, PORT_HTTPS } = config;
|
||||
|
||||
const app = express();
|
||||
// Connection URL
|
||||
const url = 'mongodb://localhost:27017';
|
||||
|
||||
|
@ -16,32 +26,18 @@ const client = new MongoClient(url, {useUnifiedTopology: true});
|
|||
|
||||
let db;
|
||||
|
||||
const fs = require('fs');
|
||||
const routes = require('./routes'),
|
||||
bodyParser = require('body-parser'),
|
||||
cors = require('cors'),
|
||||
http = require('http'),
|
||||
https = require('https'),
|
||||
basicAuth = require('express-basic-auth');
|
||||
|
||||
let sslOptions;
|
||||
|
||||
try {
|
||||
sslOptions = {
|
||||
key: fs.readFileSync(PRIVKEY_PATH),
|
||||
cert: fs.readFileSync(CERT_PATH)
|
||||
key: fs.readFileSync(path.join(__dirname, KEY_PATH)),
|
||||
cert: fs.readFileSync(path.join(__dirname, CERT_PATH))
|
||||
};
|
||||
} catch(err) {
|
||||
if (err.errno === -2) {
|
||||
console.log('No SSL key and/or cert found, not enabling https server');
|
||||
}
|
||||
else {
|
||||
console.log(err);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
app.set('domain', DOMAIN);
|
||||
app.set('port', process.env.PORT || PORT || 3000);
|
||||
app.set('port-https', process.env.PORT_HTTPS || 8443);
|
||||
app.set('port', process.env.PORT || PORT);
|
||||
app.set('port-https', process.env.PORT_HTTPS || PORT_HTTPS);
|
||||
app.use(bodyParser.json({type: [
|
||||
'application/activity+json',
|
||||
'application/ld+json; profile="https://www.w3.org/ns/activitystreams"'
|
||||
|
@ -82,35 +78,24 @@ app.use('/api/admin', cors({ credentials: true, origin: true }), basicUserAuth,
|
|||
app.use('/.well-known/webfinger', cors(), routes.webfinger);
|
||||
app.use('/u', cors(), routes.user);
|
||||
app.use('/m', cors(), routes.message);
|
||||
// app.use('/api/inbox', cors(), routes.inbox);
|
||||
app.use('/u/:name/inbox', routes.inbox)
|
||||
app.use('/u/:name/outbox', routes.outbox)
|
||||
app.use('/admin', express.static('public/admin'));
|
||||
app.use('/f', express.static('public/files'));
|
||||
app.use('/hubs', express.static('../hubs/dist'));
|
||||
// app.use('/hubs', express.static('../hubs/dist'));
|
||||
|
||||
// Use connect method to connect to the Server
|
||||
let objs
|
||||
client.connect({useNewUrlParser: true})
|
||||
.then(() => {
|
||||
console.log("Connected successfully to server");
|
||||
db = client.db(dbName);
|
||||
app.set('db', db);
|
||||
objs = db.collection('objects');
|
||||
app.set('objs', db.collection('objects'));
|
||||
|
||||
return dbSetup(db, DOMAIN)
|
||||
})
|
||||
|
||||
.then(() => {
|
||||
http.createServer(app).listen(app.get('port'), function(){
|
||||
console.log('Express server listening on port ' + app.get('port'));
|
||||
https.createServer(sslOptions, app).listen(app.get('port-https'), function () {
|
||||
console.log('Express server listening on port ' + app.get('port-https'));
|
||||
});
|
||||
if (sslOptions) {
|
||||
https.createServer(sslOptions, app).listen(app.get('port-https'), function () {
|
||||
console.log('Express server listening on port ' + app.get('port-https'));
|
||||
});
|
||||
}
|
||||
})
|
||||
.catch(err => {
|
||||
throw new Error(err)
|
||||
|
|
|
@ -8,8 +8,10 @@
|
|||
"cors": "^2.8.4",
|
||||
"express": "^4.16.3",
|
||||
"express-basic-auth": "^1.1.5",
|
||||
"http-signature": "^1.2.0",
|
||||
"mongodb": "^3.3.2",
|
||||
"request": "^2.87.0"
|
||||
"request": "^2.88.0",
|
||||
"request-promise-native": "^1.0.7"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10.10.0"
|
||||
|
|
|
@ -18,9 +18,9 @@ router.post('/', utils.validators.activity, function (req, res) {
|
|||
router.get('/', function (req, res) {
|
||||
const db = req.app.get('db');
|
||||
db.collection('streams')
|
||||
.find({_target: req.user})
|
||||
.find({'_meta._target': utils.usernameToIRI(req.user)})
|
||||
.sort({_id: -1})
|
||||
.project({_id: 0, _target: 0, _meta: 0, '@context': 0, 'object._id': 0, 'object.@context': 0, 'objecct._meta': 0})
|
||||
.project({_id: 0, _meta: 0, '@context': 0, 'object._id': 0, 'object.@context': 0, 'object._meta': 0})
|
||||
.toArray()
|
||||
.then(stream => res.json(utils.arrayToCollection(stream, true)))
|
||||
.catch(err => {
|
||||
|
|
|
@ -17,9 +17,9 @@ router.post('/', utils.validators.outboxActivity, function (req, res) {
|
|||
router.get('/', function (req, res) {
|
||||
const db = req.app.get('db');
|
||||
db.collection('streams')
|
||||
.find({actor: utils.userNameToIRI(req.user)})
|
||||
.find({actor: utils.usernameToIRI(req.user)})
|
||||
.sort({_id: -1})
|
||||
.project({_id: 0, _target: 0, _meta: 0, 'object._id': 0, 'object.@context': 0, 'object._meta': 0})
|
||||
.project({_id: 0, _meta: 0, 'object._id': 0, 'object.@context': 0, 'object._meta': 0})
|
||||
.toArray()
|
||||
.then(stream => res.json(utils.arrayToCollection(stream, true)))
|
||||
.catch(err => {
|
||||
|
|
|
@ -28,8 +28,7 @@ router.get('/:name/followers', function (req, res) {
|
|||
db.collection('streams')
|
||||
.find({
|
||||
type: 'Follow',
|
||||
_target: name,
|
||||
'object.id': utils.usernameToIRI(name)
|
||||
'_meta._target': utils.usernameToIRI(name),
|
||||
})
|
||||
.project({_id: 0, actor: 1})
|
||||
.toArray()
|
||||
|
|
|
@ -70,10 +70,7 @@ function createLocalActor (name, type) {
|
|||
"preferredUsername": name,
|
||||
"name": "Dummy Person",
|
||||
"summary": "Gotta have someone in the db",
|
||||
"icon": `http://${config.DOMAIN}/f/${name}.png`,
|
||||
attachment: [
|
||||
`http://${config.DOMAIN}/f/${name}.glb`
|
||||
],
|
||||
"icon": `https://${config.DOMAIN}/f/${name}.png`,
|
||||
publicKey: {
|
||||
'id': `${actorBase}#main-key`,
|
||||
'owner': `${actorBase}`,
|
||||
|
|
|
@ -33,7 +33,7 @@ module.exports.outboxActivity = function outboxActivity (req, res, next) {
|
|||
_id: newID,
|
||||
'@context': ASContext,
|
||||
type: 'Create',
|
||||
id: `http://${req.app.get('domain')}/o/${newID.toHexString()}`,
|
||||
id: `https://${req.app.get('domain')}/o/${newID.toHexString()}`,
|
||||
actor: req.body.attributedTo,
|
||||
object: req.body,
|
||||
published: new Date().toISOString(),
|
||||
|
|
Loading…
Reference in a new issue