From 206957dc86db324db53e1e68d57c8da76e48a6db Mon Sep 17 00:00:00 2001 From: iPaddy Date: Fri, 28 Nov 2014 10:14:24 +0100 Subject: [PATCH 1/4] Added SPForgotPWViewController --- Simperium.xcodeproj/project.pbxproj | 8 +++ Simperium/SPForgotPWViewController.h | 17 ++++++ Simperium/SPForgotPWViewController.m | 80 ++++++++++++++++++++++++++++ 3 files changed, 105 insertions(+) create mode 100644 Simperium/SPForgotPWViewController.h create mode 100644 Simperium/SPForgotPWViewController.m diff --git a/Simperium.xcodeproj/project.pbxproj b/Simperium.xcodeproj/project.pbxproj index 9b2c282e..e3f7da62 100644 --- a/Simperium.xcodeproj/project.pbxproj +++ b/Simperium.xcodeproj/project.pbxproj @@ -163,6 +163,8 @@ 46EE3D41171C975D00E6F0A5 /* SimperiumComplexTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 46EE3D40171C975D00E6F0A5 /* SimperiumComplexTests.m */; }; 46EE3D44171C978E00E6F0A5 /* SimperiumAuxiliaryTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 46EE3D43171C978D00E6F0A5 /* SimperiumAuxiliaryTests.m */; }; 46EE3D57171D0C8E00E6F0A5 /* SimperiumErrorTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 46EE3D56171D0C8E00E6F0A5 /* SimperiumErrorTests.m */; }; + 79343B041A28552B006715C2 /* SPForgotPWViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 79343B021A28552B006715C2 /* SPForgotPWViewController.h */; }; + 79343B051A28552B006715C2 /* SPForgotPWViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 79343B031A28552B006715C2 /* SPForgotPWViewController.m */; }; 797D26FE19F1B72700DEF569 /* SSKeychain.h in Headers */ = {isa = PBXBuildFile; fileRef = 797D26FA19F1B72700DEF569 /* SSKeychain.h */; settings = {ATTRIBUTES = (Public, ); }; }; 797D26FF19F1B72700DEF569 /* SSKeychain.m in Sources */ = {isa = PBXBuildFile; fileRef = 797D26FB19F1B72700DEF569 /* SSKeychain.m */; }; 797D270019F1B72700DEF569 /* SSKeychainQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = 797D26FC19F1B72700DEF569 /* SSKeychainQuery.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -407,6 +409,8 @@ 46EE3D40171C975D00E6F0A5 /* SimperiumComplexTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SimperiumComplexTests.m; sourceTree = ""; }; 46EE3D43171C978D00E6F0A5 /* SimperiumAuxiliaryTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SimperiumAuxiliaryTests.m; sourceTree = ""; }; 46EE3D56171D0C8E00E6F0A5 /* SimperiumErrorTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SimperiumErrorTests.m; sourceTree = ""; }; + 79343B021A28552B006715C2 /* SPForgotPWViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SPForgotPWViewController.h; sourceTree = ""; }; + 79343B031A28552B006715C2 /* SPForgotPWViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SPForgotPWViewController.m; sourceTree = ""; }; 797D26FA19F1B72700DEF569 /* SSKeychain.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SSKeychain.h; sourceTree = ""; }; 797D26FB19F1B72700DEF569 /* SSKeychain.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SSKeychain.m; sourceTree = ""; }; 797D26FC19F1B72700DEF569 /* SSKeychainQuery.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SSKeychainQuery.h; sourceTree = ""; }; @@ -851,6 +855,8 @@ 466EB41317BC45F5005F7599 /* SPAuthenticationValidator.m */, E265DBCE17CD3E0A00070550 /* SPTOSViewController.h */, E265DBCF17CD3E0A00070550 /* SPTOSViewController.m */, + 79343B021A28552B006715C2 /* SPForgotPWViewController.h */, + 79343B031A28552B006715C2 /* SPForgotPWViewController.m */, ); name = Authentication; sourceTree = ""; @@ -988,6 +994,7 @@ 264CD942135DFE6D00C51BAD /* SPGhost.h in Headers */, 264CD944135DFE6D00C51BAD /* SPMember.h in Headers */, 264CD996135DFE7E00C51BAD /* DiffMatchPatch.h in Headers */, + 79343B041A28552B006715C2 /* SPForgotPWViewController.h in Headers */, 264CD999135DFE7E00C51BAD /* DiffMatchPatchCFUtilities.h in Headers */, 264CD99A135DFE7E00C51BAD /* MinMaxMacros.h in Headers */, 264CD99B135DFE7E00C51BAD /* NSMutableDictionary+DMPExtensions.h in Headers */, @@ -1273,6 +1280,7 @@ 267CE8FF156C0FD20028801C /* SPBucket.m in Sources */, 24A73F5717E250E0000CA275 /* SPPersistentMutableDictionary.m in Sources */, 267CE902156C0FD20028801C /* SPDiffer.m in Sources */, + 79343B051A28552B006715C2 /* SPForgotPWViewController.m in Sources */, 267CE904156C0FD20028801C /* SPJSONStorage.m in Sources */, 797D26FF19F1B72700DEF569 /* SSKeychain.m in Sources */, 267CE906156C0FD20028801C /* SPObject.m in Sources */, diff --git a/Simperium/SPForgotPWViewController.h b/Simperium/SPForgotPWViewController.h new file mode 100644 index 00000000..b7443d1e --- /dev/null +++ b/Simperium/SPForgotPWViewController.h @@ -0,0 +1,17 @@ +// +// SPForgotPWViewController.h +// Simperium +// +// Created by Patrick Vink on 11/28/14. +// Copyright (c) 2013 Simperium. All rights reserved. +// + +#import + +@interface SPForgotPWViewController : UIViewController { + + UIWebView *webView; + UIActivityIndicatorView *activityIndicator; +} + +@end diff --git a/Simperium/SPForgotPWViewController.m b/Simperium/SPForgotPWViewController.m new file mode 100644 index 00000000..97c7b602 --- /dev/null +++ b/Simperium/SPForgotPWViewController.m @@ -0,0 +1,80 @@ +// +// SPForgotPWViewController.m +// Simperium +// +// Created by Patrick Vink on 11/28/14. +// Copyright (c) 2013 Simperium. All rights reserved. +// + +#import "SPForgotPWViewController.h" +#import "SPLogger.h" + +#pragma mark ==================================================================================== +#pragma mark Constants +#pragma mark ==================================================================================== + +static SPLogLevels logLevel = SPLogLevelsInfo; + +@interface SPForgotPWViewController () + +@end + +@implementation SPForgotPWViewController + +- (void)loadView { + + if (!webView) { + webView = [[UIWebView alloc] init]; + webView.delegate = self; + self.view = webView; + } +} + +- (void)dismissAction:(id)sender { + + [self dismissViewControllerAnimated:YES completion:nil]; +} + +- (void)viewDidLoad +{ + [super viewDidLoad]; + // Do any additional setup after loading the view. + + activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; + [activityIndicator hidesWhenStopped]; + UIBarButtonItem *activityContainer = [[UIBarButtonItem alloc] initWithCustomView:activityIndicator]; + self.navigationItem.leftBarButtonItem = activityContainer; + + self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(dismissAction:)]; + + NSString *forgotPWURL = NSLocalizedString(@"Forgot Password URL", @"Using this localized string you can set your own password per language"); + + if (![self isValidURL:forgotPWURL]) { + SPLogInfo(@"URL for forgot password is not valid... Please use the localized string 'Forgot Password URL', to set the correct forgot password link per language"); + // Dummy link to show Simperium 404 page + forgotPWURL = @"https://simperium.com/404.html"; + } + + NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:forgotPWURL]]; + [webView loadRequest:request]; +} + +- (BOOL)isValidURL:(NSString *)urlString{ + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlString]]; + return [NSURLConnection canHandleRequest:request]; +} + +#pragma mark UIWebViewDelegate Methods + +- (void)webViewDidStartLoad:(UIWebView *)webView { + + [activityIndicator startAnimating]; +} + +- (void)webViewDidFinishLoad:(UIWebView *)webView { + + [activityIndicator stopAnimating]; +} + + +@end From 2c06b4353a0ea382d5bfff93e2ed41fbc08e7e46 Mon Sep 17 00:00:00 2001 From: iPaddy Date: Fri, 28 Nov 2014 10:15:29 +0100 Subject: [PATCH 2/4] Added localized custom TOS URL --- Simperium/SPTOSViewController.m | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/Simperium/SPTOSViewController.m b/Simperium/SPTOSViewController.m index f8bdd9d4..69e3ea4a 100644 --- a/Simperium/SPTOSViewController.m +++ b/Simperium/SPTOSViewController.m @@ -6,8 +6,6 @@ // Copyright (c) 2013 Simperium. All rights reserved. // -NSString *const TOSUrl = @"http://simperium.com/tos/"; - #import "SPTOSViewController.h" @interface SPTOSViewController () @@ -42,17 +40,24 @@ - (void)viewDidLoad self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(dismissAction:)]; - NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:TOSUrl]]; + NSString *termsURL = NSLocalizedString(@"TOS URL", @"Using this localized string you can set your own TOS per language"); + + if (![self isValidURL:termsURL]) { + // Show default Simperium TOS + termsURL = @"http://simperium.com/tos/"; + } + + NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:termsURL]]; [webView loadRequest:request]; } -#pragma mark UIWebViewDelegate Methods - -- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { - - return [[NSString stringWithFormat:@"%@", request.URL] isEqualToString:TOSUrl]; +- (BOOL)isValidURL:(NSString *)urlString{ + NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlString]]; + return [NSURLConnection canHandleRequest:request]; } +#pragma mark UIWebViewDelegate Methods + - (void)webViewDidStartLoad:(UIWebView *)webView { [activityIndicator startAnimating]; From 6c5a6fd9bc32e7045ae6aaa37ba0100eebd922ed Mon Sep 17 00:00:00 2001 From: iPaddy Date: Fri, 28 Nov 2014 10:16:40 +0100 Subject: [PATCH 3/4] Added showForgotPasswordButton to show forgot password button --- Simperium/SPAuthenticationConfiguration.h | 1 + Simperium/SPAuthenticationViewController.m | 37 +++++++++++++++++++++- 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/Simperium/SPAuthenticationConfiguration.h b/Simperium/SPAuthenticationConfiguration.h index 777e00a1..a5756c4f 100644 --- a/Simperium/SPAuthenticationConfiguration.h +++ b/Simperium/SPAuthenticationConfiguration.h @@ -13,6 +13,7 @@ @property (nonatomic, copy) NSString *regularFontName; @property (nonatomic, copy) NSString *mediumFontName; @property (nonatomic, copy) NSString *logoImageName; +@property (nonatomic, readwrite, assign) BOOL *showForgotPasswordButton; #if TARGET_OS_IPHONE #else diff --git a/Simperium/SPAuthenticationViewController.m b/Simperium/SPAuthenticationViewController.m index 1cef915a..85b80371 100644 --- a/Simperium/SPAuthenticationViewController.m +++ b/Simperium/SPAuthenticationViewController.m @@ -15,6 +15,7 @@ #import "SPAuthenticationConfiguration.h" #import "SPAuthenticationValidator.h" #import "SPTOSViewController.h" +#import "SPForgotPWViewController.h" @@ -42,6 +43,7 @@ @interface SPAuthenticationViewController() Date: Sat, 29 Nov 2014 10:17:22 +0100 Subject: [PATCH 4/4] Added showTOSButton to show/hide TOS button (default value: YES) --- Simperium/SPAuthenticationConfiguration.h | 1 + Simperium/SPAuthenticationConfiguration.m | 1 + Simperium/SPAuthenticationViewController.m | 4 +++- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/Simperium/SPAuthenticationConfiguration.h b/Simperium/SPAuthenticationConfiguration.h index a5756c4f..29d732c6 100644 --- a/Simperium/SPAuthenticationConfiguration.h +++ b/Simperium/SPAuthenticationConfiguration.h @@ -14,6 +14,7 @@ @property (nonatomic, copy) NSString *mediumFontName; @property (nonatomic, copy) NSString *logoImageName; @property (nonatomic, readwrite, assign) BOOL *showForgotPasswordButton; +@property (nonatomic, readwrite, assign) BOOL *showTOSButton; #if TARGET_OS_IPHONE #else diff --git a/Simperium/SPAuthenticationConfiguration.m b/Simperium/SPAuthenticationConfiguration.m index fdaba970..6c8257c2 100644 --- a/Simperium/SPAuthenticationConfiguration.m +++ b/Simperium/SPAuthenticationConfiguration.m @@ -33,6 +33,7 @@ - (instancetype)init { if (self) { _regularFontName = @"HelveticaNeue"; _mediumFontName = @"HelveticaNeue-Medium"; + _showTOSButton = YES; #if TARGET_OS_IPHONE #else diff --git a/Simperium/SPAuthenticationViewController.m b/Simperium/SPAuthenticationViewController.m index 85b80371..a286cf28 100644 --- a/Simperium/SPAuthenticationViewController.m +++ b/Simperium/SPAuthenticationViewController.m @@ -216,7 +216,9 @@ - (void)viewDidLoad { UIView *footerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.changeButton.frame.size.height + self.changeButton.frame.origin.y)]; footerView.contentMode = UIViewContentModeTopLeft; [footerView setUserInteractionEnabled:YES]; - [footerView addSubview:_termsButton]; + if ([[SPAuthenticationConfiguration sharedInstance] showTOSButton]) { + [footerView addSubview:_termsButton]; + } if ([[SPAuthenticationConfiguration sharedInstance] showForgotPasswordButton]) { [footerView addSubview:_forgotPasswordButton]; }