mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-08-08 08:31:13 +00:00
Don't allow random access to secret media [skip ci]
This commit is contained in:
parent
d391299467
commit
b5d30cc326
@ -535,6 +535,11 @@ public final class MediaBox {
|
||||
return
|
||||
}
|
||||
|
||||
var range = range
|
||||
if let parameters = parameters, !parameters.isRandomAccessAllowed {
|
||||
range = 0 ..< range.upperBound
|
||||
}
|
||||
|
||||
let fetchResource = self.wrappedFetchResource.get()
|
||||
let fetchedDisposable = fileContext.fetched(range: Int32(range.lowerBound) ..< Int32(range.upperBound), priority: priority, fetch: { intervals in
|
||||
return fetchResource
|
||||
|
@ -64,9 +64,11 @@ public protocol MediaResourceFetchInfo {
|
||||
public struct MediaResourceFetchParameters {
|
||||
public let tag: MediaResourceFetchTag?
|
||||
public let info: MediaResourceFetchInfo?
|
||||
public let isRandomAccessAllowed: Bool
|
||||
|
||||
public init(tag: MediaResourceFetchTag?, info: MediaResourceFetchInfo?) {
|
||||
public init(tag: MediaResourceFetchTag?, info: MediaResourceFetchInfo?, isRandomAccessAllowed: Bool) {
|
||||
self.tag = tag
|
||||
self.info = info
|
||||
self.isRandomAccessAllowed = isRandomAccessAllowed
|
||||
}
|
||||
}
|
||||
|
@ -31,16 +31,28 @@ public func fetchedMediaResource(mediaBox: MediaBox, reference: MediaResourceRef
|
||||
}
|
||||
|
||||
public func fetchedMediaResource(mediaBox: MediaBox, reference: MediaResourceReference, ranges: [(Range<Int>, MediaBoxFetchPriority)]?, statsCategory: MediaResourceStatsCategory = .generic, reportResultStatus: Bool = false, preferBackgroundReferenceRevalidation: Bool = false, continueInBackground: Bool = false) -> Signal<FetchResourceSourceType, FetchResourceError> {
|
||||
var isRandomAccessAllowed = true
|
||||
switch reference {
|
||||
case let .media(media, _):
|
||||
if let file = media.media as? TelegramMediaFile {
|
||||
if file.fileId.namespace == Namespaces.Media.CloudSecretFile {
|
||||
isRandomAccessAllowed = false
|
||||
}
|
||||
}
|
||||
default:
|
||||
break
|
||||
}
|
||||
|
||||
if let ranges = ranges {
|
||||
let signals = ranges.map { (range, priority) -> Signal<Void, FetchResourceError> in
|
||||
return mediaBox.fetchedResourceData(reference.resource, in: range, priority: priority, parameters: MediaResourceFetchParameters(tag: TelegramMediaResourceFetchTag(statsCategory: statsCategory), info: TelegramCloudMediaResourceFetchInfo(reference: reference, preferBackgroundReferenceRevalidation: preferBackgroundReferenceRevalidation, continueInBackground: continueInBackground)))
|
||||
return mediaBox.fetchedResourceData(reference.resource, in: range, priority: priority, parameters: MediaResourceFetchParameters(tag: TelegramMediaResourceFetchTag(statsCategory: statsCategory), info: TelegramCloudMediaResourceFetchInfo(reference: reference, preferBackgroundReferenceRevalidation: preferBackgroundReferenceRevalidation, continueInBackground: continueInBackground), isRandomAccessAllowed: isRandomAccessAllowed))
|
||||
}
|
||||
return combineLatest(signals)
|
||||
|> ignoreValues
|
||||
|> map { _ -> FetchResourceSourceType in .local }
|
||||
|> then(.single(.local))
|
||||
} else {
|
||||
return mediaBox.fetchedResource(reference.resource, parameters: MediaResourceFetchParameters(tag: TelegramMediaResourceFetchTag(statsCategory: statsCategory), info: TelegramCloudMediaResourceFetchInfo(reference: reference, preferBackgroundReferenceRevalidation: preferBackgroundReferenceRevalidation, continueInBackground: continueInBackground)), implNext: reportResultStatus)
|
||||
return mediaBox.fetchedResource(reference.resource, parameters: MediaResourceFetchParameters(tag: TelegramMediaResourceFetchTag(statsCategory: statsCategory), info: TelegramCloudMediaResourceFetchInfo(reference: reference, preferBackgroundReferenceRevalidation: preferBackgroundReferenceRevalidation, continueInBackground: continueInBackground), isRandomAccessAllowed: isRandomAccessAllowed), implNext: reportResultStatus)
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user