122 lines
3.6 KiB
Objective-C
122 lines
3.6 KiB
Objective-C
//
|
||
// 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
|