From 48ed75b6e409ec14f81f6a956ae57ec8f369a88d Mon Sep 17 00:00:00 2001 From: Armin Date: Tue, 12 Mar 2019 19:07:58 +0100 Subject: [PATCH] Use GRAPHQL_URI env var instead establishing ACTIVITYPUB env vars + http Signature test fix --- src/activitypub/ActivityPub.js | 13 ++++++------- src/activitypub/NitroDataSource.js | 10 +++------- src/activitypub/security/httpSignature.spec.js | 5 +---- src/activitypub/security/index.js | 2 +- 4 files changed, 11 insertions(+), 19 deletions(-) diff --git a/src/activitypub/ActivityPub.js b/src/activitypub/ActivityPub.js index 9cbf5b52e..ade2362bc 100644 --- a/src/activitypub/ActivityPub.js +++ b/src/activitypub/ActivityPub.js @@ -13,7 +13,6 @@ import as from 'activitystrea.ms' import NitroDataSource from './NitroDataSource' import router from './routes' import dotenv from 'dotenv' -import { resolve } from 'path' import Collections from './Collections' const debug = require('debug')('ea') @@ -22,19 +21,19 @@ let activityPub = null export { activityPub } export default class ActivityPub { - constructor (domain, port) { + constructor (domain, port, uri) { if (domain === 'localhost') { this.domain = `${domain}:${port}` } else { this.domain = domain } this.port = port - this.dataSource = new NitroDataSource(this.domain) + this.dataSource = new NitroDataSource(uri) this.collections = new Collections(this.dataSource) } static init (server) { if (!activityPub) { - dotenv.config({ path: resolve('src', 'activitypub', '.env') }) - const port = process.env.ACTIVITYPUB_PORT - activityPub = new ActivityPub(process.env.ACTIVITYPUB_DOMAIN || 'localhost', port || 4100) + dotenv.config() + const url = new URL(process.env.GRAPHQL_URI) + activityPub = new ActivityPub(url.hostname || 'localhost', url.port || 4000, url.origin) - // integrated into "server" express framework + // integrated into "server's" express framework server.express.set('ap', activityPub) server.express.use(router) debug('ActivityPub middleware added to the express service') diff --git a/src/activitypub/NitroDataSource.js b/src/activitypub/NitroDataSource.js index a8b65b27e..c5d520dce 100644 --- a/src/activitypub/NitroDataSource.js +++ b/src/activitypub/NitroDataSource.js @@ -19,25 +19,21 @@ import { setContext } from 'apollo-link-context' import { InMemoryCache } from 'apollo-cache-inmemory' import fetch from 'node-fetch' import { ApolloClient } from 'apollo-client' -import dotenv from 'dotenv' import uuid from 'uuid' import encode from '../jwt/encode' -import { resolve } from 'path' import trunc from 'trunc-html' const debug = require('debug')('ea:nitro-datasource') -dotenv.config({ path: resolve('src', 'activitypub', '.env') }) - export default class NitroDataSource { - constructor (domain) { - this.domain = domain + constructor (uri) { + this.uri = uri const defaultOptions = { query: { fetchPolicy: 'network-only', errorPolicy: 'all' } } - const link = createHttpLink({ uri: process.env.GRAPHQL_URI, fetch: fetch }) // eslint-disable-line + const link = createHttpLink({ uri: this.uri, fetch: fetch }) // eslint-disable-line const cache = new InMemoryCache() const authLink = setContext((_, { headers }) => { // generate the authentication token (maybe from env? Which user?) diff --git a/src/activitypub/security/httpSignature.spec.js b/src/activitypub/security/httpSignature.spec.js index 17ab3b91a..bf1162219 100644 --- a/src/activitypub/security/httpSignature.spec.js +++ b/src/activitypub/security/httpSignature.spec.js @@ -7,7 +7,6 @@ import { expect } from 'chai' const factory = Factory() describe('Signature creation and verification', () => { - process.env.PRIVATE_KEY_PASSPHRASE = 'test-password' let user = null let client = null const headers = { @@ -43,8 +42,7 @@ describe('Signature creation and verification', () => { beforeEach(() => { const signer = crypto.createSign('rsa-sha256') signer.update('(request-target): post /activitypub/users/max/inbox\ndate: 2019-03-08T14:35:45.759Z\nhost: democracy-app.de\ncontent-type: application/json') - console.log(JSON.stringify(user, null, 2)) - signatureB64 = signer.sign({ key: user.privateKey, passphrase: 'test-password' }, 'base64') + signatureB64 = signer.sign({ key: user.privateKey, passphrase: 'a7dsf78sadg87ad87sfagsadg78' }, 'base64') }) it('creates a Signature with given privateKey, keyId, url and headers (default algorithm: "rsa-sha256")', () => { const httpSignature = createSignature(user.privateKey, 'https://human-connection.org/activitypub/users/lea#main-key', 'https://democracy-app.de/activitypub/users/max/inbox', headers) @@ -65,7 +63,6 @@ describe('Signature creation and verification', () => { it('verifies a Signature by ', async () => { headers['Signature'] = httpSignature const isVerified = await verifySignature('https://democracy-app.de/activitypub/users/max/inbox', headers) - console.log(JSON.stringify(isVerified, null, 2)) expect(isVerified).to.equal(true) }) }) diff --git a/src/activitypub/security/index.js b/src/activitypub/security/index.js index 583535bcc..412084022 100644 --- a/src/activitypub/security/index.js +++ b/src/activitypub/security/index.js @@ -24,7 +24,7 @@ export function generateRsaKeyPair () { // signing export function createSignature (privKey, keyId, url, headers = {}, algorithm = 'rsa-sha256') { - if (!SUPPORTED_HASH_ALGORITHMS.includes(algorithm)) { return throw Error(`SIGNING: Unsupported hashing algorithm = ${algorithm}`) } + if (!SUPPORTED_HASH_ALGORITHMS.includes(algorithm)) { throw Error(`SIGNING: Unsupported hashing algorithm = ${algorithm}`) } const signer = crypto.createSign(algorithm) const signingString = constructSigningString(url, headers) signer.update(signingString)