Files
Attractor/App/Backend/ResourcePolicyManager.swift

66 lines
2.2 KiB
Swift
Raw Normal View History

//
// ResourcePolicyManager.swift
// SBrowser
//
// Created by James Magahern on 7/22/20.
//
import Foundation
class ResourcePolicyManager: NSObject, SBRResourceOriginPolicyDataSource
{
static let AllowedOriginsDefaultsKey = "allowedOrigins"
static let OriginPoliciesDefaultsKey = "originPolicies"
private static func stringSetForKey(_ key: String) -> Set<String> {
if let set = UserDefaults.standard.array(forKey: key) as? [String] {
return Set<String>(set)
}
return Set<String>()
}
private static func saveStringSet(_ set: Set<String>, forKey key: String) {
UserDefaults.standard.set(Array(set), forKey: key)
}
private var allowedOriginSet: Set<String> = stringSetForKey(AllowedOriginsDefaultsKey) {
didSet { Self.saveStringSet(allowedOriginSet, forKey: Self.AllowedOriginsDefaultsKey) }
}
func allowedOriginsForScriptResources() -> Set<String> { allowedOriginSet }
private lazy var scriptPolicies: Dictionary<String, ScriptPolicy.PolicyType> = {
if let existingDict = UserDefaults.standard.dictionary(forKey: Self.OriginPoliciesDefaultsKey) as? Dictionary<String, Int> {
return existingDict.mapValues { ScriptPolicy.PolicyType(rawValue: $0)! }
}
return Dictionary<String, ScriptPolicy.PolicyType>()
}() {
didSet {
let encodableDictionary = scriptPolicies.mapValues { $0.rawValue }
UserDefaults.standard.set(encodableDictionary, forKey: Self.OriginPoliciesDefaultsKey)
}
}
func allowOriginToLoadScriptResources(_ origin: String) {
allowedOriginSet.formUnion([ origin ])
2020-07-24 19:26:35 -07:00
}
func disallowOriginToLoadScriptResources(_ origin: String) {
2020-07-24 19:26:35 -07:00
allowedOriginSet.remove(origin)
}
func scriptPolicy(forOrigin origin: String) -> ScriptPolicy {
if let policyType = scriptPolicies[origin] {
return ScriptPolicy(policyType: policyType, securityOrigin: origin)
}
return ScriptPolicy(policyType: .alpha, securityOrigin: origin)
}
func setScriptPolicyType(_ policyType: ScriptPolicy.PolicyType, forOrigin origin: String) {
scriptPolicies[origin] = policyType
}
}