Для смены ключа шифрования базы данных создайте приложение «HHFWRekeyBase», в котором используются методы фреймворка:
Имя метода | Краткое описание |
initWithCredentials (_: host: environment: project: device:) | Метод выполняет инициализацию фреймворка. |
auth (_: password:) | Метод выполняет аутентификацию пользователя по логину и паролю. |
openBase (_: key:) | Метод открывает соединение с базой данных по указанному пути. |
closeBase (_:) | Метод закрывает соединение с базой данных. |
rekeyBase (_: newKey:) | Метод выполняет смену ключа шифрования базы данных по указанному пути. |
Вспомогательный метод:
Имя метода | Краткое описание |
getURL (for:) | Метод возвращает URL для файла с заданным именем в папке «Documents».
Тип возвращаемых данных: URL. |
Приложение «HHFWRekeyBase» состоит из одного экрана, текстового представления «UITextView», текстового поля «UITextField» и кнопок «UIButton»:
«Open Database». Открытие соединения с базой данных;
«Rekey Database». Смена ключа шифрования базы данных.
Примечание. При загрузке приложения выполняется аутентификация, кнопки и текстовое поле недоступны. Если аутентификация выполнена успешно, то кнопки и текстовое поле будут доступны и в текстовом представлении появится надпись «Authentication and resources load success».
Для выполнения примера:
Введите в текстовое поле первичный ключ шифрования базы данных и нажмите кнопку «Open Database».
При нажатии на кнопку происходит открытие соединения или создание базы данных с указанным первичным ключом. В текстовом представлении описывается результат выполнения метода.
Введите в текстовое поле новый ключ шифрования базы данных и нажмите кнопку «Rekey Database».
При нажатии на кнопку происходит смена ключа шифрования базы данных. В текстовом представлении описывается результат выполнения метода.
Введите в текстовое поле первичный ключ шифрования базы данных и нажмите кнопку «Open Database».
При нажатии на кнопку происходит закрытие предыдущего соединения с базой данных и попытка открытия нового соединения с первичным ключом. В текстовом представлении описывается результат выполнения метода.
Введите в текстовое поле новый ключ шифрования базы данных, который был указан в пункте 2, и нажмите кнопку «Open Database».
При нажатии на кнопку происходит закрытие предыдущего соединения с базой данных и попытка открытия нового соединения с новым ключом. В текстовом представлении описывается результат выполнения метода.
Код приложения:
import UIKit
class ViewController: UIViewController {
// Объявим элементы пользовательского интерфейса
@IBOutlet weak var keyTextField: UITextField!
@IBOutlet weak var openDatabaseButton: UIButton!
@IBOutlet weak var rekeyDatabaseButton: UIButton!
@IBOutlet weak var resultTextView: UITextView!
// Выполним методы цикла отображения пользовательского интерфейса
override func viewDidLoad() {
super.viewDidLoad()
self.deactivateViews()
self.initializeFramework()
self.auth {
self.activateViews()
self.resultTextView.text = "Authentication success"
}
}
// Зададим методы для обработки событий, инициированных пользователем из пользовательского интерфейса
@IBAction func openDatabasePressed(_ sender: UIButton) {
let databaseName = "database.sqlite"
self.closeDatabase(databaseName)
let key = self.keyTextField.text ?? ""
self.resultTextView.text = "Open base with key \"\(key)\" success: \(self.openDatabase(databaseName, key: key))"
}
@IBAction func rekeyDatabasePressed(_ sender: UIButton) {
let databaseName = "database.sqlite"
let newKey = self.keyTextField.text ?? ""
self.resultTextView.text = "Rekey base with new key \"\(newKey)\" success: \(self.rekeyDatabase(databaseName, newKey: newKey))"
}
// Выполним инициализацию фреймворка
private func initializeFramework() {
let apiVersion: String = "v1"
let host: String = "http://testmasterfmp.fsight.cloud/"
let environment: String = "DocumentationExampleEnv"
let project: String = "DocumentationExampleProj"
let device: String = (UIDevice.current.identifierForVendor?.uuidString)!
HHFWController.sharedInstance().initWithCredentials(
apiVersion,
host: host,
environment: environment,
project: project,
device: device
)
}
// Выполним аутентификацию
private func auth(completion: @escaping ()->()) {
let username: String = "test"
let password: String = "test123"
HHFWController.sharedInstance().auth(username, password: password){ (jsonResult) in
if let jsonDict = jsonResult as? NSDictionary,
let status = jsonDict["status"] as? String, status == "ok" {
print("Auth success")
completion()
} else {
print("Auth error")
}
}
}
// Откроем или создадим базу данных
private func openDatabase(_ databaseName: String, key: String) -> Bool {
let fullDatabaseURL = self.getURL(for: databaseName)
return HHFWController.sharedInstance().openBase(fullDatabaseURL.path, key: key)
}
// Сменим ключ шифрования базы данных
private func rekeyDatabase(_ databaseName: String, newKey: String) -> Bool {
let fullDatabaseURL = self.getURL(for: databaseName)
return HHFWController.sharedInstance().rekeyBase(fullDatabaseURL.path, newKey: newKey)
}
// Закроем базу данных
private func closeDatabase(_ databaseName: String) -> Bool {
let fullDatabaseURL = self.getURL(for: databaseName)
return HHFWController.sharedInstance().closeBase(fullDatabaseURL.path)
}
// Выполним вспомогательные методы
private func getURL(for fileName: String) -> URL {
let paths: [URL] = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
let fileURL: URL = paths[0].appendingPathComponent(fileName)
return fileURL
}
// Зададим методы для изменения элементов отображения пользовательского интерфейса
private func deactivateViews() {
self.keyTextField.isEnabled = false
self.openDatabaseButton.isEnabled = false
self.rekeyDatabaseButton.isEnabled = false
}
private func activateViews() {
self.keyTextField.isEnabled = true
self.openDatabaseButton.isEnabled = true
self.rekeyDatabaseButton.isEnabled = true
}
}
См. также:
Примеры использования iOS-фреймворка | Примеры работы с ресурсами