From c13abcb83369b5d20e6dc81903f6619e8a7bcae2 Mon Sep 17 00:00:00 2001 From: iska Date: Fri, 1 Jun 2018 17:18:23 +0200 Subject: [PATCH] Add implementation for HTML Attributes sanitizing policy --- Sources/HTMLAttributePolicy.h | 12 ++++++++++ Sources/HTMLAttributePolicy.m | 43 +++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) diff --git a/Sources/HTMLAttributePolicy.h b/Sources/HTMLAttributePolicy.h index 2f9c72b..4202500 100644 --- a/Sources/HTMLAttributePolicy.h +++ b/Sources/HTMLAttributePolicy.h @@ -8,6 +8,18 @@ #import +NS_ASSUME_NONNULL_BEGIN + +typedef NSString * _Nullable (^ SanitizeAttrbiuteValueBlock) (NSString * _Nullable value, NSString * key); + @interface HTMLAttributePolicy : NSObject ++ (instancetype)identity; ++ (instancetype)rejectAll; ++ (instancetype)policyWithBlock:(SanitizeAttrbiuteValueBlock)block; + +- (NSString *)sanitizeValue:(NSString *)value forKey:(NSString *)key; + @end + +NS_ASSUME_NONNULL_END diff --git a/Sources/HTMLAttributePolicy.m b/Sources/HTMLAttributePolicy.m index 41eb99c..a4838e6 100644 --- a/Sources/HTMLAttributePolicy.m +++ b/Sources/HTMLAttributePolicy.m @@ -8,6 +8,49 @@ #import "HTMLAttributePolicy.h" +@interface HTMLAttributePolicy() +{ + SanitizeAttrbiuteValueBlock _block; +} +@end + @implementation HTMLAttributePolicy ++ (instancetype)identity +{ + return [self policyWithBlock:^NSString * _Nullable (NSString * _Nullable value, NSString * _Nonnull key) { + return value; + }]; +} + ++ (instancetype)rejectAll +{ + return [self policyWithBlock:^NSString * _Nullable (NSString * _Nullable value, NSString * _Nonnull key) { + return nil; + }]; +} + ++ (instancetype)policyWithBlock:(SanitizeAttrbiuteValueBlock)block +{ + HTMLAttributePolicy *policy = [[HTMLAttributePolicy alloc] initWithBlock:block]; + return policy; +} + +- (instancetype)initWithBlock:(SanitizeAttrbiuteValueBlock)block +{ + self = [super init]; + if (self) { + _block = block; + } + return self; +} + +- (NSString *)sanitizeValue:(NSString *)value forKey:(NSString *)key +{ + if (_block) { + return _block(value, key); + } + return value; +} + @end