// // NotificationService.swift // Notification Service Extension // // Created by Marino Faggiana on 27/07/18. // Copyright © 2018 Marino Faggiana. All rights reserved. // // Author Marino Faggiana // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // import UserNotifications class NotificationService: UNNotificationServiceExtension { let privateKey = CCUtility.getPushNotificationPrivateKey() var contentHandler: ((UNNotificationContent) -> Void)? var bestAttemptContent: UNMutableNotificationContent? override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) { self.contentHandler = contentHandler bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent) if let bestAttemptContent = bestAttemptContent { bestAttemptContent.title = "" bestAttemptContent.body = "Nextcloud notification" let message = bestAttemptContent.userInfo["subject"] as! String guard let privateKey = CCUtility.getPushNotificationPrivateKey() else { contentHandler(bestAttemptContent) return } guard let decryptedMessage = NCPushNotificationEncryption.sharedInstance().decryptPushNotification(message, withDevicePrivateKey: privateKey) else { contentHandler(bestAttemptContent) return } guard let data = decryptedMessage.data(using: .utf8) else { contentHandler(bestAttemptContent) return } do { let json = try JSONSerialization.jsonObject(with: data) as! [String:AnyObject] if let app = json["app"] as? String { if app == "spreed" { bestAttemptContent.title = "Nextcloud Talk" } else { bestAttemptContent.title = app.capitalized } } if let subject = json["subject"] as? String { bestAttemptContent.body = subject } } catch let error as NSError { print("Failed : \(error.localizedDescription)") } contentHandler(bestAttemptContent) } } override func serviceExtensionTimeWillExpire() { if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent { bestAttemptContent.title = "" bestAttemptContent.body = "Nextcloud notification" contentHandler(bestAttemptContent) } } }