Created
February 23, 2017 06:00
-
-
Save fahadjamal/499a3064aa2dbf77f5867c79365266c1 to your computer and use it in GitHub Desktop.
Login Modal for keeping your User Login data inside your App
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#define SYNTHESIZE_SINGLETON_FOR_CLASS(classname) \ | |
\ | |
+ (id)allocWithZone:(NSZone *)zone \ | |
{ \ | |
@synchronized(self) \ | |
{ \ | |
if (shared##classname == nil) \ | |
{ \ | |
shared##classname = [super allocWithZone:zone]; \ | |
return shared##classname; \ | |
} \ | |
} \ | |
\ | |
return nil; \ | |
} \ | |
\ | |
- (id)copyWithZone:(NSZone *)zone \ | |
{ \ | |
return self; \ | |
} \ | |
\ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#import <Foundation/Foundation.h> | |
extern NSString* const TYUserAuthSucceededNotification; | |
extern NSString* const TYUserAuthFailedNotification; | |
@interface TYLoginDataModel : NSObject<NSCoding, NSCopying> | |
@property (nonatomic, retain) NSString *agentID; | |
@property (nonatomic, retain) NSString *agentUserEmail; | |
@property (nonatomic, retain) NSString *agentPassword; | |
@property (nonatomic, retain) NSString *agentIsAdmin; | |
@property (nonatomic, assign) BOOL valid; | |
+(TYLoginDataModel *) sharedLoginDataModel; | |
-(void) logout; | |
-(BOOL) checkLogin; | |
-(BOOL) commit; | |
-(void) loginWithUserEmail:(NSString *)agentUserEmail agentPassword:(NSString *)agentPassword agentID:(NSString *)agentID agentIsAdmin:(NSString *)isAdmin; | |
+(TYLoginDataModel *) restore; | |
@end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#import "TYLoginDataModel.h" | |
#import "SynthesizeSingleton.h" | |
NSString* const TYUserAuthSucceededNotification = @"TYUserAuthSucceededNotification"; | |
NSString* const TYUserAuthFailedNotification = @"TYUserAuthFailedNotification"; | |
NSString* const kSavedLoginDataModelKey = @"SavedLoginDataModel"; | |
@implementation TYLoginDataModel | |
static TYLoginDataModel *sharedLoginDataModel = nil; | |
SYNTHESIZE_SINGLETON_FOR_CLASS(LoginDataModel); | |
+ (TYLoginDataModel *)sharedLoginDataModel { | |
@synchronized(self) { | |
if (sharedLoginDataModel == nil) { | |
sharedLoginDataModel = [self restore]; | |
if(!sharedLoginDataModel) { | |
sharedLoginDataModel = [[self alloc] init]; | |
} | |
} | |
} | |
return sharedLoginDataModel; | |
} | |
-(BOOL) checkLogin { | |
if (_agentUserEmail == nil || _agentPassword == nil || _agentID == nil || _agentIsAdmin == nil || !_valid) { | |
return NO; | |
} | |
return YES; | |
} | |
-(void) loginWithUserEmail:(NSString *)agentUserEmail agentPassword:(NSString *)agentPassword agentID:(NSString *)agentID agentIsAdmin:(NSString *)isAdmin { | |
// Currently just initializing it with dummy credentials. | |
[[TYLoginDataModel sharedLoginDataModel] setAgentUserEmail:agentUserEmail]; | |
[[TYLoginDataModel sharedLoginDataModel] setAgentPassword:agentPassword]; | |
[[TYLoginDataModel sharedLoginDataModel] setAgentID:agentID]; | |
[[TYLoginDataModel sharedLoginDataModel] setAgentIsAdmin:isAdmin]; | |
[[TYLoginDataModel sharedLoginDataModel] setValid:YES]; | |
// Use whichever your preferred auth mechanism is, and once that's done message the delegate; | |
// Temp code - Delete when you have your authenication implemented !! | |
[[NSNotificationCenter defaultCenter] postNotification:[NSNotification notificationWithName:TYUserAuthSucceededNotification object:self]]; | |
[self commit]; | |
} | |
// Call this method to logout. | |
-(void) logout { | |
_agentUserEmail = nil; | |
_agentPassword = nil; | |
_agentID = nil; | |
_agentIsAdmin = nil; | |
_valid = NO; | |
[self commit]; | |
} | |
// Commits the current object to disk. | |
-(BOOL) commit { | |
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; | |
if(defaults) { | |
NSData *encodedLoginDataModel = [NSKeyedArchiver archivedDataWithRootObject:sharedLoginDataModel]; | |
[defaults setObject:encodedLoginDataModel forKey:kSavedLoginDataModelKey]; | |
[defaults synchronize]; | |
} | |
return YES; | |
} | |
+(TYLoginDataModel *) restore { | |
NSData *encodedLoginDataModel = [[NSUserDefaults standardUserDefaults] objectForKey:kSavedLoginDataModelKey]; | |
return (TYLoginDataModel *) [NSKeyedUnarchiver unarchiveObjectWithData:encodedLoginDataModel]; | |
} | |
- (void)encodeWithCoder:(NSCoder *)encoder { | |
[encoder encodeObject:self.agentUserEmail forKey:@"agentUserEmail"]; | |
[encoder encodeObject:self.agentPassword forKey:@"agentPassword"]; | |
[encoder encodeObject:self.agentID forKey:@"agentID"]; | |
[encoder encodeObject:self.agentIsAdmin forKey:@"agentIsAdmin"]; | |
[encoder encodeBool:self.valid forKey:@"valid"]; | |
} | |
- (id)initWithCoder:(NSCoder *)decoder { | |
self = [super init]; | |
if(self != nil) { | |
self.agentUserEmail = [decoder decodeObjectForKey:@"agentUserEmail"]; | |
self.agentPassword = [decoder decodeObjectForKey:@"agentPassword"]; | |
self.agentID = [decoder decodeObjectForKey:@"agentID"]; | |
self.agentIsAdmin = [decoder decodeObjectForKey:@"agentIsAdmin"]; | |
self.valid = [decoder decodeBoolForKey:@"valid"]; | |
} | |
return self; | |
} | |
@end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment