85 lines
2.8 KiB
Swift
85 lines
2.8 KiB
Swift
//
|
||
// ScriptPolicy.swift
|
||
// App
|
||
//
|
||
// Created by James Magahern on 9/29/21.
|
||
//
|
||
|
||
import UIKit
|
||
|
||
struct ScriptPolicy: Hashable {
|
||
enum PolicyType: Int, CaseIterable {
|
||
case alpha
|
||
case bravo
|
||
case charlie
|
||
case delta
|
||
case echo
|
||
}
|
||
|
||
public let policyType: PolicyType
|
||
public let securityOrigin: String
|
||
|
||
public static func title(forPolicyType type: PolicyType) -> String {
|
||
switch type {
|
||
case .alpha: return "Alpha"
|
||
case .bravo: return "Bravo"
|
||
case .charlie: return "Charlie"
|
||
case .delta: return "Delta"
|
||
case .echo: return "Echo"
|
||
}
|
||
}
|
||
|
||
public static func localizedDescription(forPolicyType type: PolicyType) -> String {
|
||
switch type {
|
||
case .alpha:
|
||
return "All scripts blocked."
|
||
case .bravo:
|
||
return "Scripts on page are allowed."
|
||
case .charlie:
|
||
return "Allow scripts from the same security origin."
|
||
case .delta:
|
||
return "Allow scripts from common and host CDNs."
|
||
case .echo:
|
||
return "All scripts are allowed."
|
||
}
|
||
}
|
||
|
||
public static func iconRepresentation(forPolicyType type: PolicyType, size: CGSize) -> UIImage? {
|
||
let font = UIFont.boldSystemFont(ofSize: size.height - 2)
|
||
let attrs: [NSAttributedString.Key : Any] = [
|
||
.font : font,
|
||
.foregroundColor: UIColor.white,
|
||
]
|
||
|
||
let rect = CGRect(origin: .zero, size: size)
|
||
UIGraphicsBeginImageContextWithOptions(size, false, UIScreen.main.scale)
|
||
if let _ = UIGraphicsGetCurrentContext() {
|
||
let backgroundPath = UIBezierPath.init(roundedRect: rect, cornerRadius: 4.0)
|
||
// backgroundPath.usesEvenOddFillRule = true
|
||
backgroundPath.fill()
|
||
|
||
let character = NSString(string: { () -> String in
|
||
switch type {
|
||
case .alpha: return "𝝰"
|
||
case .bravo: return "𝝱"
|
||
case .charlie: return "𝝲"
|
||
case .delta: return "𝝳"
|
||
case .echo: return "𝝴"
|
||
}
|
||
}())
|
||
|
||
let charSize = character.size(withAttributes: attrs)
|
||
let charRect = CGRect(origin: .init(x: (size.width - charSize.width) / 2 ,
|
||
y: -(charSize.height - size.height) / 2),
|
||
size: charSize)
|
||
|
||
character.draw(in: charRect, withAttributes: attrs)
|
||
}
|
||
|
||
let image = UIGraphicsGetImageFromCurrentImageContext()
|
||
UIGraphicsEndImageContext()
|
||
|
||
return image
|
||
}
|
||
}
|