|
|
|
@ -7,11 +7,17 @@ public final class FileServerAPI : DotNetAPI {
|
|
|
|
|
private static let attachmentType = "net.app.core.oembed"
|
|
|
|
|
private static let deviceLinkType = "network.loki.messenger.devicemapping"
|
|
|
|
|
|
|
|
|
|
internal static let fileServerPublicKey = "62509D59BDEEC404DD0D489C1E15BA8F94FD3D619B01C1BF48A9922BFCB7311C"
|
|
|
|
|
internal static let fileServerPublicKey = "2662315C4E728FDBDEC61F69ECA2316BFF267AA8931197907A1C944C7C4E667A"
|
|
|
|
|
|
|
|
|
|
public static let maxFileSize = 10_000_000 // 10 MB
|
|
|
|
|
/// The file server has a file size limit of `maxFileSize`, which the Service Nodes try to enforce as well. However, the limit applied by the Service Nodes
|
|
|
|
|
/// is on the **HTTP request** and not the file size. Because of onion request encryption, a file that's about 4 MB will result in a request that's about 15 MB.
|
|
|
|
|
/// On average the multiplier appears to be about 3.4, so when checking whether the file will exceed the file size limit when uploading a file we just divide
|
|
|
|
|
/// the size of the file by this number. The alternative would be to actually check the size of the HTTP request but that's only possible after proof of work
|
|
|
|
|
/// has been calculated and the onion request encryption has happened, which takes several seconds.
|
|
|
|
|
public static let fileSizeORMultiplier = 3.4
|
|
|
|
|
|
|
|
|
|
@objc public static let server = "https://file.getsession.org"
|
|
|
|
|
@objc public static let server = "https://file-dev.getsession.org"
|
|
|
|
|
|
|
|
|
|
// MARK: Storage
|
|
|
|
|
override internal class var authTokenCollection: String { return "LokiStorageAuthTokenCollection" }
|
|
|
|
@ -153,7 +159,7 @@ public final class FileServerAPI : DotNetAPI {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static func uploadProfilePicture(_ profilePicture: Data) -> Promise<String> {
|
|
|
|
|
guard profilePicture.count < maxFileSize else { return Promise(error: DotNetAPIError.maxFileSizeExceeded) }
|
|
|
|
|
guard Double(profilePicture.count) < Double(maxFileSize) / fileSizeORMultiplier else { return Promise(error: DotNetAPIError.maxFileSizeExceeded) }
|
|
|
|
|
let url = "\(server)/files"
|
|
|
|
|
let parameters: JSON = [ "type" : attachmentType, "Content-Type" : "application/binary" ]
|
|
|
|
|
var error: NSError?
|
|
|
|
|