SHA256
fix(ios): restrict authentication capabilities and validate bootstrap types
Require iOS 18.4 for explicit upload denial in the isolated authentication window. Add origin-bound generated download policy, app-switcher privacy, typed metadata regressions and original community icon assets. Seven portable tests and Swift formatting checks pass; Apple SDK validation remains external.
This commit is contained in:
1 parent
74c2c9e6e8
commit
69c48169e2
15 files changed
+341
-112
No files matched your search
@@ -6,13 +6,14 @@ struct ServerAddress: Equatable {
|
||||
init(_ input: String) throws {
|
||||
let value = input.trimmingCharacters(in: .whitespacesAndNewlines)
|
||||
guard !value.contains("\\"), !value.contains(where: { $0.isWhitespace }),
|
||||
var parts = URLComponents(string: value),
|
||||
parts.scheme?.lowercased() == "https",
|
||||
let host = parts.host, !host.isEmpty,
|
||||
parts.user == nil, parts.password == nil,
|
||||
parts.query == nil, parts.fragment == nil,
|
||||
parts.percentEncodedPath.isEmpty || parts.percentEncodedPath == "/",
|
||||
parts.port == nil || (1...65535).contains(parts.port!) else {
|
||||
var parts = URLComponents(string: value),
|
||||
parts.scheme?.lowercased() == "https",
|
||||
let host = parts.host, !host.isEmpty,
|
||||
parts.user == nil, parts.password == nil,
|
||||
parts.query == nil, parts.fragment == nil,
|
||||
parts.percentEncodedPath.isEmpty || parts.percentEncodedPath == "/",
|
||||
parts.port == nil || (1...65535).contains(parts.port!)
|
||||
else {
|
||||
throw ConnectionError.invalidAddress
|
||||
}
|
||||
parts.scheme = "https"
|
||||
@@ -25,11 +26,20 @@ struct ServerAddress: Equatable {
|
||||
|
||||
func owns(_ candidate: URL) -> Bool {
|
||||
guard let parts = URLComponents(url: candidate, resolvingAgainstBaseURL: false),
|
||||
let own = URLComponents(url: url, resolvingAgainstBaseURL: false) else { return false }
|
||||
let own = URLComponents(url: url, resolvingAgainstBaseURL: false)
|
||||
else { return false }
|
||||
return parts.scheme?.lowercased() == "https" && parts.user == nil && parts.password == nil
|
||||
&& parts.host?.lowercased() == own.host?.lowercased()
|
||||
&& (parts.port ?? 443) == (own.port ?? 443)
|
||||
}
|
||||
|
||||
func ownsDownload(_ candidate: URL) -> Bool {
|
||||
if owns(candidate) { return true }
|
||||
guard candidate.scheme == "blob",
|
||||
let inner = URL(string: String(candidate.absoluteString.dropFirst(5)))
|
||||
else { return false }
|
||||
return owns(inner)
|
||||
}
|
||||
}
|
||||
|
||||
enum ConnectionError: LocalizedError {
|
||||
|
||||
Reference in new issue
Block a user