diff --git a/MatrixSDK/JSONModels/MXEvent.h b/MatrixSDK/JSONModels/MXEvent.h index 6905acf501..3a9a65a6f4 100644 --- a/MatrixSDK/JSONModels/MXEvent.h +++ b/MatrixSDK/JSONModels/MXEvent.h @@ -278,6 +278,12 @@ FOUNDATION_EXPORT NSString *const kMXMessageContentKeyExtensibleAssetMSC3488; FOUNDATION_EXPORT NSString *const kMXMessageContentKeyExtensibleAssetType; FOUNDATION_EXPORT NSString *const kMXMessageContentKeyExtensibleAssetTypeUser; +// Join Rules + +FOUNDATION_EXPORT NSString *const kMXJoinRulesContentKeyAllow; +FOUNDATION_EXPORT NSString *const kMXJoinRulesContentKeyType; +FOUNDATION_EXPORT NSString *const kMXJoinRulesContentKeyRoomId; + /** The internal event state used to handle the different steps of the event sending. */ diff --git a/MatrixSDK/JSONModels/MXEvent.m b/MatrixSDK/JSONModels/MXEvent.m index ea32e89714..3f40da63cd 100644 --- a/MatrixSDK/JSONModels/MXEvent.m +++ b/MatrixSDK/JSONModels/MXEvent.m @@ -187,6 +187,12 @@ NSString *const kMXMessageContentKeyExtensibleAssetType = @"type"; NSString *const kMXMessageContentKeyExtensibleAssetTypeUser = @"m.self"; +// Join Rules + +NSString *const kMXJoinRulesContentKeyAllow = @"allow"; +NSString *const kMXJoinRulesContentKeyType = @"type"; +NSString *const kMXJoinRulesContentKeyRoomId = @"room_id"; + #pragma mark - MXEvent @interface MXEvent () { diff --git a/MatrixSDK/Space/MXRoomAliasAvailabilityChecker.swift b/MatrixSDK/Space/MXRoomAliasAvailabilityChecker.swift index 6091b0ccb9..887e5f5abb 100644 --- a/MatrixSDK/Space/MXRoomAliasAvailabilityChecker.swift +++ b/MatrixSDK/Space/MXRoomAliasAvailabilityChecker.swift @@ -48,7 +48,7 @@ public class MXRoomAliasAvailabilityChecker { return nil } - let fullAlias = aliasLocalPart.fullLocalAlias(with: session) + let fullAlias = MXTools.fullLocalAlias(from: aliasLocalPart, with: session) guard aliasLocalPart.filter({ !validAliasCharacters.contains($0) }).count == 0 else { completion(.invalid) return nil @@ -66,22 +66,40 @@ public class MXRoomAliasAvailabilityChecker { } } -public extension String { +public extension MXTools { /// Generates a full local alias String (e.g. "#my_alias:example.org" for the string "my_alias") /// - Parameters: + /// - string: based string /// - session: session used to retrieve the homeserver suffix /// - Returns:the full local alias String without checking the validity of the alias local part - func fullLocalAlias(with session: MXSession) -> String { + static func fullLocalAlias(from string: String, with session: MXSession) -> String { guard let homeserverSuffix = session.matrixRestClient.homeserverSuffix else { - return self + return string } - return "#\(self)\(homeserverSuffix)" + return "#\(string)\(homeserverSuffix)" } /// Generates a valid local alias part String by replacing unauthorised characters + /// - Parameters: + /// - string: based string /// - Returns:a valid local alias part. - func toValidAliasLocalPart() -> String { - return lowercased().replacingOccurrences(of: " ", with: "-").filter { MXRoomAliasAvailabilityChecker.validAliasCharacters.contains($0) } + static func validAliasLocalPart(from string: String) -> String { + return string.lowercased().replacingOccurrences(of: " ", with: "-").filter { MXRoomAliasAvailabilityChecker.validAliasCharacters.contains($0) } + } + + /// Extract the valid local alias part String of the string ((e.g. "my_alias" for the string "#my_alias:example.org") + /// - Parameters: + /// - string: based string + /// - Returns:the valid local alias part extracted from the string. + static func extractLocalAliasPart(from string: String) -> String { + var aliasPart = string + while aliasPart.starts(with: "#") { + aliasPart.removeFirst() + } + if let index = aliasPart.firstIndex(of: ":") { + aliasPart.removeSubrange(index ..< aliasPart.endIndex) + } + return aliasPart } } diff --git a/MatrixSDKTests/MXRoomAliasAvailabilityCheckerResultTests.swift b/MatrixSDKTests/MXRoomAliasAvailabilityCheckerResultTests.swift index 763df55808..b47fd3baac 100644 --- a/MatrixSDKTests/MXRoomAliasAvailabilityCheckerResultTests.swift +++ b/MatrixSDKTests/MXRoomAliasAvailabilityCheckerResultTests.swift @@ -15,6 +15,7 @@ // import XCTest +import MatrixSDK class MXRoomAliasAvailabilityCheckerResultTests: XCTestCase { @@ -59,19 +60,19 @@ class MXRoomAliasAvailabilityCheckerResultTests: XCTestCase { } let aliasLocalPart = UUID().uuidString - var validAliasLocalPart = aliasLocalPart.toValidAliasLocalPart() + var validAliasLocalPart = MXTools.validAliasLocalPart(from: aliasLocalPart) XCTAssertEqual(aliasLocalPart.lowercased(), validAliasLocalPart) - var fullAlias = validAliasLocalPart.fullLocalAlias(with: session) + var fullAlias = MXTools.fullLocalAlias(from: validAliasLocalPart, with: session) XCTAssertEqual(fullAlias, "#\(validAliasLocalPart)\(session.matrixRestClient.homeserverSuffix!)") let invalidAliasLocalPart = "Some Invalid al;i{a|s" - validAliasLocalPart = invalidAliasLocalPart.toValidAliasLocalPart() + validAliasLocalPart = MXTools.validAliasLocalPart(from: invalidAliasLocalPart) XCTAssertEqual(validAliasLocalPart, "some-invalid-alias") - fullAlias = validAliasLocalPart.fullLocalAlias(with: session) + fullAlias = MXTools.fullLocalAlias(from: validAliasLocalPart, with: session) XCTAssertEqual(fullAlias, "#\(validAliasLocalPart)\(session.matrixRestClient.homeserverSuffix!)") expectation?.fulfill() diff --git a/MatrixSDKTests/MXSpaceChildContentTests.swift b/MatrixSDKTests/MXSpaceChildContentTests.swift index 096a990c95..3c3da30799 100644 --- a/MatrixSDKTests/MXSpaceChildContentTests.swift +++ b/MatrixSDKTests/MXSpaceChildContentTests.swift @@ -472,7 +472,7 @@ class MXSpaceChildContentTests: XCTestCase { } // Create space with default parameters - bobSession.spaceService.createSpace(withName: spaceName, topic: topic, isPublic: true, aliasLocalPart: "\(spaceName.toValidAliasLocalPart())-\(NSUUID().uuidString)", inviteArray: [aliceSession.myUserId]) { response in + bobSession.spaceService.createSpace(withName: spaceName, topic: topic, isPublic: true, aliasLocalPart: "\(MXTools.validAliasLocalPart(from: spaceName))-\(NSUUID().uuidString)", inviteArray: [aliceSession.myUserId]) { response in switch response { case .success(let space): guard space.room != nil else { diff --git a/MatrixSDKTests/MXSpaceServiceTest.swift b/MatrixSDKTests/MXSpaceServiceTest.swift index 757fd02e6b..a8be833744 100644 --- a/MatrixSDKTests/MXSpaceServiceTest.swift +++ b/MatrixSDKTests/MXSpaceServiceTest.swift @@ -61,7 +61,7 @@ class MXSpaceServiceTest: XCTestCase { for spaceName in spaceNames { dispatchGroup.enter() - let alias = "\(spaceName.toValidAliasLocalPart())-\(NSUUID().uuidString)" + let alias = "\(MXTools.validAliasLocalPart(from: spaceName))-\(NSUUID().uuidString)" spaceService.createSpace(withName: spaceName, topic: nil, isPublic: true, aliasLocalPart: alias, inviteArray: nil) { (response) in @@ -176,7 +176,7 @@ class MXSpaceServiceTest: XCTestCase { let expectedSpaceName = "mxSpace \(NSUUID().uuidString)" let expectedSpaceTopic = "Space topic" - let alias = expectedSpaceName.toValidAliasLocalPart() + let alias = MXTools.validAliasLocalPart(from: expectedSpaceName) // Create a public space spaceService.createSpace(withName: expectedSpaceName, topic: expectedSpaceTopic, isPublic: true, aliasLocalPart: alias, inviteArray: nil) { (response) in diff --git a/changelog.d/5233.feature b/changelog.d/5233.feature new file mode 100644 index 0000000000..5252dd10ef --- /dev/null +++ b/changelog.d/5233.feature @@ -0,0 +1 @@ +MXRoomAliasAvailabilityChecker: added extractLocalAliasPart() \ No newline at end of file