mirror of
https://github.com/home-assistant/iOS.git
synced 2026-06-19 17:24:52 -05:00
Add network logging and some optimizations
This commit is contained in:
@@ -92,6 +92,8 @@ extension ClientEvent.EventType {
|
||||
return L10n.ClientEvents.EventType.locationUpdate
|
||||
case .serviceCall:
|
||||
return L10n.ClientEvents.EventType.serviceCall
|
||||
case .networkRequest:
|
||||
return L10n.ClientEvents.EventType.networkRequest
|
||||
case .unknown:
|
||||
return L10n.ClientEvents.EventType.unknown
|
||||
}
|
||||
|
||||
@@ -97,6 +97,8 @@ internal enum L10n {
|
||||
internal enum EventType {
|
||||
/// Location Update
|
||||
internal static let locationUpdate = L10n.tr("Localizable", "client_events.event_type.location_update")
|
||||
/// Network Request
|
||||
internal static let networkRequest = L10n.tr("Localizable", "client_events.event_type.networkRequest")
|
||||
/// Notification
|
||||
internal static let notification = L10n.tr("Localizable", "client_events.event_type.notification")
|
||||
/// Service Call
|
||||
|
||||
@@ -149,6 +149,7 @@ send notifications to your device.";
|
||||
"client_events.event_type.service_call" = "Service Call";
|
||||
"client_events.event_type.notification" = "Notification";
|
||||
"client_events.event_type.location_update" = "Location Update";
|
||||
"client_events.event_type.networkRequest" = "Network Request";
|
||||
"client_events.event_type.unknown" = "Unknown";
|
||||
"client_events.view.clear" = "Clear";
|
||||
"settings.connection_section.network_name.title" = "Current Network Name";
|
||||
|
||||
@@ -673,7 +673,7 @@ class SettingsViewController: FormViewController, CLLocationManagerDelegate, SFS
|
||||
self.authenticationController.authenticateWithBrowser(at: connectionInfo.activeURL)
|
||||
}.then { (code: String) -> Promise<String> in
|
||||
print("Browser auth succeeded, getting token")
|
||||
let tokenManager = TokenManager(baseURL: connectionInfo.activeURL, tokenInfo: nil)
|
||||
let tokenManager = TokenManager(connectionInfo: connectionInfo, tokenInfo: nil)
|
||||
return tokenManager.initialTokenWithCode(code)
|
||||
}.then { _ -> Promise<ConnectionInfo> in
|
||||
print("Token acquired")
|
||||
|
||||
@@ -96,7 +96,7 @@ public class HomeAssistantAPI {
|
||||
case .legacy(let apiPassword):
|
||||
self.manager = self.configureSessionManager(withPassword: apiPassword)
|
||||
case .modern(let tokenInfo):
|
||||
self.tokenManager = TokenManager(baseURL: connectionInfo.baseURL, tokenInfo: tokenInfo)
|
||||
self.tokenManager = TokenManager(connectionInfo: connectionInfo, tokenInfo: tokenInfo)
|
||||
tokenManager?.authenticationRequiredCallback = {
|
||||
return self.authenticationController.authenticateWithBrowser(at: connectionInfo.baseURL)
|
||||
}
|
||||
|
||||
@@ -15,22 +15,22 @@ import ObjectMapper
|
||||
typealias URLRequestConvertible = Alamofire.URLRequestConvertible
|
||||
|
||||
public class AuthenticationAPI {
|
||||
let baseURL: URL
|
||||
let connectionInfo: ConnectionInfo
|
||||
public enum AuthenticationError: Error {
|
||||
case unexepectedType
|
||||
case unexpectedResponse
|
||||
case invalidCode
|
||||
}
|
||||
|
||||
init(baseURL: URL) {
|
||||
self.baseURL = baseURL
|
||||
init(connectionInfo: ConnectionInfo) {
|
||||
self.connectionInfo = connectionInfo
|
||||
}
|
||||
|
||||
public func refreshTokenWith(tokenInfo: TokenInfo) -> Promise<TokenInfo> {
|
||||
return Promise { seal in
|
||||
let token = tokenInfo.refreshToken
|
||||
let routeInfo = RouteInfo(route: AuthenticationRoute.refreshToken(token: token),
|
||||
baseURL: self.baseURL)
|
||||
baseURL: self.connectionInfo.activeURL)
|
||||
let request = Alamofire.request(routeInfo)
|
||||
let context = TokenInfo.TokenInfoContext(oldTokenInfo: tokenInfo)
|
||||
request.validate().responseObject(context: context) { (dataresponse: DataResponse<TokenInfo>) in
|
||||
@@ -48,7 +48,7 @@ public class AuthenticationAPI {
|
||||
public func fetchTokenWithCode(_ authorizationCode: String) -> Promise<TokenInfo> {
|
||||
return Promise { seal in
|
||||
let routeInfo = RouteInfo(route: AuthenticationRoute.token(authorizationCode: authorizationCode),
|
||||
baseURL: self.baseURL)
|
||||
baseURL: self.connectionInfo.activeURL)
|
||||
let request = Alamofire.request(routeInfo)
|
||||
request.validate().responseObject { (dataresponse: DataResponse<TokenInfo>) in
|
||||
switch dataresponse.result {
|
||||
|
||||
@@ -20,7 +20,7 @@ public class TokenManager: RequestAdapter, RequestRetrier {
|
||||
private var tokenInfo: TokenInfo?
|
||||
private var authenticationAPI: AuthenticationAPI
|
||||
private var refreshPromiseCache: Promise<String>?
|
||||
private let baseURL: URL
|
||||
private let connectionInfo: ConnectionInfo
|
||||
|
||||
/// This should be set to enable the token manager to trigger re-authentication when needed.
|
||||
public var authenticationRequiredCallback: (() -> Promise<String>)?
|
||||
@@ -29,9 +29,9 @@ public class TokenManager: RequestAdapter, RequestRetrier {
|
||||
return self.tokenInfo != nil
|
||||
}
|
||||
|
||||
public init(baseURL: URL, tokenInfo: TokenInfo? = nil) {
|
||||
self.baseURL = baseURL
|
||||
self.authenticationAPI = AuthenticationAPI(baseURL: baseURL)
|
||||
public init(connectionInfo: ConnectionInfo, tokenInfo: TokenInfo? = nil) {
|
||||
self.connectionInfo = connectionInfo
|
||||
self.authenticationAPI = AuthenticationAPI(connectionInfo: self.connectionInfo)
|
||||
self.tokenInfo = tokenInfo
|
||||
}
|
||||
|
||||
@@ -42,7 +42,6 @@ public class TokenManager: RequestAdapter, RequestRetrier {
|
||||
return self.authenticationAPI.fetchTokenWithCode(code).then { tokenInfo -> Promise<String> in
|
||||
self.tokenInfo = tokenInfo
|
||||
Current.settingsStore.tokenInfo = tokenInfo
|
||||
Current.settingsStore.baseURL = self.baseURL
|
||||
return self.bearerToken
|
||||
}
|
||||
}
|
||||
@@ -103,6 +102,9 @@ public class TokenManager: RequestAdapter, RequestRetrier {
|
||||
return urlRequest
|
||||
}
|
||||
|
||||
let text = "Request(SSID: \(ConnectionInfo.currentSSID() ?? "Unavailable") - \(urlRequest.url?.absoluteString ?? "URL Unavailable")"
|
||||
let networkEvent = ClientEvent(text: text, type: .networkRequest)
|
||||
Current.clientEventStore.addEvent(networkEvent)
|
||||
var newRequest = urlRequest
|
||||
newRequest.setValue("Bearer \(tokenInfo.accessToken)", forHTTPHeaderField: "Authorization")
|
||||
return newRequest
|
||||
|
||||
@@ -16,6 +16,7 @@ public class ClientEvent: Object {
|
||||
case notification
|
||||
case serviceCall
|
||||
case locationUpdate
|
||||
case networkRequest
|
||||
case unknown
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user