Class MatrixHttpClient

java.lang.Object
io.meeds.chat.service.utils.MatrixHttpClient

@Component public class MatrixHttpClient extends Object
  • 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.JsonException
      IOException
      InterruptedException
    • 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 username
      password - the user password
      Returns:
      String : access token for the authenticated user
      Throws:
      org.exoplatform.ws.frameworks.json.impl.JsonException
      IOException
      InterruptedException
    • createRoom

      public String createRoom(String name, String description, String token) throws Exception
      Throws:
      Exception
    • createUserAccount

      public String createUserAccount(org.exoplatform.services.organization.User user, String token)
    • 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 Matrix
      displayName - the new display name
      token - the access token
      Throws:
      IOException
      InterruptedException
      org.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 identity
      matrixUserId - the user Matrix ID to set
      isNew - if the user has been just created
      token - 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 User
      matrixUserId - the corresponding matrix ID
      isNew - if the user account is one
      token - the access token
      isEnableUserOperation - is this an operation to enable/disable the user on Matrix
      Returns:
      the user Matrix ID
    • disableAccount

      public String disableAccount(String userName, boolean eraseData, String token)
    • renameRoom

      public String renameRoom(String roomId, String newRoomName, String token)
    • 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 room
      userMatrixId - the Matrix id of the user
      invitationMessage - 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 room
      userMatrixId - the Matrix id of the user
      raisonMessage - the raison message
    • joinUserToRoom

      public boolean joinUserToRoom(String matrixRoomId, String matrixIdOfUser, String token)
      Adds directly a user to a room
      Parameters:
      matrixRoomId - the room ID
      matrixIdOfUser - the ID of the user of Matrix
      Returns:
      Boolean true if operation succeeded
    • makeUserAdminInRoom

      public boolean makeUserAdminInRoom(String matrixRoomId, String matrixIdOfUser, String token)
      Make user an admin of the room
      Parameters:
      matrixRoomId - the room ID
      matrixIdOfUser - 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 ID
      matrixIdOfUser - the ID of the user on Matrix
      Returns:
      true if the user is a member of the room, false otherwise
      Throws:
      IOException
      InterruptedException
    • 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:
      IOException
      InterruptedException
      org.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:
      IOException
      InterruptedException
      org.exoplatform.ws.frameworks.json.impl.JsonException
    • uploadFile

      public String uploadFile(String fileName, String mimeType, byte[] imageBytes, String accessToken)
    • updateRoomAvatar

      public boolean updateRoomAvatar(String matrixRoomId, String avatarURL, String accessToken)
      Update room avatar
      Parameters:
      matrixRoomId - the room ID
      avatarURL - the Avatar URL on
      Returns:
      true if succeeded otherwise false
    • updateUserAvatar

      public boolean updateUserAvatar(String userMatrixId, String avatarURL, String accessToken)
      Update the user avatar
      Parameters:
      userMatrixId - the Matrix room ID
      avatarURL - the avatar URL on Matrix
      Returns:
      true if updated, false otherwise
    • updateRoomDescription

      public boolean updateRoomDescription(String matrixRoomId, String description, String accessToken)
      Updates the room description
      Parameters:
      matrixRoomId - the ID of the room on Matrix
      description - the updated description
      Returns:
      true if the operation is successful, false otherwise
    • deleteRoom

      public boolean deleteRoom(String matrixRoomId, String accessToken)
      Deletes a Matrix room
      Parameters:
      matrixRoomId - the ID of the room
      accessToken - 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:
      IOException
      InterruptedException
      org.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 Matrix
      accessToken - the access token
      Returns:
      the value of the presence
      Throws:
      IOException
      InterruptedException
      org.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 Matrix
      accessToken - the access token
      Returns:
      String representing JSON of the user
      Throws:
      IOException
      InterruptedException
    • 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 Matrix
      presence - the presence value : 'online, offline , unavailable"
      statusMessage - : the personalized status message
      accessToken - the access token
      Returns:
      Throws:
      IOException
      InterruptedException
      org.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 Matrix
      messagesPerSecond - the allowed number of messages per second
      burstCount - how many actions that can be performed before being limited
      accessToken - the access token
      Returns:
      String the applied rate limits configuration
      Throws:
      IOException
      InterruptedException
    • 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 Matrix
      accessToken - the access token
      Returns:
      String the applied rate limits configuration
      Throws:
      IOException
      InterruptedException
    • 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:
      IOException
      InterruptedException
      org.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 (the dir=b direction).
      Parameters:
      matrixRoomId - the room local part (without the server name suffix)
      limit - the maximum number of events to fetch
      accessToken - the requesting user's Matrix access token
      Returns:
      the m.room.message events the user can see, newest first
      Throws:
      IOException
      InterruptedException
      org.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 /sync call. Synapse only returns rooms the user has joined, so visibility is naturally enforced.
      Parameters:
      accessToken - the requesting user's Matrix access token
      timelineLimit - the maximum number of recent events to fetch per room
      Returns:
      the user's unread rooms, never null
      Throws:
      IOException
      InterruptedException
      org.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: its m.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 message
      accessToken - the requesting user's Matrix access token
      Returns:
      the room display name, or null when 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/search endpoint (room_events category), ordered by recency.

      An edited message is stored by Matrix as an additional m.room.message event (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 term
      roomIdLocalPart - the room local part to scope the search to, or null/blank to search across all of the user's rooms
      limit - the maximum number of hits to return
      accessToken - the requesting user's Matrix access token
      Returns:
      the matching messages, most recent first, each carrying its room id, one entry per message
      Throws:
      IOException
      InterruptedException
      org.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 body
      transactionId - a unique client transaction id (for idempotency)
      accessToken - the requesting user's Matrix access token
      Returns:
      the created event id
      Throws:
      IOException
      InterruptedException
      org.exoplatform.ws.frameworks.json.impl.JsonException
    • sendReadReceipt

      public void sendReadReceipt(String matrixRoomId, String eventId, String accessToken) throws IOException, InterruptedException
      Posts an m.read receipt 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 id
      eventId - the event read up to
      accessToken - the user's Matrix access token
      Throws:
      IOException
      InterruptedException
    • invalidateAccessToken

      public boolean invalidateAccessToken(String accessToken) throws IOException, InterruptedException
      Invalidates an access token on Matrix server
      Parameters:
      accessToken -
      Returns:
      Throws:
      IOException
      InterruptedException
    • getMediaInfo

      public Optional<MediaInfo> getMediaInfo(String mediaId, String accessToken) throws IOException, InterruptedException
      Throws:
      IOException
      InterruptedException
    • deleteMedia

      public HttpResponse<String> deleteMedia(String mediaId, String accessToken) throws IOException, InterruptedException
      Throws:
      IOException
      InterruptedException