FRASerialization.m revision a1e92b2783be4bfeb0c7e267223cc7779a6f324c
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott/*
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott * The contents of this file are subject to the terms of the Common Development and
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott * Distribution License (the License). You may not use this file except in compliance with the
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott * License.
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott *
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott * You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott * specific language governing permission and limitations under the License.
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott *
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott * When distributing Covered Software, include this CDDL Header Notice in each file and include
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott * Header, with the fields enclosed by brackets [] replaced by your own identifying
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott * information: "Portions copyright [year] [name of copyright owner]".
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott *
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott * Copyright 2016 ForgeRock AS.
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott */
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott#import "FRASerialization.h"
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert WapshottNSString * const OATH_MECHANISM_SECRET = @"secret";
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert WapshottNSString * const OATH_MECHANISM_ALGORITHM = @"algorithm";
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert WapshottNSString * const OATH_MECHANISM_DIGITS = @"digits";
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert WapshottNSString * const OATH_MECHANISM_PERIOD = @"period";
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert WapshottNSString * const OATH_MECHANISM_COUNTER = @"counter";
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert WapshottNSString * const PUSH_MECHANISM_VERSION = @"version";
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert WapshottNSString * const PUSH_MECHANISM_SECRET = @"secret";
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert WapshottNSString * const PUSH_MECHANISM_AUTH_END_POINT = @"authEndPoint";
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert WapshottNSString * const NOTIFICATION_MESSAGE_ID = @"message_id";
a1e92b2783be4bfeb0c7e267223cc7779a6f324cKen StubbingsNSString * const NOTIFICATION_PUSH_CHALLENGE = @"push_challenge";
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert WapshottNSString * const NOTIFICATION_TIME_TO_LIVE = @"time_to_live";
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott@implementation FRASerialization
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott#pragma mark -
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott#pragma mark Serialise/Deserialise Functions
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott+ (BOOL)serializeMap:(NSDictionary *)dictionary intoString:(NSString *__autoreleasing *)jsonString error:(NSError *__autoreleasing *)error {
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott if (dictionary == nil) {
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott return YES;
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott }
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott NSData *jsonBytes = [NSJSONSerialization dataWithJSONObject:dictionary options:0 error:error];
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott if (jsonBytes == nil) {
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott return NO;
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott }
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott *jsonString = [FRASerialization serializeBytes:jsonBytes];
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott return YES;
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott}
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott+ (BOOL)deserializeJSON:(NSString *)dictionaryJson intoDictionary:(NSDictionary *__autoreleasing *)dictionary error:(NSError *__autoreleasing *)error {
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott if (dictionaryJson == nil) {
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott return YES;
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott }
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott NSData *jsonBytes = [FRASerialization deserializeBytes:dictionaryJson];
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott NSDictionary* map = [NSJSONSerialization JSONObjectWithData: jsonBytes options: NSJSONReadingMutableContainers error: error];
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott if (map == nil) {
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott return NO;
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott }
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott *dictionary = map;
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott return YES;
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott}
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott+ (NSString *)serializeBytes:(NSData *)data {
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott if (data == nil) {
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott return nil;
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott }
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott}
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott+ (NSData *)deserializeBytes:(NSString *)data {
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott if (data == nil || [data isKindOfClass:[NSNull class]]) {
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott return nil;
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott }
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott return [data dataUsingEncoding:NSUTF8StringEncoding];
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott}
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott#pragma mark -
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott#pragma mark Data Sanity Functions
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott+ (id)nonNilString:(NSString *)string {
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott if (string == nil) {
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott return [NSNull null];
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott }
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott return string;
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott}
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott+ (NSString *)nullToEmpty:(NSString *)string {
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott if (string == nil || [string isKindOfClass:[NSNull class]]) {
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott return @"";
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott }
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott return string;
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott}
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott+ (id)nonNilDate:(NSDate *)date {
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott if (date != nil) {
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott NSTimeInterval interval = [date timeIntervalSince1970];
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott NSNumber *seconds = [NSNumber numberWithDouble:interval];
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott return [seconds stringValue];
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott } else {
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott return [NSNull null];
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott }
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott}
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott@end
721bb987c406979bcfe705fa1ca8d54497d40fcbRobert Wapshott