mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-02 21:33:26 +00:00
added tests
improvement improved improvement fixed
This commit is contained in:
@@ -28,4 +28,5 @@ extension CharacterSet {
|
||||
}()
|
||||
|
||||
static let matrixUserIDAllowedCharacters = CharacterSet(charactersIn: "abcdefghijklmnopqrstuvwxyz0123456789._=-/@:")
|
||||
static let roomAliasAllowedCharacters = CharacterSet(charactersIn: "abcdefghijklmnopqrstuvwxyz0123456789!$&‘()*+/;=?@[]-._:#")
|
||||
}
|
||||
|
||||
@@ -118,3 +118,22 @@ extension String {
|
||||
return UTType(filenameExtension: fileExtension) != nil ? fileExtension : "bin"
|
||||
}
|
||||
}
|
||||
|
||||
extension String {
|
||||
/// To be used if the string is actually a URL
|
||||
var asSanitizedLink: String {
|
||||
var link = self
|
||||
if !link.contains("://") {
|
||||
link.insert(contentsOf: "https://", at: link.startIndex)
|
||||
}
|
||||
|
||||
// Don't include punctuation characters at the end of links
|
||||
// e.g `https://element.io/blog:` <- which is a valid link but the wrong place
|
||||
while !link.isEmpty,
|
||||
link.rangeOfCharacter(from: .punctuationCharacters, options: .backwards)?.upperBound == link.endIndex {
|
||||
link = String(link.dropLast())
|
||||
}
|
||||
|
||||
return link
|
||||
}
|
||||
}
|
||||
|
||||
@@ -126,23 +126,26 @@ extension URL: @retroactive ExpressibleByStringLiteral {
|
||||
}
|
||||
|
||||
struct ConfirmURLParameters {
|
||||
static let internalURLKey = "internalURL"
|
||||
static let displayStringKey = "displayString"
|
||||
|
||||
let internalURL: URL
|
||||
let linkString: String
|
||||
let displayString: String
|
||||
|
||||
var urlQueryItems: [URLQueryItem] {
|
||||
[URLQueryItem(name: "internalURL", value: internalURL.absoluteString),
|
||||
URLQueryItem(name: "linkString", value: linkString)]
|
||||
[URLQueryItem(name: Self.internalURLKey, value: internalURL.absoluteString),
|
||||
URLQueryItem(name: Self.displayStringKey, value: displayString)]
|
||||
}
|
||||
}
|
||||
|
||||
extension ConfirmURLParameters {
|
||||
init?(queryItems: [URLQueryItem]) {
|
||||
guard let internalURLString = queryItems.first(where: { $0.name == "internalURL" })?.value,
|
||||
guard let internalURLString = queryItems.first(where: { $0.name == Self.internalURLKey })?.value,
|
||||
let internalURL = URL(string: internalURLString),
|
||||
let externalURLString = queryItems.first(where: { $0.name == "linkString" })?.value else {
|
||||
let externalURLString = queryItems.first(where: { $0.name == Self.displayStringKey })?.value else {
|
||||
return nil
|
||||
}
|
||||
linkString = externalURLString
|
||||
displayString = externalURLString
|
||||
self.internalURL = internalURL
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user