Convert script policy to ObjC

This commit is contained in:
James Magahern
2021-10-21 11:05:40 -07:00
parent 31787f57ae
commit 70486c49de
11 changed files with 206 additions and 92 deletions

View File

@@ -0,0 +1,121 @@
//
// SBRScriptPolicy.m
// App
//
// Created by James Magahern on 10/15/21.
//
#import "SBRScriptPolicy.h"
// For icon drawing
#import <UIKit/UIKit.h>
@implementation SBRScriptPolicy
+ (NSString *)titleForPolicyType:(SBRScriptOriginPolicyType)policyType
{
switch (policyType) {
case SBRScriptOriginPolicyTypeAlpha:
return @"Alpha";
case SBRScriptOriginPolicyTypeBravo:
return @"Bravo";
case SBRScriptOriginPolicyTypeCharlie:
return @"Charlie";
case SBRScriptOriginPolicyTypeDelta:
return @"Delta";
case SBRScriptOriginPolicyTypeEcho:
return @"Echo";
}
}
+ (NSString *)localizedDescriptionForPolicyType:(SBRScriptOriginPolicyType)policyType
{
switch (policyType) {
case SBRScriptOriginPolicyTypeAlpha:
return @"All scripts blocked.";
case SBRScriptOriginPolicyTypeBravo:
return @"Scripts on page are allowed.";
case SBRScriptOriginPolicyTypeCharlie:
return @"Allow scripts from the same security origin.";
case SBRScriptOriginPolicyTypeDelta:
return @"Allow scripts from common and host CDNs.";
case SBRScriptOriginPolicyTypeEcho:
return @"All scripts are allowed.";
}
}
+ (UIImage *)iconRepresentationForPolicyType:(SBRScriptOriginPolicyType)policyType withSize:(CGSize)size
{
UIFont *font = [UIFont boldSystemFontOfSize:size.height - 2];
NSDictionary<NSAttributedStringKey, id> *attrs = @{
NSFontAttributeName : font,
NSForegroundColorAttributeName : [UIColor whiteColor]
};
const CGRect rect = (CGRect) { .origin = CGPointZero, .size = size };
UIGraphicsBeginImageContextWithOptions(size, NO, UIScreen.mainScreen.scale);
UIBezierPath *backgroundPath = [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:4.0];
[backgroundPath fill];
NSString *character = @"";
switch (policyType) {
case SBRScriptOriginPolicyTypeAlpha:
character = @"𝝰"; break;
case SBRScriptOriginPolicyTypeBravo:
character = @"𝝱"; break;
case SBRScriptOriginPolicyTypeCharlie:
character = @"𝝲"; break;
case SBRScriptOriginPolicyTypeDelta:
character = @"𝝳"; break;
case SBRScriptOriginPolicyTypeEcho:
character = @"𝝴"; break;
}
const CGSize charSize = [character sizeWithAttributes:attrs];
const CGRect charRect = (CGRect) {
.origin = (CGPoint) {
.x = (size.width - charSize.width) / 2,
.y = -(charSize.height - size.height) / 2,
},
.size = charSize
};
[character drawInRect:charRect withAttributes:attrs];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
+ (BOOL)supportsSecureCoding
{
return YES;
}
- (instancetype)initWithSecurityOrigin:(NSString *)origin policyType:(SBRScriptOriginPolicyType)policyType
{
if (self = [super init]) {
_origin = [origin copy];
_policyType = policyType;
}
return self;
}
- (instancetype)initWithCoder:(NSCoder *)coder
{
NSString *origin = [coder decodeObjectForKey:@"origin"];
NSNumber *policyTypeNumber = [coder decodeObjectForKey:@"policyType"];
return [self initWithSecurityOrigin:origin policyType:[policyTypeNumber integerValue]];
}
- (void)encodeWithCoder:(NSCoder *)coder
{
[coder encodeObject:_origin forKey:@"origin"];
[coder encodeObject:[NSNumber numberWithInteger:_policyType] forKey:@"policyType"];
}
@end