97 lines
No EOL
2.6 KiB
Swift
97 lines
No EOL
2.6 KiB
Swift
//
|
|
// KeyStorage.swift
|
|
// KeysForAll
|
|
//
|
|
// Protocol for key storage implementations
|
|
//
|
|
|
|
import Foundation
|
|
|
|
/// Protocol for storing and retrieving key data
|
|
public protocol KeyStorage {
|
|
/// Get the current key count
|
|
func getKeyCount() -> Int
|
|
|
|
/// Set the key count
|
|
func setKeyCount(_ count: Int)
|
|
|
|
/// Get whether key gating is enabled
|
|
func isKeyGatingEnabled() -> Bool
|
|
|
|
/// Set whether key gating is enabled
|
|
func setKeyGatingEnabled(_ enabled: Bool)
|
|
|
|
/// Get all stored keys
|
|
func getStoredKeys() -> [String]
|
|
|
|
/// Add a key
|
|
func addKey(_ key: String)
|
|
|
|
/// Remove a key
|
|
func removeKey(_ key: String)
|
|
|
|
/// Clear all data
|
|
func clear()
|
|
}
|
|
|
|
/// UserDefaults-based implementation of KeyStorage
|
|
public class UserDefaultsKeyStorage: KeyStorage {
|
|
private let userDefaults: UserDefaults
|
|
private let keyCountKey: String
|
|
private let keyGatingEnabledKey: String
|
|
private let storedKeysKey: String
|
|
|
|
public init(suiteName: String? = nil) {
|
|
if let suiteName = suiteName {
|
|
self.userDefaults = UserDefaults(suiteName: suiteName) ?? .standard
|
|
} else {
|
|
self.userDefaults = .standard
|
|
}
|
|
|
|
self.keyCountKey = "keysforall.keyCount"
|
|
self.keyGatingEnabledKey = "keysforall.keyGatingEnabled"
|
|
self.storedKeysKey = "keysforall.storedKeys"
|
|
}
|
|
|
|
public func getKeyCount() -> Int {
|
|
return userDefaults.integer(forKey: keyCountKey)
|
|
}
|
|
|
|
public func setKeyCount(_ count: Int) {
|
|
userDefaults.set(count, forKey: keyCountKey)
|
|
}
|
|
|
|
public func isKeyGatingEnabled() -> Bool {
|
|
return userDefaults.object(forKey: keyGatingEnabledKey) as? Bool ?? true
|
|
}
|
|
|
|
public func setKeyGatingEnabled(_ enabled: Bool) {
|
|
userDefaults.set(enabled, forKey: keyGatingEnabledKey)
|
|
}
|
|
|
|
public func getStoredKeys() -> [String] {
|
|
return userDefaults.stringArray(forKey: storedKeysKey) ?? []
|
|
}
|
|
|
|
public func addKey(_ key: String) {
|
|
var keys = getStoredKeys()
|
|
if !keys.contains(key) {
|
|
keys.append(key)
|
|
userDefaults.set(keys, forKey: storedKeysKey)
|
|
setKeyCount(keys.count)
|
|
}
|
|
}
|
|
|
|
public func removeKey(_ key: String) {
|
|
var keys = getStoredKeys()
|
|
keys.removeAll { $0 == key }
|
|
userDefaults.set(keys, forKey: storedKeysKey)
|
|
setKeyCount(keys.count)
|
|
}
|
|
|
|
public func clear() {
|
|
userDefaults.removeObject(forKey: keyCountKey)
|
|
userDefaults.removeObject(forKey: keyGatingEnabledKey)
|
|
userDefaults.removeObject(forKey: storedKeysKey)
|
|
}
|
|
} |