diff --git a/syweb/webclient/components/matrix/matrix-service.js b/syweb/webclient/components/matrix/matrix-service.js
index 8ff2999e2d..63051c4f47 100644
--- a/syweb/webclient/components/matrix/matrix-service.js
+++ b/syweb/webclient/components/matrix/matrix-service.js
@@ -443,7 +443,8 @@ angular.module('matrixService', [])
redactEvent: function(room_id, event_id) {
var path = "/rooms/$room_id/redact/$event_id";
- path = path.replace("$room_id", room_id);
+ path = path.replace("$room_id", encodeURIComponent(room_id));
+ // TODO: encodeURIComponent when HS updated.
path = path.replace("$event_id", event_id);
var content = {};
return doRequest("POST", path, undefined, content);
@@ -461,7 +462,7 @@ angular.module('matrixService', [])
paginateBackMessages: function(room_id, from_token, limit) {
var path = "/rooms/$room_id/messages";
- path = path.replace("$room_id", room_id);
+ path = path.replace("$room_id", encodeURIComponent(room_id));
var params = {
from: from_token,
limit: limit,
@@ -509,12 +510,12 @@ angular.module('matrixService', [])
setProfileInfo: function(data, info_segment) {
var path = "/profile/$user/" + info_segment;
- path = path.replace("$user", config.user_id);
+ path = path.replace("$user", encodeURIComponent(config.user_id));
return doRequest("PUT", path, undefined, data);
},
getProfileInfo: function(userId, info_segment) {
- var path = "/profile/"+userId
+ var path = "/profile/"+encodeURIComponent(userId);
if (info_segment) path += '/' + info_segment;
return doRequest("GET", path);
},
@@ -633,7 +634,7 @@ angular.module('matrixService', [])
// Set the logged in user presence state
setUserPresence: function(presence) {
var path = "/presence/$user_id/status";
- path = path.replace("$user_id", config.user_id);
+ path = path.replace("$user_id", encodeURIComponent(config.user_id));
return doRequest("PUT", path, undefined, {
presence: presence
});
diff --git a/syweb/webclient/test/unit/matrix-service.spec.js b/syweb/webclient/test/unit/matrix-service.spec.js
index 2ca9a24323..4959f2395d 100644
--- a/syweb/webclient/test/unit/matrix-service.spec.js
+++ b/syweb/webclient/test/unit/matrix-service.spec.js
@@ -5,6 +5,11 @@ describe('MatrixService', function() {
var URL = BASE + PREFIX;
var roomId = "!wejigf387t34:matrix.org";
+ var CONFIG = {
+ access_token: "foobar",
+ homeserver: BASE
+ };
+
beforeEach(module('matrixService'));
beforeEach(inject(function($rootScope, $httpBackend) {
@@ -19,10 +24,7 @@ describe('MatrixService', function() {
it('should be able to POST /createRoom with an alias', inject(
function(matrixService) {
- matrixService.setConfig({
- access_token: "foobar",
- homeserver: "http://example.com"
- });
+ matrixService.setConfig(CONFIG);
var alias = "flibble";
matrixService.create(alias).then(function(response) {
expect(response.data).toEqual({});
@@ -37,10 +39,7 @@ describe('MatrixService', function() {
}));
it('should be able to GET /initialSync', inject(function(matrixService) {
- matrixService.setConfig({
- access_token: "foobar",
- homeserver: "http://example.com"
- });
+ matrixService.setConfig(CONFIG);
var limit = 15;
matrixService.initialSync(limit).then(function(response) {
expect(response.data).toEqual([]);
@@ -54,10 +53,7 @@ describe('MatrixService', function() {
it('should be able to GET /rooms/$roomid/state', inject(
function(matrixService) {
- matrixService.setConfig({
- access_token: "foobar",
- homeserver: "http://example.com"
- });
+ matrixService.setConfig(CONFIG);
matrixService.roomState(roomId).then(function(response) {
expect(response.data).toEqual([]);
});
@@ -70,10 +66,7 @@ describe('MatrixService', function() {
}));
it('should be able to POST /join', inject(function(matrixService) {
- matrixService.setConfig({
- access_token: "foobar",
- homeserver: "http://example.com"
- });
+ matrixService.setConfig(CONFIG);
matrixService.joinAlias(roomId).then(function(response) {
expect(response.data).toEqual({});
});
@@ -88,10 +81,7 @@ describe('MatrixService', function() {
it('should be able to POST /rooms/$roomid/join', inject(
function(matrixService) {
- matrixService.setConfig({
- access_token: "foobar",
- homeserver: "http://example.com"
- });
+ matrixService.setConfig(CONFIG);
matrixService.join(roomId).then(function(response) {
expect(response.data).toEqual({});
});
@@ -106,10 +96,7 @@ describe('MatrixService', function() {
it('should be able to POST /rooms/$roomid/invite', inject(
function(matrixService) {
- matrixService.setConfig({
- access_token: "foobar",
- homeserver: "http://example.com"
- });
+ matrixService.setConfig(CONFIG);
var inviteUserId = "@user:example.com";
matrixService.invite(roomId, inviteUserId).then(function(response) {
expect(response.data).toEqual({});
@@ -127,10 +114,7 @@ describe('MatrixService', function() {
it('should be able to POST /rooms/$roomid/leave', inject(
function(matrixService) {
- matrixService.setConfig({
- access_token: "foobar",
- homeserver: "http://example.com"
- });
+ matrixService.setConfig(CONFIG);
matrixService.leave(roomId).then(function(response) {
expect(response.data).toEqual({});
});
@@ -145,10 +129,7 @@ describe('MatrixService', function() {
it('should be able to POST /rooms/$roomid/ban', inject(
function(matrixService) {
- matrixService.setConfig({
- access_token: "foobar",
- homeserver: "http://example.com"
- });
+ matrixService.setConfig(CONFIG);
var userId = "@example:example.com";
var reason = "Because.";
matrixService.ban(roomId, userId, reason).then(function(response) {
@@ -168,10 +149,7 @@ describe('MatrixService', function() {
it('should be able to GET /directory/room/$alias', inject(
function(matrixService) {
- matrixService.setConfig({
- access_token: "foobar",
- homeserver: "http://example.com"
- });
+ matrixService.setConfig(CONFIG);
var alias = "#test:example.com";
var roomId = "!wefuhewfuiw:example.com";
matrixService.resolveRoomAlias(alias).then(function(response) {
@@ -190,10 +168,7 @@ describe('MatrixService', function() {
}));
it('should be able to send m.room.name', inject(function(matrixService) {
- matrixService.setConfig({
- access_token: "foobar",
- homeserver: "http://example.com"
- });
+ matrixService.setConfig(CONFIG);
var roomId = "!fh38hfwfwef:example.com";
var name = "Room Name";
matrixService.setName(roomId, name).then(function(response) {
@@ -211,10 +186,7 @@ describe('MatrixService', function() {
}));
it('should be able to send m.room.topic', inject(function(matrixService) {
- matrixService.setConfig({
- access_token: "foobar",
- homeserver: "http://example.com"
- });
+ matrixService.setConfig(CONFIG);
var roomId = "!fh38hfwfwef:example.com";
var topic = "A room topic can go here.";
matrixService.setTopic(roomId, topic).then(function(response) {
@@ -233,10 +205,7 @@ describe('MatrixService', function() {
it('should be able to send generic state events without a state key', inject(
function(matrixService) {
- matrixService.setConfig({
- access_token: "foobar",
- homeserver: "http://example.com"
- });
+ matrixService.setConfig(CONFIG);
var roomId = "!fh38hfwfwef:example.com";
var eventType = "com.example.events.test";
var content = {
@@ -259,10 +228,7 @@ describe('MatrixService', function() {
// 500 matrix.org
xit('should be able to send generic state events with a state key', inject(
function(matrixService) {
- matrixService.setConfig({
- access_token: "foobar",
- homeserver: "http://example.com"
- });
+ matrixService.setConfig(CONFIG);
var roomId = "!fh38hfwfwef:example.com";
var eventType = "com.example.events.test:special@characters";
var content = {
@@ -285,10 +251,7 @@ describe('MatrixService', function() {
it('should be able to PUT generic events ', inject(
function(matrixService) {
- matrixService.setConfig({
- access_token: "foobar",
- homeserver: "http://example.com"
- });
+ matrixService.setConfig(CONFIG);
var roomId = "!fh38hfwfwef:example.com";
var eventType = "com.example.events.test";
var txnId = "42";
@@ -311,10 +274,7 @@ describe('MatrixService', function() {
it('should be able to PUT text messages ', inject(
function(matrixService) {
- matrixService.setConfig({
- access_token: "foobar",
- homeserver: "http://example.com"
- });
+ matrixService.setConfig(CONFIG);
var roomId = "!fh38hfwfwef:example.com";
var body = "ABC 123";
matrixService.sendTextMessage(roomId, body).then(
@@ -333,4 +293,212 @@ describe('MatrixService', function() {
.respond({});
httpBackend.flush();
}));
+
+ it('should be able to PUT emote messages ', inject(
+ function(matrixService) {
+ matrixService.setConfig(CONFIG);
+ var roomId = "!fh38hfwfwef:example.com";
+ var body = "ABC 123";
+ matrixService.sendEmoteMessage(roomId, body).then(
+ function(response) {
+ expect(response.data).toEqual({});
+ });
+
+ httpBackend.expectPUT(
+ new RegExp(URL + "/rooms/" + encodeURIComponent(roomId) +
+ "/send/m.room.message/(.*)" +
+ "?access_token=foobar"),
+ {
+ body: body,
+ msgtype: "m.emote"
+ })
+ .respond({});
+ httpBackend.flush();
+ }));
+
+ it('should be able to POST redactions', inject(
+ function(matrixService) {
+ matrixService.setConfig(CONFIG);
+ var roomId = "!fh38hfwfwef:example.com";
+ var eventId = "fwefwexample.com";
+ matrixService.redactEvent(roomId, eventId).then(
+ function(response) {
+ expect(response.data).toEqual({});
+ });
+
+ httpBackend.expectPOST(URL + "/rooms/" + encodeURIComponent(roomId) +
+ "/redact/" + encodeURIComponent(eventId) +
+ "?access_token=foobar")
+ .respond({});
+ httpBackend.flush();
+ }));
+
+ it('should be able to GET /directory/room/$alias', inject(
+ function(matrixService) {
+ matrixService.setConfig(CONFIG);
+ var alias = "#test:example.com";
+ var roomId = "!wefuhewfuiw:example.com";
+ matrixService.resolveRoomAlias(alias).then(function(response) {
+ expect(response.data).toEqual({
+ room_id: roomId
+ });
+ });
+
+ httpBackend.expectGET(
+ URL + "/directory/room/" + encodeURIComponent(alias) +
+ "?access_token=foobar")
+ .respond({
+ room_id: roomId
+ });
+ httpBackend.flush();
+ }));
+
+ it('should be able to GET /rooms/$roomid/members', inject(
+ function(matrixService) {
+ matrixService.setConfig(CONFIG);
+ var roomId = "!wefuhewfuiw:example.com";
+ matrixService.getMemberList(roomId).then(function(response) {
+ expect(response.data).toEqual({});
+ });
+
+ httpBackend.expectGET(
+ URL + "/rooms/" + encodeURIComponent(roomId) +
+ "/members?access_token=foobar")
+ .respond({});
+ httpBackend.flush();
+ }));
+
+ it('should be able to paginate a room', inject(
+ function(matrixService) {
+ matrixService.setConfig(CONFIG);
+ var roomId = "!wefuhewfuiw:example.com";
+ var from = "3t_44e_54z";
+ var limit = 20;
+ matrixService.paginateBackMessages(roomId, from, limit).then(function(response) {
+ expect(response.data).toEqual({});
+ });
+
+ httpBackend.expectGET(
+ URL + "/rooms/" + encodeURIComponent(roomId) +
+ "/messages?access_token=foobar&dir=b&from="+
+ encodeURIComponent(from)+"&limit="+limit)
+ .respond({});
+ httpBackend.flush();
+ }));
+
+ it('should be able to GET /publicRooms', inject(
+ function(matrixService) {
+ matrixService.setConfig(CONFIG);
+ matrixService.publicRooms().then(function(response) {
+ expect(response.data).toEqual({});
+ });
+
+ httpBackend.expectGET(
+ new RegExp(URL + "/publicRooms(.*)"))
+ .respond({});
+ httpBackend.flush();
+ }));
+
+ it('should be able to GET /profile/$userid/displayname', inject(
+ function(matrixService) {
+ matrixService.setConfig(CONFIG);
+ var userId = "@foo:example.com";
+ matrixService.getDisplayName(userId).then(function(response) {
+ expect(response.data).toEqual({});
+ });
+
+ httpBackend.expectGET(URL + "/profile/" + encodeURIComponent(userId) +
+ "/displayname?access_token=foobar")
+ .respond({});
+ httpBackend.flush();
+ }));
+
+ it('should be able to GET /profile/$userid/avatar_url', inject(
+ function(matrixService) {
+ matrixService.setConfig(CONFIG);
+ var userId = "@foo:example.com";
+ matrixService.getProfilePictureUrl(userId).then(function(response) {
+ expect(response.data).toEqual({});
+ });
+
+ httpBackend.expectGET(URL + "/profile/" + encodeURIComponent(userId) +
+ "/avatar_url?access_token=foobar")
+ .respond({});
+ httpBackend.flush();
+ }));
+
+ it('should be able to PUT /profile/$me/avatar_url', inject(
+ function(matrixService) {
+ var testConfig = angular.copy(CONFIG);
+ testConfig.user_id = "@bob:example.com";
+ matrixService.setConfig(testConfig);
+ var url = "http://example.com/mypic.jpg";
+ matrixService.setProfilePictureUrl(url).then(function(response) {
+ expect(response.data).toEqual({});
+ });
+ httpBackend.expectPUT(URL + "/profile/" +
+ encodeURIComponent(testConfig.user_id) +
+ "/avatar_url?access_token=foobar",
+ {
+ avatar_url: url
+ })
+ .respond({});
+ httpBackend.flush();
+ }));
+
+ it('should be able to PUT /profile/$me/displayname', inject(
+ function(matrixService) {
+ var testConfig = angular.copy(CONFIG);
+ testConfig.user_id = "@bob:example.com";
+ matrixService.setConfig(testConfig);
+ var displayname = "Bob Smith";
+ matrixService.setDisplayName(displayname).then(function(response) {
+ expect(response.data).toEqual({});
+ });
+ httpBackend.expectPUT(URL + "/profile/" +
+ encodeURIComponent(testConfig.user_id) +
+ "/displayname?access_token=foobar",
+ {
+ displayname: displayname
+ })
+ .respond({});
+ httpBackend.flush();
+ }));
+
+ it('should be able to login with password', inject(
+ function(matrixService) {
+ matrixService.setConfig(CONFIG);
+ var userId = "@bob:example.com";
+ var password = "monkey";
+ matrixService.login(userId, password).then(function(response) {
+ expect(response.data).toEqual({});
+ });
+ httpBackend.expectPOST(new RegExp(URL+"/login(.*)"),
+ {
+ user: userId,
+ password: password,
+ type: "m.login.password"
+ })
+ .respond({});
+ httpBackend.flush();
+ }));
+
+ it('should be able to PUT presence status', inject(
+ function(matrixService) {
+ var testConfig = angular.copy(CONFIG);
+ testConfig.user_id = "@bob:example.com";
+ matrixService.setConfig(testConfig);
+ var status = "unavailable";
+ matrixService.setUserPresence(status).then(function(response) {
+ expect(response.data).toEqual({});
+ });
+ httpBackend.expectPUT(URL+"/presence/"+
+ encodeURIComponent(testConfig.user_id)+
+ "/status?access_token=foobar",
+ {
+ presence: status
+ })
+ .respond({});
+ httpBackend.flush();
+ }));
});
|