From 7157d5f0856585d90eaf6547e8dd8ea67b95b5dc Mon Sep 17 00:00:00 2001 From: David Villegas Date: Mon, 5 Feb 2024 00:17:00 -0700 Subject: [PATCH] Added customizable scopes Edited TeslaAPI enum to include customizable scopes for Fleet API. Did not touch .ownerAPI as Owner API is deprecated and its deletion from this package should occur soon. --- Sources/TeslaSwift/Model/Authentication.swift | 11 ++++++----- Sources/TeslaSwift/TeslaSwift.swift | 15 +++++++++++++-- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/Sources/TeslaSwift/Model/Authentication.swift b/Sources/TeslaSwift/Model/Authentication.swift index d6e6cb1..70a0011 100644 --- a/Sources/TeslaSwift/Model/Authentication.swift +++ b/Sources/TeslaSwift/Model/Authentication.swift @@ -175,35 +175,36 @@ extension TeslaAPI { var region: Region? { switch self { case .ownerAPI: return nil - case let .fleetAPI(region: region, clientID: _, clientSecret: _, redirectURI: _): return region + case let .fleetAPI(region: region, clientID: _, clientSecret: _, redirectURI: _, scopes: _): return region } } var clientID: String { switch self { case .ownerAPI: return "ownerapi" - case let .fleetAPI(region: _, clientID: clientID, clientSecret: _, redirectURI: _): return clientID + case let .fleetAPI(region: _, clientID: clientID, clientSecret: _, redirectURI: _, scopes: _): return clientID } } var clientSecret: String { switch self { case .ownerAPI: return "c7257eb71a564034f9419ee651c7d0e5f7aa6bfbd18bafb5c5c033b093bb2fa3" - case let .fleetAPI(region: _, clientID: _, clientSecret: clientSecret, redirectURI: _): return clientSecret + case let .fleetAPI(region: _, clientID: _, clientSecret: clientSecret, redirectURI: _, scopes: _): return clientSecret } } var redirectURI: String { switch self { case .ownerAPI: return "https://auth.tesla.com/void/callback" - case let .fleetAPI(region: _, clientID: _, clientSecret: _, redirectURI: redirectURI): return redirectURI + case let .fleetAPI(region: _, clientID: _, clientSecret: _, redirectURI: redirectURI, scopes: _): return redirectURI } } var scope: String { switch self { case .ownerAPI: return "openid email offline_access" - case .fleetAPI: return "openid user_data vehicle_device_data offline_access vehicle_cmds vehicle_charging_cmds energy_device_data energy_cmds" + case let .fleetAPI(region: _, clientID: _, clientSecret: _, redirectURI: _, scopes: scopes): + return scopes.map { $0.rawValue }.joined(separator: " ") } } } diff --git a/Sources/TeslaSwift/TeslaSwift.swift b/Sources/TeslaSwift/TeslaSwift.swift index f1e5141..fa451e1 100644 --- a/Sources/TeslaSwift/TeslaSwift.swift +++ b/Sources/TeslaSwift/TeslaSwift.swift @@ -29,14 +29,25 @@ public enum TeslaAPI { case europeMiddleEastAfrica = "https://fleet-api.prd.eu.vn.cloud.tesla.com" case china = "https://fleet-api.prd.cn.vn.cloud.tesla.cn" } + + public enum Scope: String { + case openId = "openid" + case offlineAccess = "offline_access" + case userData = "user_data" + case vehicleDeviceData = "vehicle_device_data" + case vehicleCmds = "vehicle_cmds" + case vehicleChargingCmds = "vehicle_charging_cmds" + case energyDeviceData = "energy_device_data" + case energyCmds = "energy_cmds" + } case ownerAPI - case fleetAPI(region: Region, clientID: String, clientSecret: String, redirectURI: String) + case fleetAPI(region: Region, clientID: String, clientSecret: String, redirectURI: String, scopes: [Scope]) var url: String { switch self { case .ownerAPI: return "https://owner-api.teslamotors.com" - case let .fleetAPI(region: region, clientID: _, clientSecret: _, redirectURI: _): return region.rawValue + case let .fleetAPI(region: region, clientID: _, clientSecret: _, redirectURI: _, scopes: _): return region.rawValue } } }