Scalar messaging: Add can_send_event operation (#1204)
This is mainly for use to pre-emptively show/hide buttons.
This commit is contained in:
parent
e242e5e714
commit
6369253142
2 changed files with 62 additions and 1 deletions
|
@ -18,7 +18,7 @@ limitations under the License.
|
||||||
/*
|
/*
|
||||||
Listens for incoming postMessage requests from the integrations UI URL. The following API is exposed:
|
Listens for incoming postMessage requests from the integrations UI URL. The following API is exposed:
|
||||||
{
|
{
|
||||||
action: "invite" | "membership_state" | "bot_options" | "set_bot_options",
|
action: "invite" | "membership_state" | "bot_options" | "set_bot_options" | etc... ,
|
||||||
room_id: $ROOM_ID,
|
room_id: $ROOM_ID,
|
||||||
user_id: $USER_ID
|
user_id: $USER_ID
|
||||||
// additional request fields
|
// additional request fields
|
||||||
|
@ -110,6 +110,26 @@ Example:
|
||||||
response: 78
|
response: 78
|
||||||
}
|
}
|
||||||
|
|
||||||
|
can_send_event
|
||||||
|
--------------
|
||||||
|
Check if the client can send the given event into the given room. If the client
|
||||||
|
is unable to do this, an error response is returned instead of 'response: false'.
|
||||||
|
|
||||||
|
Request:
|
||||||
|
- room_id is the room to do the check in.
|
||||||
|
- event_type is the event type which will be sent.
|
||||||
|
- is_state is true if the event to be sent is a state event.
|
||||||
|
Response:
|
||||||
|
true
|
||||||
|
Example:
|
||||||
|
{
|
||||||
|
action: "can_send_event",
|
||||||
|
is_state: false,
|
||||||
|
event_type: "m.room.message",
|
||||||
|
room_id: "!foo:bar",
|
||||||
|
response: true
|
||||||
|
}
|
||||||
|
|
||||||
set_widget
|
set_widget
|
||||||
----------
|
----------
|
||||||
Set a new widget in the room. Clobbers based on the ID.
|
Set a new widget in the room. Clobbers based on the ID.
|
||||||
|
@ -442,6 +462,42 @@ function getMembershipCount(event, roomId) {
|
||||||
sendResponse(event, count);
|
sendResponse(event, count);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function canSendEvent(event, roomId) {
|
||||||
|
const evType = "" + event.data.event_type; // force stringify
|
||||||
|
const isState = Boolean(event.data.is_state);
|
||||||
|
const client = MatrixClientPeg.get();
|
||||||
|
if (!client) {
|
||||||
|
sendError(event, _t('You need to be logged in.'));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const room = client.getRoom(roomId);
|
||||||
|
if (!room) {
|
||||||
|
sendError(event, _t('This room is not recognised.'));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const me = client.credentials.userId;
|
||||||
|
const member = room.getMember(me);
|
||||||
|
if (!member || member.membership !== "join") {
|
||||||
|
sendError(event, _t('You are not in this room.'));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let canSend = false;
|
||||||
|
if (isState) {
|
||||||
|
canSend = room.currentState.maySendStateEvent(evType, me);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
canSend = room.currentState.maySendEvent(evType, me);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!canSend) {
|
||||||
|
sendError(event, _t('You do not have permission in this room.'));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
sendResponse(event, true);
|
||||||
|
}
|
||||||
|
|
||||||
function returnStateEvent(event, roomId, eventType, stateKey) {
|
function returnStateEvent(event, roomId, eventType, stateKey) {
|
||||||
const client = MatrixClientPeg.get();
|
const client = MatrixClientPeg.get();
|
||||||
if (!client) {
|
if (!client) {
|
||||||
|
@ -538,6 +594,9 @@ const onMessage = function(event) {
|
||||||
} else if (event.data.action === "get_widgets") {
|
} else if (event.data.action === "get_widgets") {
|
||||||
getWidgets(event, roomId);
|
getWidgets(event, roomId);
|
||||||
return;
|
return;
|
||||||
|
} else if (event.data.action === "can_send_event") {
|
||||||
|
canSendEvent(event, roomId);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!userId) {
|
if (!userId) {
|
||||||
|
|
|
@ -661,6 +661,8 @@
|
||||||
"Would you like to <acceptText>accept</acceptText> or <declineText>decline</declineText> this invitation?": "Would you like to <acceptText>accept</acceptText> or <declineText>decline</declineText> this invitation?",
|
"Would you like to <acceptText>accept</acceptText> or <declineText>decline</declineText> this invitation?": "Would you like to <acceptText>accept</acceptText> or <declineText>decline</declineText> this invitation?",
|
||||||
"You already have existing direct chats with this user:": "You already have existing direct chats with this user:",
|
"You already have existing direct chats with this user:": "You already have existing direct chats with this user:",
|
||||||
"You are already in a call.": "You are already in a call.",
|
"You are already in a call.": "You are already in a call.",
|
||||||
|
"You are not in this room.": "You are not in this room.",
|
||||||
|
"You do not have permission to do that in this room.": "You do not have permission to do that in this room.",
|
||||||
"You're not in any rooms yet! Press <CreateRoomButton> to make a room or <RoomDirectoryButton> to browse the directory": "You're not in any rooms yet! Press <CreateRoomButton> to make a room or <RoomDirectoryButton> to browse the directory",
|
"You're not in any rooms yet! Press <CreateRoomButton> to make a room or <RoomDirectoryButton> to browse the directory": "You're not in any rooms yet! Press <CreateRoomButton> to make a room or <RoomDirectoryButton> to browse the directory",
|
||||||
"You are trying to access %(roomName)s.": "You are trying to access %(roomName)s.",
|
"You are trying to access %(roomName)s.": "You are trying to access %(roomName)s.",
|
||||||
"You cannot place a call with yourself.": "You cannot place a call with yourself.",
|
"You cannot place a call with yourself.": "You cannot place a call with yourself.",
|
||||||
|
|
Loading…
Reference in a new issue