verdnatura-chat/ios/Shared/RocketChat/API/Request.swift

69 lines
1.4 KiB
Swift
Raw Permalink Normal View History

[NEW] E2E Encryption push (iOS) (#2463) * link pods to notification service * push encryption poc * decrypt room key poc * read user key from mmkv and cast into a pkcs * push decrypt poc (iOS) * expose needed watermelon methods * watermelon -> database * indent & simple-crypto update * string extensions * storage * toBase64 -> toData * remove a forced unwrap * remove unused import * database driver * improvement * folder structure & watermelon bridge * more improvement stuff * watermelon -> database * reuse database instance * improvement * database fix: bypass watermelon cache * some code improvements * encryption instances * start api stuff * network layer * improve notification service * improve folder structure * watermelon patch * retry fetch logic * rocketchat class * fix try to decrypt without a roomKey * fallback to original content that is translated * some fixes to rocketchat logic * merge develop * remove unnecessary extension * [CHORE] Improve reply notification code (iOS) * undo sign changes * remove mocked value * import direct from library * send message request * reply notification with encrypted message working properly * revert apple sign * fix api onerror * trick to display sender name on group notifications * revert data.host change * fix some multithread issues * use sendername sent by server * small improvement * Bump crypto lib * Update ios/NotificationService/NotificationService.swift * add experimental string * remove trailing slash * remove trailing slash on reply * fix decrypt messages Co-authored-by: Diego Mello <diegolmello@gmail.com>
2020-09-24 18:34:13 +00:00
//
// Request.swift
// NotificationService
//
// Created by Djorkaeff Alexandre Vilela Pereira on 9/16/20.
// Copyright © 2020 Rocket.Chat. All rights reserved.
//
import Foundation
protocol Request {
associatedtype ResponseType: Response
var path: String { get }
var method: HTTPMethod { get }
var contentType: String { get }
var query: String? { get }
func body() -> Data?
func request(for api: API) -> URLRequest?
}
extension Request {
var method: HTTPMethod {
return .get
}
var contentType: String {
return "application/json"
}
var path: String {
return ""
}
var query: String? {
return nil
}
func body() -> Data? {
return nil
}
func request(for api: API) -> URLRequest? {
var components = URLComponents(url: api.server, resolvingAgainstBaseURL: false)
components?.path += path
components?.query = query
guard let url = components?.url else {
return nil
}
var request = URLRequest(url: url)
request.httpMethod = method.rawValue
request.httpBody = body()
request.addValue(contentType, forHTTPHeaderField: "Content-Type")
if let userId = api.credentials?.userId {
request.addValue(userId, forHTTPHeaderField: "x-user-id")
}
if let userToken = api.credentials?.userToken {
request.addValue(userToken, forHTTPHeaderField: "x-auth-token")
}
return request
}
}