Use Safari Controller for auth
This commit is contained in:
parent
abbde84c53
commit
e519e9cdff
@ -652,7 +652,7 @@
|
|||||||
DEVELOPMENT_TEAM = Z6P74P6T99;
|
DEVELOPMENT_TEAM = Z6P74P6T99;
|
||||||
GENERATE_INFOPLIST_FILE = YES;
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
INFOPLIST_FILE = IceCubesShareExtension/Info.plist;
|
INFOPLIST_FILE = IceCubesShareExtension/Info.plist;
|
||||||
INFOPLIST_KEY_CFBundleDisplayName = IceCubesShareExtension;
|
INFOPLIST_KEY_CFBundleDisplayName = "Ice Cubes";
|
||||||
INFOPLIST_KEY_NSHumanReadableCopyright = "";
|
INFOPLIST_KEY_NSHumanReadableCopyright = "";
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 16.1;
|
IPHONEOS_DEPLOYMENT_TARGET = 16.1;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
@ -682,7 +682,7 @@
|
|||||||
DEVELOPMENT_TEAM = Z6P74P6T99;
|
DEVELOPMENT_TEAM = Z6P74P6T99;
|
||||||
GENERATE_INFOPLIST_FILE = YES;
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
INFOPLIST_FILE = IceCubesShareExtension/Info.plist;
|
INFOPLIST_FILE = IceCubesShareExtension/Info.plist;
|
||||||
INFOPLIST_KEY_CFBundleDisplayName = IceCubesShareExtension;
|
INFOPLIST_KEY_CFBundleDisplayName = "Ice Cubes";
|
||||||
INFOPLIST_KEY_NSHumanReadableCopyright = "";
|
INFOPLIST_KEY_NSHumanReadableCopyright = "";
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 16.1;
|
IPHONEOS_DEPLOYMENT_TARGET = 16.1;
|
||||||
LD_RUNPATH_SEARCH_PATHS = (
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
@ -7,6 +7,7 @@ import Network
|
|||||||
import NukeUI
|
import NukeUI
|
||||||
import Shimmer
|
import Shimmer
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
|
import SafariServices
|
||||||
|
|
||||||
struct AddAccountView: View {
|
struct AddAccountView: View {
|
||||||
@Environment(\.dismiss) private var dismiss
|
@Environment(\.dismiss) private var dismiss
|
||||||
@ -24,6 +25,7 @@ struct AddAccountView: View {
|
|||||||
@State private var signInClient: Client?
|
@State private var signInClient: Client?
|
||||||
@State private var instances: [InstanceSocial] = []
|
@State private var instances: [InstanceSocial] = []
|
||||||
@State private var instanceFetchError: String?
|
@State private var instanceFetchError: String?
|
||||||
|
@State private var oauthURL: URL?
|
||||||
|
|
||||||
private let instanceNamePublisher = PassthroughSubject<String, Never>()
|
private let instanceNamePublisher = PassthroughSubject<String, Never>()
|
||||||
|
|
||||||
@ -100,6 +102,9 @@ struct AddAccountView: View {
|
|||||||
await continueSignIn(url: url)
|
await continueSignIn(url: url)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
.sheet(item: $oauthURL, content: { url in
|
||||||
|
SafariView(url: url)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -176,7 +181,7 @@ struct AddAccountView: View {
|
|||||||
do {
|
do {
|
||||||
signInClient = .init(server: instanceName)
|
signInClient = .init(server: instanceName)
|
||||||
if let oauthURL = try await signInClient?.oauthURL() {
|
if let oauthURL = try await signInClient?.oauthURL() {
|
||||||
await UIApplication.shared.open(oauthURL)
|
self.oauthURL = oauthURL
|
||||||
} else {
|
} else {
|
||||||
isSigninIn = false
|
isSigninIn = false
|
||||||
}
|
}
|
||||||
@ -191,6 +196,7 @@ struct AddAccountView: View {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
do {
|
do {
|
||||||
|
oauthURL = nil
|
||||||
let oauthToken = try await client.continueOauthFlow(url: url)
|
let oauthToken = try await client.continueOauthFlow(url: url)
|
||||||
appAccountsManager.add(account: AppAccount(server: client.server, oauthToken: oauthToken))
|
appAccountsManager.add(account: AppAccount(server: client.server, oauthToken: oauthToken))
|
||||||
Task {
|
Task {
|
||||||
@ -199,7 +205,20 @@ struct AddAccountView: View {
|
|||||||
isSigninIn = false
|
isSigninIn = false
|
||||||
dismiss()
|
dismiss()
|
||||||
} catch {
|
} catch {
|
||||||
|
oauthURL = nil
|
||||||
isSigninIn = false
|
isSigninIn = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct SafariView: UIViewControllerRepresentable {
|
||||||
|
let url: URL
|
||||||
|
|
||||||
|
func makeUIViewController(context: UIViewControllerRepresentableContext<SafariView>) -> SFSafariViewController {
|
||||||
|
SFSafariViewController(url: url)
|
||||||
|
}
|
||||||
|
|
||||||
|
func updateUIViewController(_ uiViewController: SFSafariViewController, context: UIViewControllerRepresentableContext<SafariView>) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -19,8 +19,10 @@ struct ConversationsListRow: View {
|
|||||||
AvatarView(url: conversation.accounts.first!.avatar)
|
AvatarView(url: conversation.accounts.first!.avatar)
|
||||||
VStack(alignment: .leading, spacing: 4) {
|
VStack(alignment: .leading, spacing: 4) {
|
||||||
HStack {
|
HStack {
|
||||||
Text(conversation.accounts.map { $0.safeDisplayName }.joined(separator: ", "))
|
EmojiTextApp(conversation.accounts.map { $0.safeDisplayName }.joined(separator: ", "),
|
||||||
.font(.scaledHeadline)
|
emojis: conversation.accounts.flatMap{ $0.emojis })
|
||||||
|
.font(.scaledSubheadline)
|
||||||
|
.fontWeight(.semibold)
|
||||||
.foregroundColor(theme.labelColor)
|
.foregroundColor(theme.labelColor)
|
||||||
.multilineTextAlignment(.leading)
|
.multilineTextAlignment(.leading)
|
||||||
Spacer()
|
Spacer()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user