Package io.meeds.chat.service.utils
Class MatrixHttpClient
java.lang.Object
io.meeds.chat.service.utils.MatrixHttpClient
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionauthenticateUser(String userName, String password) Authenticates a user using his userName and passwordcreateRoom(String name, String description, String token) createUserAccount(org.exoplatform.services.organization.User user, String token) deleteMedia(String mediaId, String accessToken) booleandeleteRoom(String matrixRoomId, String accessToken) Deletes a Matrix roomdisableAccount(String userName, boolean eraseData, String token) getAccessToken(String userJWTToken) Get an authenticated access token for the administrative tasksgetEventById(String eventId, String roomId, String accessToken) Retrieves an event from Matrix by its IdgetMediaInfo(String mediaId, String accessToken) getOverriddenRateLimitForUser(String userIdOnMatrix, String accessToken) Gets the overridden the rate limits for a given usergetRoomDisplayName(String roomIdLocalPart, String currentUserMatrixId, String accessToken) Reads a room's display name from Matrix itself, as the given user: itsm.room.name, or — for a two-member room, i.e.getRoomMessages(String matrixRoomId, int limit, String accessToken) Retrieves the most recent messages of a room as the user owning the given access token, using the Matrix client API (/_matrix/client/v3/rooms/{roomId}/messages).getRoomSettings(String matrixRoomId, String accessToken) Get permissions settings of a roomgetUnreadRooms(String accessToken, int timelineLimit) Returns, for the user owning the given access token, the rooms that have unread notifications together with their recent timeline messages, using a lightweight/synccall.Retrieve the user details from Matrix servergetUserDisplayName(String userMatrixId, String matrixAccessToken) getUserPresence(String matrixIdOfUser, String accessToken) Retrieve the user presence from Matrix serverbooleaninvalidateAccessToken(String accessToken) Invalidates an access token on Matrix serverbooleaninviteUserToRoom(String roomId, String userMatrixId, String invitationMessage, String token) Invites a user to a specific room on MatrixbooleanisUserMemberOfRoom(String matrixRoomId, String matrixIdOfUser, String accessToken) Checks if a user is a member of a roombooleanjoinUserToRoom(String matrixRoomId, String matrixIdOfUser, String token) Adds directly a user to a roombooleankickUserFromRoom(String roomId, String userMatrixId, String raisonMessage, String token) Kicks a user out of a specific room on MatrixbooleanmakeUserAdminInRoom(String matrixRoomId, String matrixIdOfUser, String token) Make user an admin of the roomoverrideRateLimitForUser(String userIdOnMatrix, int messagesPerSecond, int burstCount, String accessToken) Overrides the rate limits for a given userrenameRoom(String roomId, String newRoomName, String token) saveUserAccount(org.exoplatform.social.core.identity.model.Identity user, String matrixUserId, boolean isNew, String token) Saves the user account on MatrixsaveUserAccount(org.exoplatform.social.core.identity.model.Identity user, String matrixUserId, boolean isNew, String token, boolean isEnableUserOperation, boolean isUserEnabled) Saves the user accountsearchMessages(String query, String roomIdLocalPart, int limit, String accessToken) Runs a Matrix full-text search of message bodies as the user owning the given access token, optionally scoped to a single room.sendMessage(String matrixRoomId, String text, String transactionId, String accessToken) Sends a textual message to a room as the user owning the given access token, using the Matrix client API.voidsendReadReceipt(String matrixRoomId, String eventId, String accessToken) Posts anm.readreceipt on behalf of a user: a Matrix read receipt is a high-water mark, everything up to the event becomes read.setUserPresence(String matrixIdOfUser, String presence, String statusMessage, String accessToken) Set the user presence on Matrix serverbooleanupdateRoomAvatar(String matrixRoomId, String avatarURL, String accessToken) Update room avatarbooleanupdateRoomDescription(String matrixRoomId, String description, String accessToken) Updates the room descriptionupdateRoomSettings(String matrixRoomId, MatrixRoomPermissions roomSettings, String accessToken) Updates the room settingsbooleanupdateUserAvatar(String userMatrixId, String avatarURL, String accessToken) Update the user avatarvoidupdateUserDisplayName(String userMatrixId, String displayName, String token) Sets a new display name for the useruploadFile(String fileName, String mimeType, byte[] imageBytes, String accessToken)
-
Constructor Details
-
MatrixHttpClient
public MatrixHttpClient()
-
-
Method Details
-
getAccessToken
public String getAccessToken(String userJWTToken) throws org.exoplatform.ws.frameworks.json.impl.JsonException, IOException, InterruptedException Get an authenticated access token for the administrative tasks- Parameters:
userJWTToken- JWT token used to authenticate the admin user- Returns:
- String the access token for the authenticated user
- Throws:
org.exoplatform.ws.frameworks.json.impl.JsonExceptionIOExceptionInterruptedException
-
authenticateUser
public String authenticateUser(String userName, String password) throws org.exoplatform.ws.frameworks.json.impl.JsonException, IOException, InterruptedException Authenticates a user using his userName and password- Parameters:
userName- the usernamepassword- the user password- Returns:
- String : access token for the authenticated user
- Throws:
org.exoplatform.ws.frameworks.json.impl.JsonExceptionIOExceptionInterruptedException
-
createRoom
- Throws:
Exception
-
createUserAccount
-
updateUserDisplayName
public void updateUserDisplayName(String userMatrixId, String displayName, String token) throws IOException, InterruptedException, org.exoplatform.ws.frameworks.json.impl.JsonException Sets a new display name for the user- Parameters:
userMatrixId- the ID of the user on MatrixdisplayName- the new display nametoken- the access token- Throws:
IOExceptionInterruptedExceptionorg.exoplatform.ws.frameworks.json.impl.JsonException
-
saveUserAccount
public String saveUserAccount(org.exoplatform.social.core.identity.model.Identity user, String matrixUserId, boolean isNew, String token) Saves the user account on Matrix- Parameters:
user- the user identitymatrixUserId- the user Matrix ID to setisNew- if the user has been just createdtoken- the authorization token- Returns:
- the user Matrix ID
-
saveUserAccount
public String saveUserAccount(org.exoplatform.social.core.identity.model.Identity user, String matrixUserId, boolean isNew, String token, boolean isEnableUserOperation, boolean isUserEnabled) Saves the user account- Parameters:
user- the UsermatrixUserId- the corresponding matrix IDisNew- if the user account is onetoken- the access tokenisEnableUserOperation- is this an operation to enable/disable the user on Matrix- Returns:
- the user Matrix ID
-
disableAccount
-
renameRoom
-
inviteUserToRoom
public boolean inviteUserToRoom(String roomId, String userMatrixId, String invitationMessage, String token) Invites a user to a specific room on Matrix- Parameters:
roomId- the Id of the roomuserMatrixId- the Matrix id of the userinvitationMessage- a custom invitation message- Returns:
-
kickUserFromRoom
public boolean kickUserFromRoom(String roomId, String userMatrixId, String raisonMessage, String token) Kicks a user out of a specific room on Matrix- Parameters:
roomId- the Id of the roomuserMatrixId- the Matrix id of the userraisonMessage- the raison message
-
joinUserToRoom
Adds directly a user to a room- Parameters:
matrixRoomId- the room IDmatrixIdOfUser- the ID of the user of Matrix- Returns:
- Boolean true if operation succeeded
-
makeUserAdminInRoom
Make user an admin of the room- Parameters:
matrixRoomId- the room IDmatrixIdOfUser- the id of the user- Returns:
- Boolean true if succeeded
-
isUserMemberOfRoom
public boolean isUserMemberOfRoom(String matrixRoomId, String matrixIdOfUser, String accessToken) throws IOException, InterruptedException Checks if a user is a member of a room- Parameters:
matrixRoomId- the room IDmatrixIdOfUser- the ID of the user on Matrix- Returns:
- true if the user is a member of the room, false otherwise
- Throws:
IOExceptionInterruptedException
-
getRoomSettings
public MatrixRoomPermissions getRoomSettings(String matrixRoomId, String accessToken) throws IOException, InterruptedException, org.exoplatform.ws.frameworks.json.impl.JsonException Get permissions settings of a room- Parameters:
matrixRoomId-- Returns:
- MatrixRoomPermissions object containing settings of the room
- Throws:
IOExceptionInterruptedExceptionorg.exoplatform.ws.frameworks.json.impl.JsonException
-
updateRoomSettings
public String updateRoomSettings(String matrixRoomId, MatrixRoomPermissions roomSettings, String accessToken) throws IOException, InterruptedException, org.exoplatform.ws.frameworks.json.impl.JsonException Updates the room settings- Parameters:
matrixRoomId- the Id of the room- Returns:
- MatrixRoomPermissions updated room settings
- Throws:
IOExceptionInterruptedExceptionorg.exoplatform.ws.frameworks.json.impl.JsonException
-
uploadFile
-
updateRoomAvatar
Update room avatar- Parameters:
matrixRoomId- the room IDavatarURL- the Avatar URL on- Returns:
- true if succeeded otherwise false
-
updateUserAvatar
Update the user avatar- Parameters:
userMatrixId- the Matrix room IDavatarURL- the avatar URL on Matrix- Returns:
- true if updated, false otherwise
-
updateRoomDescription
Updates the room description- Parameters:
matrixRoomId- the ID of the room on Matrixdescription- the updated description- Returns:
- true if the operation is successful, false otherwise
-
deleteRoom
Deletes a Matrix room- Parameters:
matrixRoomId- the ID of the roomaccessToken- the access token- Returns:
- boolean True if the deletion is successful otherwise False
-
getUserDisplayName
public String getUserDisplayName(String userMatrixId, String matrixAccessToken) throws IOException, InterruptedException, org.exoplatform.ws.frameworks.json.impl.JsonException - Throws:
IOExceptionInterruptedExceptionorg.exoplatform.ws.frameworks.json.impl.JsonException
-
getUserPresence
public String getUserPresence(String matrixIdOfUser, String accessToken) throws IOException, InterruptedException, org.exoplatform.ws.frameworks.json.impl.JsonException Retrieve the user presence from Matrix server- Parameters:
matrixIdOfUser- the ID of the user on MatrixaccessToken- the access token- Returns:
- the value of the presence
- Throws:
IOExceptionInterruptedExceptionorg.exoplatform.ws.frameworks.json.impl.JsonException
-
getUser
public String getUser(String matrixIdOfUser, String accessToken) throws IOException, InterruptedException Retrieve the user details from Matrix server- Parameters:
matrixIdOfUser- the ID of the user on MatrixaccessToken- the access token- Returns:
- String representing JSON of the user
- Throws:
IOExceptionInterruptedException
-
setUserPresence
public String setUserPresence(String matrixIdOfUser, String presence, String statusMessage, String accessToken) throws IOException, InterruptedException, org.exoplatform.ws.frameworks.json.impl.JsonException Set the user presence on Matrix server- Parameters:
matrixIdOfUser- the ID of the user n Matrixpresence- the presence value : 'online, offline , unavailable"statusMessage- : the personalized status messageaccessToken- the access token- Returns:
- Throws:
IOExceptionInterruptedExceptionorg.exoplatform.ws.frameworks.json.impl.JsonException
-
overrideRateLimitForUser
public String overrideRateLimitForUser(String userIdOnMatrix, int messagesPerSecond, int burstCount, String accessToken) throws IOException, InterruptedException Overrides the rate limits for a given user- Parameters:
userIdOnMatrix- the user Id on MatrixmessagesPerSecond- the allowed number of messages per secondburstCount- how many actions that can be performed before being limitedaccessToken- the access token- Returns:
- String the applied rate limits configuration
- Throws:
IOExceptionInterruptedException
-
getOverriddenRateLimitForUser
public String getOverriddenRateLimitForUser(String userIdOnMatrix, String accessToken) throws IOException, InterruptedException Gets the overridden the rate limits for a given user- Parameters:
userIdOnMatrix- the user Id on MatrixaccessToken- the access token- Returns:
- String the applied rate limits configuration
- Throws:
IOExceptionInterruptedException
-
getEventById
public MatrixMessage getEventById(String eventId, String roomId, String accessToken) throws IOException, InterruptedException, org.exoplatform.ws.frameworks.json.impl.JsonException Retrieves an event from Matrix by its Id- Parameters:
eventId- the event ID- Returns:
- Map representing the message
- Throws:
IOExceptionInterruptedExceptionorg.exoplatform.ws.frameworks.json.impl.JsonException
-
getRoomMessages
public List<MatrixMessage> getRoomMessages(String matrixRoomId, int limit, String accessToken) throws IOException, InterruptedException, org.exoplatform.ws.frameworks.json.impl.JsonException Retrieves the most recent messages of a room as the user owning the given access token, using the Matrix client API (/_matrix/client/v3/rooms/{roomId}/messages). Synapse enforces the user's own visibility (membership, history visibility, redactions); if the user is not allowed to read the room an empty list is returned. Events are returned newest-first (thedir=bdirection).- Parameters:
matrixRoomId- the room local part (without the server name suffix)limit- the maximum number of events to fetchaccessToken- the requesting user's Matrix access token- Returns:
- the
m.room.messageevents the user can see, newest first - Throws:
IOExceptionInterruptedExceptionorg.exoplatform.ws.frameworks.json.impl.JsonException
-
getUnreadRooms
public List<MatrixUnreadRoom> getUnreadRooms(String accessToken, int timelineLimit) throws IOException, InterruptedException, org.exoplatform.ws.frameworks.json.impl.JsonException Returns, for the user owning the given access token, the rooms that have unread notifications together with their recent timeline messages, using a lightweight/synccall. Synapse only returns rooms the user has joined, so visibility is naturally enforced.- Parameters:
accessToken- the requesting user's Matrix access tokentimelineLimit- the maximum number of recent events to fetch per room- Returns:
- the user's unread rooms, never
null - Throws:
IOExceptionInterruptedExceptionorg.exoplatform.ws.frameworks.json.impl.JsonException
-
getRoomDisplayName
public String getRoomDisplayName(String roomIdLocalPart, String currentUserMatrixId, String accessToken) Reads a room's display name from Matrix itself, as the given user: itsm.room.name, or — for a two-member room, i.e. a direct message — the other member's display name. Used to name a conversation the platform does not track, so it is shown by its real name instead of a placeholder.- Parameters:
roomIdLocalPart- the room local part (without the server name suffix)currentUserMatrixId- the requesting user's full Matrix id, used to pick the other member of a direct messageaccessToken- the requesting user's Matrix access token- Returns:
- the room display name, or
nullwhen Matrix has none either
-
searchMessages
public List<MatrixMessage> searchMessages(String query, String roomIdLocalPart, int limit, String accessToken) throws IOException, InterruptedException, org.exoplatform.ws.frameworks.json.impl.JsonException Runs a Matrix full-text search of message bodies as the user owning the given access token, optionally scoped to a single room. Synapse enforces the user's visibility, so only rooms the user can see are searched. Uses the/_matrix/client/v3/searchendpoint (room_events category), ordered by recency.An edited message is stored by Matrix as an additional
m.room.messageevent (m.relates_to.rel_type = m.replace) whose fallback body repeats the text, so Synapse returns both the original and every edit as separate hits. Each edit is therefore folded back onto the event it replaces, redacted events are dropped, and the hits are de-duplicated by event id, so one message counts once and each hit points at an event the client actually renders.- Parameters:
query- the free-text search termroomIdLocalPart- the room local part to scope the search to, ornull/blank to search across all of the user's roomslimit- the maximum number of hits to returnaccessToken- the requesting user's Matrix access token- Returns:
- the matching messages, most recent first, each carrying its room id, one entry per message
- Throws:
IOExceptionInterruptedExceptionorg.exoplatform.ws.frameworks.json.impl.JsonException
-
sendMessage
public String sendMessage(String matrixRoomId, String text, String transactionId, String accessToken) throws IOException, InterruptedException, org.exoplatform.ws.frameworks.json.impl.JsonException Sends a textual message to a room as the user owning the given access token, using the Matrix client API. Synapse enforces that the user is allowed to send to the room.- Parameters:
matrixRoomId- the room local part (without the server name suffix)text- the plain text message bodytransactionId- a unique client transaction id (for idempotency)accessToken- the requesting user's Matrix access token- Returns:
- the created event id
- Throws:
IOExceptionInterruptedExceptionorg.exoplatform.ws.frameworks.json.impl.JsonException
-
sendReadReceipt
public void sendReadReceipt(String matrixRoomId, String eventId, String accessToken) throws IOException, InterruptedException Posts anm.readreceipt on behalf of a user: a Matrix read receipt is a high-water mark, everything up to the event becomes read.- Parameters:
matrixRoomId- the room local ideventId- the event read up toaccessToken- the user's Matrix access token- Throws:
IOExceptionInterruptedException
-
invalidateAccessToken
Invalidates an access token on Matrix server- Parameters:
accessToken-- Returns:
- Throws:
IOExceptionInterruptedException
-
getMediaInfo
public Optional<MediaInfo> getMediaInfo(String mediaId, String accessToken) throws IOException, InterruptedException - Throws:
IOExceptionInterruptedException
-
deleteMedia
public HttpResponse<String> deleteMedia(String mediaId, String accessToken) throws IOException, InterruptedException - Throws:
IOExceptionInterruptedException
-