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
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var range = range
|
||||||
|
if let parameters = parameters, !parameters.isRandomAccessAllowed {
|
||||||
|
range = 0 ..< range.upperBound
|
||||||
|
}
|
||||||
|
|
||||||
let fetchResource = self.wrappedFetchResource.get()
|
let fetchResource = self.wrappedFetchResource.get()
|
||||||
let fetchedDisposable = fileContext.fetched(range: Int32(range.lowerBound) ..< Int32(range.upperBound), priority: priority, fetch: { intervals in
|
let fetchedDisposable = fileContext.fetched(range: Int32(range.lowerBound) ..< Int32(range.upperBound), priority: priority, fetch: { intervals in
|
||||||
return fetchResource
|
return fetchResource
|
||||||
|
@ -64,9 +64,11 @@ public protocol MediaResourceFetchInfo {
|
|||||||
public struct MediaResourceFetchParameters {
|
public struct MediaResourceFetchParameters {
|
||||||
public let tag: MediaResourceFetchTag?
|
public let tag: MediaResourceFetchTag?
|
||||||
public let info: MediaResourceFetchInfo?
|
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.tag = tag
|
||||||
self.info = info
|
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> {
|
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 {
|
if let ranges = ranges {
|
||||||
let signals = ranges.map { (range, priority) -> Signal<Void, FetchResourceError> in
|
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)
|
return combineLatest(signals)
|
||||||
|> ignoreValues
|
|> ignoreValues
|
||||||
|> map { _ -> FetchResourceSourceType in .local }
|
|> map { _ -> FetchResourceSourceType in .local }
|
||||||
|> then(.single(.local))
|
|> then(.single(.local))
|
||||||
} else {
|
} 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