48 lines
1.9 KiB
Swift
48 lines
1.9 KiB
Swift
|
|
//
|
||
|
|
// NotificationCenterDispatcher.swift
|
||
|
|
// passKit
|
||
|
|
//
|
||
|
|
// Created by Danny Moesch on 29.09.21.
|
||
|
|
// Copyright © 2021 Bob Sun. All rights reserved.
|
||
|
|
//
|
||
|
|
|
||
|
|
public class NotificationCenterDispatcher: NSObject, UNUserNotificationCenterDelegate {
|
||
|
|
public static let shared = NotificationCenterDispatcher()
|
||
|
|
|
||
|
|
public func userNotificationCenter(_: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
|
||
|
|
if response.actionIdentifier == Globals.otpNotificationCopyAction {
|
||
|
|
if let otp = response.notification.request.content.userInfo["otp"] as? String {
|
||
|
|
UIPasteboard.general.string = otp
|
||
|
|
}
|
||
|
|
}
|
||
|
|
completionHandler()
|
||
|
|
}
|
||
|
|
|
||
|
|
public static func showOTPNotification(password: Password) {
|
||
|
|
guard let otp = password.currentOtp else {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
let notificationCenter = UNUserNotificationCenter.current()
|
||
|
|
notificationCenter.getNotificationSettings { state in
|
||
|
|
guard state.authorizationStatus == .authorized else {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
let content = UNMutableNotificationContent()
|
||
|
|
if Defaults.autoCopyOTP {
|
||
|
|
content.title = "OTPForPasswordCopied".localize(password.name)
|
||
|
|
} else {
|
||
|
|
content.title = "OTPForPassword".localize(password.name)
|
||
|
|
content.body = otp
|
||
|
|
content.categoryIdentifier = Globals.otpNotificationCategory
|
||
|
|
content.userInfo = [
|
||
|
|
"path": password.namePath,
|
||
|
|
"otp": otp,
|
||
|
|
]
|
||
|
|
}
|
||
|
|
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 1, repeats: false)
|
||
|
|
let request = UNNotificationRequest(identifier: Globals.otpNotification, content: content, trigger: trigger)
|
||
|
|
notificationCenter.add(request)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|