2020-07-22 19:29:38 -07:00
|
|
|
//
|
|
|
|
|
// ResourcePolicyManager.swift
|
|
|
|
|
// SBrowser
|
|
|
|
|
//
|
|
|
|
|
// Created by James Magahern on 7/22/20.
|
|
|
|
|
//
|
|
|
|
|
|
|
|
|
|
import Foundation
|
|
|
|
|
|
|
|
|
|
class ResourcePolicyManager: NSObject, SBRResourceOriginPolicyDataSource
|
|
|
|
|
{
|
|
|
|
|
static let AllowedOriginsDefaultsKey = "allowedOrigins"
|
2021-09-29 18:55:23 -07:00
|
|
|
static let OriginPoliciesDefaultsKey = "originPolicies"
|
2020-07-29 17:46:53 -07:00
|
|
|
|
|
|
|
|
private static func stringSetForKey(_ key: String) -> Set<String> {
|
|
|
|
|
if let set = UserDefaults.standard.array(forKey: key) as? [String] {
|
|
|
|
|
return Set<String>(set)
|
2020-07-22 19:29:38 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return Set<String>()
|
2020-07-29 17:46:53 -07:00
|
|
|
}
|
2020-07-22 19:29:38 -07:00
|
|
|
|
2020-07-29 17:46:53 -07:00
|
|
|
private static func saveStringSet(_ set: Set<String>, forKey key: String) {
|
|
|
|
|
UserDefaults.standard.set(Array(set), forKey: key)
|
2020-07-22 19:29:38 -07:00
|
|
|
}
|
|
|
|
|
|
2020-07-29 17:46:53 -07:00
|
|
|
private var allowedOriginSet: Set<String> = stringSetForKey(AllowedOriginsDefaultsKey) {
|
|
|
|
|
didSet { Self.saveStringSet(allowedOriginSet, forKey: Self.AllowedOriginsDefaultsKey) }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func allowedOriginsForScriptResources() -> Set<String> { allowedOriginSet }
|
|
|
|
|
|
2021-10-21 11:05:40 -07:00
|
|
|
func scriptPolicyTypeByOrigin() -> [String : NSNumber] {
|
|
|
|
|
return scriptPolicies.mapValues { NSNumber(integerLiteral: $0.rawValue) }
|
|
|
|
|
}
|
|
|
|
|
|
2021-09-29 18:55:23 -07:00
|
|
|
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)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2020-07-29 17:46:53 -07:00
|
|
|
func allowOriginToLoadScriptResources(_ origin: String) {
|
2020-07-22 19:29:38 -07:00
|
|
|
allowedOriginSet.formUnion([ origin ])
|
2020-07-24 19:26:35 -07:00
|
|
|
}
|
|
|
|
|
|
2020-07-29 17:46:53 -07:00
|
|
|
func disallowOriginToLoadScriptResources(_ origin: String) {
|
2020-07-24 19:26:35 -07:00
|
|
|
allowedOriginSet.remove(origin)
|
2020-07-22 19:29:38 -07:00
|
|
|
}
|
2021-09-29 18:55:23 -07:00
|
|
|
|
|
|
|
|
func scriptPolicy(forOrigin origin: String) -> ScriptPolicy {
|
|
|
|
|
if let policyType = scriptPolicies[origin] {
|
2021-10-21 11:05:40 -07:00
|
|
|
return ScriptPolicy(securityOrigin: origin, policyType: policyType)
|
2021-09-29 18:55:23 -07:00
|
|
|
}
|
|
|
|
|
|
2021-10-21 11:05:40 -07:00
|
|
|
return ScriptPolicy(securityOrigin: origin, policyType: .alpha)
|
2021-09-29 18:55:23 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func setScriptPolicyType(_ policyType: ScriptPolicy.PolicyType, forOrigin origin: String) {
|
|
|
|
|
scriptPolicies[origin] = policyType
|
|
|
|
|
}
|
2020-07-22 19:29:38 -07:00
|
|
|
}
|