69 lines
1.8 KiB
Swift
69 lines
1.8 KiB
Swift
//
|
|||
// Database.swift
|
|||
// NotificationService
|
|||
//
|
|||
// Created by Djorkaeff Alexandre Vilela Pereira on 9/14/20.
|
|||
// Copyright © 2020 Rocket.Chat. All rights reserved.
|
|||
//
|
|||
|
|||
import Foundation
|
|||
import WatermelonDB
|
|||
|
|||
final class Database {
|
|||
private final var database: WatermelonDB.Database? = nil
|
|||
|
|||
private var directory: String? {
|
|||
if let suiteName = Bundle.main.object(forInfoDictionaryKey: "AppGroup") as? String {
|
|||
if let directory = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: suiteName) {
|
|||
return directory.path
|
|||
}
|
|||
}
|
|||
|
|||
return nil
|
|||
}
|
|||
|
|||
init(server: String) {
|
|||
if let url = URL(string: server) {
|
|||
if let domain = url.domain, let directory = directory {
|
|||
self.database = WatermelonDB.Database(path: "\(directory)/\(domain)-experimental.db")
|
|||
}
|
|||
}
|
|||
}
|
|||
|
|||
func readRoomEncryptionKey(rid: String) -> String? {
|
|||
if let database = database {
|
|||
if let results = try? database.queryRaw("select * from subscriptions where id == ? limit 1", [rid]) {
|
|||
guard let record = results.next() else {
|
|||
return nil
|
|||
}
|
|||
|
|||
if let room = record.resultDictionary as? [String: Any] {
|
|||
if let e2eKey = room["e2e_key"] as? String {
|
|||
return e2eKey
|
|||
}
|
|||
}
|
|||
}
|
|||
}
|
|||
|
|||
return nil
|
|||
}
|
|||
|
|||
func readRoomEncrypted(rid: String) -> Bool {
|
|||
if let database = database {
|
|||
if let results = try? database.queryRaw("select * from subscriptions where id == ? limit 1", [rid]) {
|
|||
guard let record = results.next() else {
|
|||
return false
|
|||
}
|
|||
|
|||
if let room = record.resultDictionary as? [String: Any] {
|
|||
if let encrypted = room["encrypted"] as? Bool {
|
|||
return encrypted
|
|||
}
|
|||
}
|
|||
}
|
|||
}
|
|||
|
|||
return false
|
|||
}
|
|||
}
|