commit b4b538a17fde49708b291d5f8cb7c444d06c47b2 Author: Cecylia Bocovich cohosh@torproject.org Date: Fri Oct 25 11:29:42 2019 -0400
Implemented new broker messages for browser proxy --- common/messages/proxy.go | 2 +- proxy/broker.js | 38 ++++++++++++++++++++++++-------------- proxy/spec/broker.spec.js | 16 ++++++++-------- 3 files changed, 33 insertions(+), 23 deletions(-)
diff --git a/common/messages/proxy.go b/common/messages/proxy.go index 141fbda..042caf9 100644 --- a/common/messages/proxy.go +++ b/common/messages/proxy.go @@ -33,7 +33,7 @@ HTTP 200 OK HTTP 200 OK
{ - Status: "no proxies" + Status: "no match" }
3) If the request is malformed: diff --git a/proxy/broker.js b/proxy/broker.js index 7b5b7e4..551110b 100644 --- a/proxy/broker.js +++ b/proxy/broker.js @@ -46,10 +46,16 @@ class Broker { return; } switch (xhr.status) { - case Broker.STATUS.OK: - return fulfill(xhr.responseText); // Should contain offer. - case Broker.STATUS.GATEWAY_TIMEOUT: - return reject(Broker.MESSAGE.TIMEOUT); + case Broker.CODE.OK: + var response = JSON.parse(xhr.responseText); + if (response.Status == Broker.STATUS.MATCH) { + return fulfill(response.Offer); // Should contain offer. + } else if (response.Status == Broker.STATUS.TIMEOUT) { + return reject(Broker.MESSAGE.TIMEOUT); + } else { + log('Broker ERROR: Unexpected ' + response.Status); + return reject(Broker.MESSAGE.UNEXPECTED); + } default: log('Broker ERROR: Unexpected ' + xhr.status + ' - ' + xhr.statusText); snowflake.ui.setStatus(' failure. Please refresh.'); @@ -57,7 +63,8 @@ class Broker { } }; this._xhr = xhr; // Used by spec to fake async Broker interaction - return this._postRequest(id, xhr, 'proxy', id); + var data = {"Version": "1.0", "Sid": id} + return this._postRequest(xhr, 'proxy', JSON.stringify(data)); }); }
@@ -73,26 +80,24 @@ class Broker { return; } switch (xhr.status) { - case Broker.STATUS.OK: + case Broker.CODE.OK: dbg('Broker: Successfully replied with answer.'); return dbg(xhr.responseText); - case Broker.STATUS.GONE: - return dbg('Broker: No longer valid to reply with answer.'); default: dbg('Broker ERROR: Unexpected ' + xhr.status + ' - ' + xhr.statusText); return snowflake.ui.setStatus(' failure. Please refresh.'); } }; - return this._postRequest(id, xhr, 'answer', JSON.stringify(answer)); + var data = {"Version": "1.0", "Sid": id, "Answer": JSON.stringify(answer)}; + return this._postRequest(xhr, 'answer', JSON.stringify(data)); }
// urlSuffix for the broker is different depending on what action // is desired. - _postRequest(id, xhr, urlSuffix, payload) { + _postRequest(xhr, urlSuffix, payload) { var err; try { xhr.open('POST', this.url + urlSuffix); - xhr.setRequestHeader('X-Session-ID', id); } catch (error) { err = error; /* @@ -109,10 +114,15 @@ class Broker {
}
-Broker.STATUS = { +Broker.CODE = { OK: 200, - GONE: 410, - GATEWAY_TIMEOUT: 504 + BAD_REQUEST: 400, + INTERNAL_SERVER_ERROR: 500 +}; + +Broker.STATUS = { + MATCH: "client match", + TIMEOUT: "no match" };
Broker.MESSAGE = { diff --git a/proxy/spec/broker.spec.js b/proxy/spec/broker.spec.js index 4eb3029..6ab9691 100644 --- a/proxy/spec/broker.spec.js +++ b/proxy/spec/broker.spec.js @@ -35,8 +35,8 @@ describe('Broker', function() { // fake successful request and response from broker. spyOn(b, '_postRequest').and.callFake(function() { b._xhr.readyState = b._xhr.DONE; - b._xhr.status = Broker.STATUS.OK; - b._xhr.responseText = 'fake offer'; + b._xhr.status = Broker.CODE.OK; + b._xhr.responseText = '{"Status":"client match","Offer":"fake offer"}'; return b._xhr.onreadystatechange(); }); poll = b.getClientOffer(); @@ -46,7 +46,7 @@ describe('Broker', function() { expect(desc).toEqual('fake offer'); return done(); }).catch(function() { - fail('should not reject on Broker.STATUS.OK'); + fail('should not reject on Broker.CODE.OK'); return done(); }); }); @@ -57,14 +57,15 @@ describe('Broker', function() { // fake timed-out request from broker spyOn(b, '_postRequest').and.callFake(function() { b._xhr.readyState = b._xhr.DONE; - b._xhr.status = Broker.STATUS.GATEWAY_TIMEOUT; + b._xhr.status = Broker.CODE.OK; + b._xhr.responseText = '{"Status":"no match"}'; return b._xhr.onreadystatechange(); }); poll = b.getClientOffer(); expect(poll).not.toBeNull(); expect(b._postRequest).toHaveBeenCalled(); return poll.then(function(desc) { - fail('should not fulfill on Broker.STATUS.GATEWAY_TIMEOUT'); + fail('should not fulfill with "Status: no match"'); return done(); }, function(err) { expect(err).toBe(Broker.MESSAGE.TIMEOUT); @@ -101,7 +102,7 @@ describe('Broker', function() { var b = new Broker('fake'); spyOn(b, '_postRequest'); b.sendAnswer('fake id', 123); - expect(b._postRequest).toHaveBeenCalledWith('fake id', jasmine.any(Object), 'answer', '123'); + expect(b._postRequest).toHaveBeenCalledWith(jasmine.any(Object), 'answer', '{"Version":"1.0","Sid":"fake id","Answer":"123"}'); });
it('POST XMLHttpRequests to the broker', function() { @@ -110,9 +111,8 @@ describe('Broker', function() { spyOn(b._xhr, 'open'); spyOn(b._xhr, 'setRequestHeader'); spyOn(b._xhr, 'send'); - b._postRequest(0, b._xhr, 'test', 'data'); + b._postRequest(b._xhr, 'test', 'data'); expect(b._xhr.open).toHaveBeenCalled(); - expect(b._xhr.setRequestHeader).toHaveBeenCalled(); expect(b._xhr.send).toHaveBeenCalled(); });