From ba383dfdb0cb9d917aa88765e7513f11c98e5052 Mon Sep 17 00:00:00 2001 From: talksik Date: Wed, 29 Dec 2021 01:53:29 -0800 Subject: [PATCH] getting basic call to backend for a token but it's messy as hellll!!!! --- nirvana-ios.xcodeproj/project.pbxproj | 4 ++ .../xcschemes/nirvana-ios-dev.xcscheme | 2 +- nirvana-ios/Services/AgoraService.swift | 47 +++++++++++++++++++ nirvana-ios/Services/AuthSessionStore.swift | 6 +-- .../Views/InnerCircle/CircleGridView.swift | 3 ++ .../InnerCircle/InnerCircleViewModel.swift | 12 +++++ 6 files changed, 70 insertions(+), 4 deletions(-) create mode 100644 nirvana-ios/Services/AgoraService.swift diff --git a/nirvana-ios.xcodeproj/project.pbxproj b/nirvana-ios.xcodeproj/project.pbxproj index 2e27122..87bbc6d 100644 --- a/nirvana-ios.xcodeproj/project.pbxproj +++ b/nirvana-ios.xcodeproj/project.pbxproj @@ -12,6 +12,7 @@ 890C2460277BF896009B4A30 /* AgoraViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 890C245F277BF896009B4A30 /* AgoraViewController.swift */; }; 890C2462277BF935009B4A30 /* CallView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 890C2461277BF935009B4A30 /* CallView.swift */; }; 890C2464277BFA97009B4A30 /* AgroRep.swift in Sources */ = {isa = PBXBuildFile; fileRef = 890C2463277BFA97009B4A30 /* AgroRep.swift */; }; + 890C2466277C5711009B4A30 /* AgoraService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 890C2465277C5711009B4A30 /* AgoraService.swift */; }; 891060E4277359B900F14509 /* CloudStorageService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 891060E3277359B900F14509 /* CloudStorageService.swift */; }; 891060E82774460500F14509 /* FirebaseInAppMessaging-Beta in Frameworks */ = {isa = PBXBuildFile; productRef = 891060E72774460500F14509 /* FirebaseInAppMessaging-Beta */; }; 891060EA2774460500F14509 /* FirebaseInAppMessagingSwift-Beta in Frameworks */ = {isa = PBXBuildFile; productRef = 891060E92774460500F14509 /* FirebaseInAppMessagingSwift-Beta */; }; @@ -92,6 +93,7 @@ 890C245F277BF896009B4A30 /* AgoraViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AgoraViewController.swift; sourceTree = ""; }; 890C2461277BF935009B4A30 /* CallView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CallView.swift; sourceTree = ""; }; 890C2463277BFA97009B4A30 /* AgroRep.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AgroRep.swift; sourceTree = ""; }; + 890C2465277C5711009B4A30 /* AgoraService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AgoraService.swift; sourceTree = ""; }; 891060E3277359B900F14509 /* CloudStorageService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CloudStorageService.swift; sourceTree = ""; }; 891060E527743FEB00F14509 /* nirvana-ios.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "nirvana-ios.entitlements"; sourceTree = ""; }; 89110713277166D6005797FA /* UserFriends.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserFriends.swift; sourceTree = ""; }; @@ -435,6 +437,7 @@ 89F05BA3276ACC060002E9C7 /* ContactService.swift */, 89B46E70276893E200B74255 /* AuthSessionStore.swift */, 89A107E4277476CC00B971FD /* PushNotificationService.swift */, + 890C2465277C5711009B4A30 /* AgoraService.swift */, ); path = Services; sourceTree = ""; @@ -601,6 +604,7 @@ 89F05B9B276A87920002E9C7 /* ContactsViewModel.swift in Sources */, 896CE6FE27707E6B00DB474E /* CircleNavigationView.swift in Sources */, 89AD5573276DD790001658E0 /* SplashView.swift in Sources */, + 890C2466277C5711009B4A30 /* AgoraService.swift in Sources */, 89F18AEC276E92BF00115B1E /* CustomExtensions.swift in Sources */, 89F18AF1276ECAA300115B1E /* RouterView.swift in Sources */, 89F18AEE276EB55C00115B1E /* ServiceState.swift in Sources */, diff --git a/nirvana-ios.xcodeproj/xcshareddata/xcschemes/nirvana-ios-dev.xcscheme b/nirvana-ios.xcodeproj/xcshareddata/xcschemes/nirvana-ios-dev.xcscheme index 6753332..911ea35 100644 --- a/nirvana-ios.xcodeproj/xcshareddata/xcschemes/nirvana-ios-dev.xcscheme +++ b/nirvana-ios.xcodeproj/xcshareddata/xcschemes/nirvana-ios-dev.xcscheme @@ -53,7 +53,7 @@ diff --git a/nirvana-ios/Services/AgoraService.swift b/nirvana-ios/Services/AgoraService.swift new file mode 100644 index 0000000..ed0e723 --- /dev/null +++ b/nirvana-ios/Services/AgoraService.swift @@ -0,0 +1,47 @@ +// +// AgoraService.swift +// nirvana-ios +// +// Created by Arjun Patel on 12/29/21. +// + +import Foundation +import FirebaseAuth +import Firebase + +class AgoraService { + func getAgoraUserToken(channelName: String) { + let currentUser = Auth.auth().currentUser + currentUser?.getIDTokenForcingRefresh(true) { idToken, error in + if let error = error { + // Handle error + return; + } + + // Send token to your backend via HTTPS + // ... + let baseUrl = ProcessInfo.processInfo.environment["nirvana-server-url"] ?? "http://localhost:3000" + let reqUrl = baseUrl + "agoraToken?channelName=" + channelName + guard let url = URL(string: reqUrl) else { fatalError("Missing URL") } + + var urlRequest = URLRequest(url: url) + urlRequest.addValue(idToken!, forHTTPHeaderField: "authorization") + + let dataTask = URLSession.shared.dataTask(with: urlRequest) { (data, response, error) in + if let error = error { + print("Request error: ", error) + return + } + + guard let response = response as? HTTPURLResponse else { return } + + if response.statusCode == 200 { + guard let data = data else { return } + print("the token is: \(data)") + } + } + + dataTask.resume() + } + } +} diff --git a/nirvana-ios/Services/AuthSessionStore.swift b/nirvana-ios/Services/AuthSessionStore.swift index f60989a..cbc2740 100644 --- a/nirvana-ios/Services/AuthSessionStore.swift +++ b/nirvana-ios/Services/AuthSessionStore.swift @@ -140,7 +140,7 @@ final class AuthSessionStore: ObservableObject, SessionStore { } } - func getCurrentUserId() -> String? { + static func getCurrentUserId() -> String? { return Auth.auth().currentUser?.uid } @@ -214,7 +214,7 @@ extension AuthSessionStore { } // can't get proper listeners working if don't have current user's id - let currUserId = self.getCurrentUserId() + let currUserId = AuthSessionStore.getCurrentUserId() if currUserId == nil { print("no user id available to initiate data listeners") return @@ -457,7 +457,7 @@ extension AuthSessionStore { print("user already has status: \(userStatus)") } else { - if let uid = self.getCurrentUserId() { + if let uid = AuthSessionStore.getCurrentUserId() { self.firestoreService.updateUserStatus(userId: uid, userStatus: userStatus) {res in print(res) } diff --git a/nirvana-ios/Views/InnerCircle/CircleGridView.swift b/nirvana-ios/Views/InnerCircle/CircleGridView.swift index 18c1c9c..88bb68b 100644 --- a/nirvana-ios/Views/InnerCircle/CircleGridView.swift +++ b/nirvana-ios/Views/InnerCircle/CircleGridView.swift @@ -266,6 +266,9 @@ struct CircleGridView: View { if self.authSessionStore.friendsArr.count > 0 { scrollReaderValue.scrollTo(self.selectedFriendIndex) } + + // get this user's agora token + self.innerCircleVM.getAgoraToken() } } // scrollview reader .fullScreenCover(isPresented: $showCall, content: { diff --git a/nirvana-ios/Views/InnerCircle/InnerCircleViewModel.swift b/nirvana-ios/Views/InnerCircle/InnerCircleViewModel.swift index 487994c..cc8f18a 100644 --- a/nirvana-ios/Views/InnerCircle/InnerCircleViewModel.swift +++ b/nirvana-ios/Views/InnerCircle/InnerCircleViewModel.swift @@ -21,6 +21,7 @@ class InnerCircleViewModel: ObservableObject { private let cloudStorageService = CloudStorageService() private let firestoreService = FirestoreService() private let pushNotificationService = PushNotificationService() + private let agoraService = AgoraService() init() { // separate set up for listening vs recording @@ -139,3 +140,14 @@ extension InnerCircleViewModel { } } + +extension InnerCircleViewModel { + func getAgoraToken() { + if let uid = AuthSessionStore.getCurrentUserId() { + self.agoraService.getAgoraUserToken(channelName: uid) + } + else { + print("no user authenticated to get an agora token") + } + } +}