diff --git a/SportApp.xcodeproj/project.pbxproj b/SportApp.xcodeproj/project.pbxproj index afb1ed8..e0291a3 100644 --- a/SportApp.xcodeproj/project.pbxproj +++ b/SportApp.xcodeproj/project.pbxproj @@ -7,6 +7,7 @@ objects = { /* Begin PBXBuildFile section */ + 3153F0FA2E211AF60032B87D /* KeychainAccess in Frameworks */ = {isa = PBXBuildFile; productRef = 3153F0F92E211AF60032B87D /* KeychainAccess */; }; 319C0F1D2E1EAC3900BF7D83 /* JWTDecode in Frameworks */ = {isa = PBXBuildFile; productRef = 319C0F1C2E1EAC3900BF7D83 /* JWTDecode */; }; /* End PBXBuildFile section */ @@ -74,6 +75,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 3153F0FA2E211AF60032B87D /* KeychainAccess in Frameworks */, 319C0F1D2E1EAC3900BF7D83 /* JWTDecode in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -139,6 +141,7 @@ name = SportApp; packageProductDependencies = ( 319C0F1C2E1EAC3900BF7D83 /* JWTDecode */, + 3153F0F92E211AF60032B87D /* KeychainAccess */, ); productName = SportApp; productReference = 310422A42E14371C00D64B73 /* SportApp.app */; @@ -224,6 +227,7 @@ minimizedProjectReferenceProxies = 1; packageReferences = ( 319C0F1B2E1EAC3900BF7D83 /* XCRemoteSwiftPackageReference "JWTDecode" */, + 3153F0F82E211A820032B87D /* XCRemoteSwiftPackageReference "KeychainAccess" */, ); preferredProjectObjectVersion = 77; productRefGroup = 310422A52E14371C00D64B73 /* Products */; @@ -631,6 +635,14 @@ /* End XCConfigurationList section */ /* Begin XCRemoteSwiftPackageReference section */ + 3153F0F82E211A820032B87D /* XCRemoteSwiftPackageReference "KeychainAccess" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/kishikawakatsumi/KeychainAccess.git"; + requirement = { + branch = master; + kind = branch; + }; + }; 319C0F1B2E1EAC3900BF7D83 /* XCRemoteSwiftPackageReference "JWTDecode" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/auth0/JWTDecode.swift"; @@ -642,6 +654,11 @@ /* End XCRemoteSwiftPackageReference section */ /* Begin XCSwiftPackageProductDependency section */ + 3153F0F92E211AF60032B87D /* KeychainAccess */ = { + isa = XCSwiftPackageProductDependency; + package = 3153F0F82E211A820032B87D /* XCRemoteSwiftPackageReference "KeychainAccess" */; + productName = KeychainAccess; + }; 319C0F1C2E1EAC3900BF7D83 /* JWTDecode */ = { isa = XCSwiftPackageProductDependency; package = 319C0F1B2E1EAC3900BF7D83 /* XCRemoteSwiftPackageReference "JWTDecode" */; diff --git a/SportApp.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/SportApp.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 8551c68..b2172bd 100644 --- a/SportApp.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/SportApp.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -1,5 +1,5 @@ { - "originHash" : "b9aca817c37998428a92290b98ece988f1b76f8f2e4f0605c5b0f80397975ce6", + "originHash" : "384e5b37e5566fcfc4290f58deec0a5443a5e9f18189bc587114ca7423f0f26c", "pins" : [ { "identity" : "jwtdecode.swift", @@ -9,6 +9,15 @@ "revision" : "36a5ce735a61c4bc119593f43ce2c027b4ca7392", "version" : "3.3.0" } + }, + { + "identity" : "keychainaccess", + "kind" : "remoteSourceControl", + "location" : "https://github.com/kishikawakatsumi/KeychainAccess.git", + "state" : { + "branch" : "master", + "revision" : "e0c7eebc5a4465a3c4680764f26b7a61f567cdaf" + } } ], "version" : 3 diff --git a/SportApp/HomeView.swift b/SportApp/HomeView.swift index d06152d..5e5a74e 100644 --- a/SportApp/HomeView.swift +++ b/SportApp/HomeView.swift @@ -28,7 +28,7 @@ struct HomeView: View { .interactiveDismissDisabled(true) } // .onAppear() { -// if let token = UserDefaults.standard.string(forKey: "auth_token") { +// if let token = KeyСhainManager.shared.getToken() { // print(token + " aaaaaaaaaaaaaa") // if viewModelOfRegistration.getTokenExpiration(token) ?? Date() > Date() { // isAuthenticated = true diff --git a/SportApp/NetworkService/Data/APIRoutes.swift b/SportApp/NetworkService/Data/APIRoutes.swift index 86aae18..567cd00 100644 --- a/SportApp/NetworkService/Data/APIRoutes.swift +++ b/SportApp/NetworkService/Data/APIRoutes.swift @@ -10,6 +10,7 @@ import Foundation struct APIRoutes { let baseURL = URL(string: "http://51.250.38.151:8082") let userURL = URL(string: "http://51.250.38.151:8081") + let bffURL = URL(string: "http://51.250.38.151:8083") let getTournirs: String = "/api/v1/tournaments" let login: String = "/api/v1/auth/login" let register: String = "/api/v1/auth/register" diff --git a/SportApp/Profile/View/ProfileView.swift b/SportApp/Profile/View/ProfileView.swift index 84e2888..f607d05 100644 --- a/SportApp/Profile/View/ProfileView.swift +++ b/SportApp/Profile/View/ProfileView.swift @@ -327,9 +327,13 @@ struct ProfileView: View { } } } - .onAppear { + .onAppear() { loadUserData() } +// .onChange(of: viewModelOfRegistration.user) { +// loadUserData() +// print($0) +// } } // Загружаем данные пользователя в @State переменные @@ -362,7 +366,8 @@ struct ProfileView: View { // Выход func logout() { - UserDefaults.standard.removeObject(forKey: "auth_token") + //UserDefaults.standard.removeObject(forKey: "auth_token") + KeyСhainManager.shared.deleteToken() isActive = false viewModelOfRegistration.token = nil viewModelOfRegistration.user = nil diff --git a/SportApp/Registration/View/RegistrationShieldView.swift b/SportApp/Registration/View/RegistrationShieldView.swift index 02ba510..99819b5 100644 --- a/SportApp/Registration/View/RegistrationShieldView.swift +++ b/SportApp/Registration/View/RegistrationShieldView.swift @@ -196,6 +196,8 @@ struct RegistrationShieldView: View { } func dismiss(user: User) { + var user = user + user.isAdmin = coordinator.user.isAdmin coordinator.user = user//User(phio: phio, password: password, email: email, isAdmin: coordinator.user.isAdmin) coordinator.dismissSheet() isAuthenticated = true diff --git a/SportApp/Registration/ViewModel/KeyChainManager.swift b/SportApp/Registration/ViewModel/KeyChainManager.swift new file mode 100644 index 0000000..b3fe193 --- /dev/null +++ b/SportApp/Registration/ViewModel/KeyChainManager.swift @@ -0,0 +1,38 @@ +// +// KeyChainManager.swift +// SportApp +// +// Created by Zaitsev Vladislav on 11.07.2025. +// + +import KeychainAccess + +class KeyСhainManager { + static let shared = KeyСhainManager() + + private let keychain: Keychain + + private init() { + self.keychain = Keychain(service: "com.yourapp.sportapp") + } + + func saveToken(_ number: String) { + do { + try keychain.set(number, key: "token") + } catch { + print(error) + } + } + + func getToken() -> String? { + return keychain["token"] + } + + func deleteToken() { + do { + try keychain.remove("token") + } catch { + print("error") + } + } +} diff --git a/SportApp/Registration/ViewModel/RegistrationViewModel.swift b/SportApp/Registration/ViewModel/RegistrationViewModel.swift index 2c4d44b..0b61c6f 100644 --- a/SportApp/Registration/ViewModel/RegistrationViewModel.swift +++ b/SportApp/Registration/ViewModel/RegistrationViewModel.swift @@ -74,7 +74,8 @@ class RegistrationViewModel: ObservableObject { self.token = newToken //print(self.token ?? "nil") NetworkService.shared.token = token - UserDefaults.standard.set(newToken, forKey: "auth_token") + KeyСhainManager.shared.saveToken(newToken) + //UserDefaults.standard.set(newToken, forKey: "auth_token") //JWTDecodeFunc(jwt: newToken) //print(getTokenExpiration(newToken)) //print(getTokenID(newToken) ?? "aaa") diff --git a/SportApp/Tournirs/View/TournirRegistration.swift b/SportApp/Tournirs/View/TournirRegistration.swift index 8365de1..673559c 100644 --- a/SportApp/Tournirs/View/TournirRegistration.swift +++ b/SportApp/Tournirs/View/TournirRegistration.swift @@ -153,5 +153,7 @@ struct TournirRegistration: View { if bio != "" { coordinator.user.bio = bio } + + coordinator.updateUser() } }