From 48a967fb3a3c9f3c7417e71d6aa78bf703d201fa Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Fri, 8 Mar 2019 15:25:10 -0300 Subject: [PATCH 1/2] Send cloud token to Federation Hub --- .circleci/config.yml | 14 +++++++------- packages/rocketchat-federation/package.js | 1 + packages/rocketchat-federation/server/main.js | 4 ++++ .../rocketchat-federation/server/peerClient.js | 1 + packages/rocketchat-federation/server/peerDNS.js | 4 ++-- 5 files changed, 15 insertions(+), 9 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index d6530e0aec67..fd4d822a3610 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -414,13 +414,13 @@ workflows: - build: filters: tags: - only: /^[0-9]+\.[0-9]+\.[0-9]+(-rc\.[0-9]+)?$/ + only: /^[0-9]+\.[0-9]+\.[0-9]+(?:-(?:rc|beta)\.[0-9]+)?$/ - test-with-oplog-mongo-3-2: &test-mongo requires: - build filters: tags: - only: /^[0-9]+\.[0-9]+\.[0-9]+(-rc\.[0-9]+)?$/ + only: /^[0-9]+\.[0-9]+\.[0-9]+(?:-(?:rc|beta)\.[0-9]+)?$/ - test-with-oplog-mongo-3-4: &test-mongo-no-pr requires: - build @@ -428,7 +428,7 @@ workflows: branches: only: develop tags: - only: /^[0-9]+\.[0-9]+\.[0-9]+(-rc\.[0-9]+)?$/ + only: /^[0-9]+\.[0-9]+\.[0-9]+(?:-(?:rc|beta)\.[0-9]+)?$/ - test-with-oplog-mongo-3-6: *test-mongo-no-pr - test-with-oplog-mongo-4-0: *test-mongo - test-without-oplog-mongo-3-2: *test-mongo-no-pr @@ -449,7 +449,7 @@ workflows: branches: only: develop tags: - only: /^[0-9]+\.[0-9]+\.[0-9]+(-rc\.[0-9]+)?$/ + only: /^[0-9]+\.[0-9]+\.[0-9]+(?:-(?:rc|beta)\.[0-9]+)?$/ - image-build: requires: - deploy @@ -457,7 +457,7 @@ workflows: branches: only: develop tags: - only: /^[0-9]+\.[0-9]+\.[0-9]+(-rc\.[0-9]+)?$/ + only: /^[0-9]+\.[0-9]+\.[0-9]+(?:-(?:rc|beta)\.[0-9]+)?$/ - hold: type: approval requires: @@ -466,7 +466,7 @@ workflows: branches: ignore: develop tags: - only: /^[0-9]+\.[0-9]+\.[0-9]+(-rc\.[0-9]+)?$/ + only: /^[0-9]+\.[0-9]+\.[0-9]+(?:-(?:rc|beta)\.[0-9]+)?$/ - pr-image-build: requires: - hold @@ -474,5 +474,5 @@ workflows: branches: ignore: develop tags: - only: /^[0-9]+\.[0-9]+\.[0-9]+(-rc\.[0-9]+)?$/ + only: /^[0-9]+\.[0-9]+\.[0-9]+(?:-(?:rc|beta)\.[0-9]+)?$/ diff --git a/packages/rocketchat-federation/package.js b/packages/rocketchat-federation/package.js index 2876da93d30d..ef97c580c72c 100644 --- a/packages/rocketchat-federation/package.js +++ b/packages/rocketchat-federation/package.js @@ -9,6 +9,7 @@ Package.onUse(function(api) { api.use([ 'ecmascript', 'rocketchat:api', + 'rocketchat:cloud', 'rocketchat:lib', 'rocketchat:reactions', 'rocketchat:models', diff --git a/packages/rocketchat-federation/server/main.js b/packages/rocketchat-federation/server/main.js index 33e4c4b31e1b..beb1a506c652 100644 --- a/packages/rocketchat-federation/server/main.js +++ b/packages/rocketchat-federation/server/main.js @@ -2,6 +2,7 @@ import { Meteor } from 'meteor/meteor'; import { _ } from 'meteor/underscore'; import { settings } from 'meteor/rocketchat:settings'; import { FederationKeys } from 'meteor/rocketchat:models'; +import { getWorkspaceAccessToken } from 'meteor/rocketchat:cloud'; import './federation-settings'; import './methods'; @@ -76,6 +77,9 @@ const updateSettings = _.debounce(Meteor.bindEnvironment(function() { url: _peerUrl.replace(/\/+$/, ''), public_key: FederationKeys.getPublicKeyString(), }, + cloud: { + token: getWorkspaceAccessToken(), + }, }; // If the settings are correctly set, let's update the configuration diff --git a/packages/rocketchat-federation/server/peerClient.js b/packages/rocketchat-federation/server/peerClient.js index 4681cd429755..4f2fca2bd632 100644 --- a/packages/rocketchat-federation/server/peerClient.js +++ b/packages/rocketchat-federation/server/peerClient.js @@ -36,6 +36,7 @@ class PeerClient { domain: this.config.peer.domain, url: this.config.peer.url, public_key: this.config.peer.public_key, + cloud_token: this.config.cloud.token, }; } diff --git a/packages/rocketchat-federation/server/peerDNS.js b/packages/rocketchat-federation/server/peerDNS.js index 4af0b03a2f6e..f5ea5a520903 100644 --- a/packages/rocketchat-federation/server/peerDNS.js +++ b/packages/rocketchat-federation/server/peerDNS.js @@ -33,13 +33,13 @@ class PeerDNS { // // ######## register(peerConfig) { - const { uniqueId, domain, url, public_key } = peerConfig; + const { uniqueId, domain, url, public_key, cloud_token } = peerConfig; this.log(`Registering peer with domain ${ domain }...`); // Attempt to register peer try { - peerHTTP.request(this.HubPeer, 'POST', '/api/v1/peers', { uniqueId, domain, url, public_key }, { total: 5, stepSize: 1000, tryToUpdateDNS: false }); + peerHTTP.request(this.HubPeer, 'POST', '/api/v1/peers', { uniqueId, domain, url, public_key, cloud_token }, { total: 5, stepSize: 1000, tryToUpdateDNS: false }); this.log('Peer registered!'); From 133811c05a48388d8099e902ea163b2d0c8b96f2 Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Fri, 8 Mar 2019 17:45:01 -0300 Subject: [PATCH 2/2] Send cloud token as authorization header --- packages/rocketchat-federation/server/peerDNS.js | 7 ++++++- .../rocketchat-federation/server/peerHTTP.js | 16 ++++++++-------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/packages/rocketchat-federation/server/peerDNS.js b/packages/rocketchat-federation/server/peerDNS.js index f5ea5a520903..6f5c5e01f60c 100644 --- a/packages/rocketchat-federation/server/peerDNS.js +++ b/packages/rocketchat-federation/server/peerDNS.js @@ -37,9 +37,14 @@ class PeerDNS { this.log(`Registering peer with domain ${ domain }...`); + let headers; + if (cloud_token && cloud_token !== '') { + headers = { Authorization: `Bearer ${ cloud_token }` }; + } + // Attempt to register peer try { - peerHTTP.request(this.HubPeer, 'POST', '/api/v1/peers', { uniqueId, domain, url, public_key, cloud_token }, { total: 5, stepSize: 1000, tryToUpdateDNS: false }); + peerHTTP.request(this.HubPeer, 'POST', '/api/v1/peers', { uniqueId, domain, url, public_key }, { total: 5, stepSize: 1000, tryToUpdateDNS: false }, headers); this.log('Peer registered!'); diff --git a/packages/rocketchat-federation/server/peerHTTP.js b/packages/rocketchat-federation/server/peerHTTP.js index 26813b8ed84e..f96967ea4890 100644 --- a/packages/rocketchat-federation/server/peerHTTP.js +++ b/packages/rocketchat-federation/server/peerHTTP.js @@ -20,7 +20,7 @@ const delay = Meteor.wrapAsync(function(ms, callback) { }, ms); }); -function doSimpleRequest(peer, method, uri, body) { +function doSimpleRequest(peer, method, uri, body, headers = {}) { this.log(`Request: ${ method } ${ uri }`); const { url: serverBaseURL } = peer; @@ -35,12 +35,12 @@ function doSimpleRequest(peer, method, uri, body) { this.log(`Sending request: ${ method } - ${ uri }`); - return HTTP.call(method, url, { data, timeout: 2000, headers: { 'x-federation-domain': this.config.peer.domain } }); + return HTTP.call(method, url, { data, timeout: 2000, headers: { ...headers, 'x-federation-domain': this.config.peer.domain } }); } // // Actually does the request, handling retries and everything -function doRequest(peer, method, uri, body, retryInfo = {}) { +function doRequest(peer, method, uri, body, retryInfo = {}, headers = {}) { // Normalize retry info retryInfo = { total: retryInfo.total || 1, @@ -52,7 +52,7 @@ function doRequest(peer, method, uri, body, retryInfo = {}) { for (let i = 0; i <= retryInfo.total; i++) { try { - return doSimpleRequest.call(this, peer, method, uri, body); + return doSimpleRequest.call(this, peer, method, uri, body, headers); } catch (err) { try { if (retryInfo.tryToUpdateDNS && !retryInfo.DNSUpdated) { @@ -112,14 +112,14 @@ class PeerHTTP { // // Direct request - simpleRequest(peer, method, uri, body) { - return doSimpleRequest.call(this, peer, method, uri, body); + simpleRequest(peer, method, uri, body, headers) { + return doSimpleRequest.call(this, peer, method, uri, body, headers); } // // Request trying to find DNS entries - request(peer, method, uri, body, retryInfo = {}) { - return doRequest.call(this, peer, method, uri, body, retryInfo); + request(peer, method, uri, body, retryInfo = {}, headers = {}) { + return doRequest.call(this, peer, method, uri, body, retryInfo, headers); } }