diff --git a/docker/db.sqlite b/docker/db.sqlite deleted file mode 100644 index ad63406a..00000000 Binary files a/docker/db.sqlite and /dev/null differ diff --git a/docker/Dockerfile b/docs/assets/docker/Dockerfile similarity index 80% rename from docker/Dockerfile rename to docs/assets/docker/Dockerfile index 6a554408..4328e84d 100644 --- a/docker/Dockerfile +++ b/docs/assets/docker/Dockerfile @@ -1,4 +1,3 @@ FROM node:latest -EXPOSE 13120 WORKDIR / RUN yarn global add gancio \ No newline at end of file diff --git a/docker/docker-compose.postgresql.yml b/docs/assets/docker/postgres/docker-compose.yml similarity index 91% rename from docker/docker-compose.postgresql.yml rename to docs/assets/docker/postgres/docker-compose.yml index c76b68af..a8235cd4 100644 --- a/docker/docker-compose.postgresql.yml +++ b/docs/assets/docker/postgres/docker-compose.yml @@ -18,6 +18,7 @@ services: build: . image: node:latest container_name: gancio + restart: always command: gancio start --docker --db=postgresql volumes: - ./config.json:/opt/gancio/config.json @@ -25,7 +26,4 @@ services: depends_on: - db ports: - - 13120:13120 -volumes: - db: - gancio: + - "localhost:13120:13120" diff --git a/docker/docker-compose.sqlite.yml b/docs/assets/docker/sqlite/docker-compose.yml similarity index 77% rename from docker/docker-compose.sqlite.yml rename to docs/assets/docker/sqlite/docker-compose.yml index cf41231f..dd892e8c 100644 --- a/docker/docker-compose.sqlite.yml +++ b/docs/assets/docker/sqlite/docker-compose.yml @@ -3,15 +3,15 @@ version: '3' services: gancio: build: . + restart: always image: node:latest container_name: gancio command: gancio start --docker --db=sqlite + environment: + - DEBUG volumes: - ./db.sqlite:/opt/gancio/db.sqlite - ./config.json:/opt/gancio/config.json - ./uploads:/opt/gancio/uploads ports: - - 13120:13120 -volumes: - db: - gancio: + - "127.0.0.1:13120:13120" diff --git a/docs/install/docker.md b/docs/install/docker.md index f66dc0ca..8e74d6d8 100644 --- a/docs/install/docker.md +++ b/docs/install/docker.md @@ -12,7 +12,7 @@ parent: Install ## Initial setup **You do not need to clone the full repo as we distribute gancio via npm.** -A [Dockerfile](https://framagit.org/les/gancio/raw/docker/docker/Dockerfile) and a docker-compose.yml are the only files needed. +A Dockerfile and a docker-compose.yml are the only files needed. - __Create a directory where everything related to gancio is stored (db, images, config)__ ```bash @@ -25,9 +25,8 @@ cd /opt/gancio
1. **Download docker-compose.yml and Dockerfile** ```bash -wget https://framagit.org/les/gancio/raw/master/docker/Dockerfile -wget https://framagit.org/les/gancio/raw/master/docker/docker-compose.sqlite.yml \ - -O docker-compose.yml +wget https://gancio.org/docker/Dockerfile +wget https://gancio.org/docker/sqlite/docker-compose.yml ``` 1. Create an empty db and config (**this is needed**) @@ -38,6 +37,7 @@ mkdir user_locale 1. Build docker image and launch interactive setup in one step ``` +docker-compose build docker-compose run --rm gancio gancio setup --docker --db=sqlite ```
@@ -47,9 +47,8 @@ docker-compose run --rm gancio gancio setup --docker --db=sqlite 1. **Download docker-compose.yml and Dockerfile** ```bash -wget https://framagit.org/les/gancio/raw/master/docker/Dockerfile -wget https://framagit.org/les/gancio/raw/master/docker/docker-compose.postgresql.yml \ - -O docker.compose.yml +wget https://gancio.org/docker/Dockerfile +wget https://gancio.org/docker/sqlite/docker-compose.yml ``` 1. Create an empty configuration (**this is needed**) @@ -60,6 +59,7 @@ mkdir user_locale 1. Build docker image and launch interactive setup in one step ``` +docker-compose build docker-compose run --rm gancio gancio setup --docker --db=postgresql ``` diff --git a/server/api/controller/user.js b/server/api/controller/user.js index d6277e5d..c876f8e7 100644 --- a/server/api/controller/user.js +++ b/server/api/controller/user.js @@ -11,6 +11,7 @@ const settingsController = require('./settings') const federation = require('../../federation/helpers') const util = require('util') const generateKeyPair = util.promisify(crypto.generateKeyPair) +const debug = require('debug')('user:controller') const userController = { async login (req, res) { @@ -237,22 +238,6 @@ const userController = { if (!req.body.password) { delete req.body.password } - // generate an rsa key in case not present - if (!user.rsa) { - const rsa = await generateKeyPair('rsa', { - modulusLength: 4096, - publicKeyEncoding: { - type: 'spki', - format: 'pem' - }, - privateKeyEncoding: { - type: 'pkcs8', - format: 'pem' - } - }) - req.body.rsa = rsa - } - await user.update(req.body) if (!user.is_active && req.body.is_active && user.recover_code) { diff --git a/server/cli.js b/server/cli.js index 2bc2fe75..25dda0db 100755 --- a/server/cli.js +++ b/server/cli.js @@ -65,7 +65,7 @@ async function setupQuestionnaire(is_docker, db) { message: 'sqlite db path', default: is_docker ? '/opt/gancio/db.sqlite' : './db.sqlite', filter: p => path.resolve(cwd, p), - when: answers => (db && db==='sqlite') || (answers.db && answers.db.dialect === 'sqlite'), + when: answers => ((db && db==='sqlite') || (answers.db && answers.db.dialect === 'sqlite')) && !is_docker, validate: db_path => db_path.length>0 && fs.existsSync(path.dirname(db_path)) }) @@ -73,7 +73,7 @@ async function setupQuestionnaire(is_docker, db) { name: 'db.host', message: 'Postgres host', default: is_docker ? 'db' : 'localhost', - when: answers => (db && db==='postgresql') || (answers.db && answers.db.dialect === 'postgres'), + when: answers => ((db && db==='postgresql') || (answers.db && answers.db.dialect === 'postgres')) && !is_docker, validate: notEmpty }) diff --git a/server/federation/helpers.js b/server/federation/helpers.js index b5973d29..1a4908e4 100644 --- a/server/federation/helpers.js +++ b/server/federation/helpers.js @@ -6,7 +6,7 @@ const httpSignature = require('http-signature') const debug = require('debug')('federation:helpers') const { user: User, fed_users: FedUsers } = require('../api/models') const url = require('url') -const settings = require('../api/controller/settings') +const settingsController = require('../api/controller/settings') const Helpers = { @@ -53,12 +53,11 @@ const Helpers = { }, async sendEvent (event, user) { - if (!settings.settings.enable_federation) { + if (!settingsController.settings.enable_federation) { debug('event not send, federation disabled') return } - // event is sent by user that published it and by the admin instance // collect followers from admin and user const instanceAdmin = await User.findOne({ where: { email: config.admin_email }, include: { model: FedUsers, as: 'followers' } }) @@ -128,15 +127,6 @@ const Helpers = { }, - // DO NOT USE THIS! (why is this needed btw?) - // async getFederatedUser (address) { - // address = address.trim() - // const [ username, host ] = address.split('@') - // const url = `https://${host}/.well-known/webfinger?resource=acct:${username}@${host}` - // return Helpers.getActor(url) - // }, - - // TODO: cache async getActor (url, force = false) { let fedi_user diff --git a/server/federation/index.js b/server/federation/index.js index 385c06e5..f6b7b5e5 100644 --- a/server/federation/index.js +++ b/server/federation/index.js @@ -4,6 +4,7 @@ const cors = require('cors') const Follows = require('./follows') const Users = require('./users') const { event: Event, user: User, tag: Tag, place: Place } = require('../api/models') +const settingsController = require('../api/controller/settings') const Comments = require('./comments') const Helpers = require('./helpers') const Ego = require('./ego') @@ -14,6 +15,11 @@ const debug = require('debug')('federation') * ref: https://www.w3.org/TR/activitypub/#Overview */ +router.use((req, res, next) => { + if(settingsController.settings.enable_federation) next() + debug('Federation disabled!') + return res.status(401).send('Federation disabled') +}) router.use(cors()) router.use(express.json({ type: ['application/json', 'application/activity+json', 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"'] }))