Skip to content

Instantly share code, notes, and snippets.

@fahadjamal
Created February 23, 2017 06:00
Show Gist options
  • Save fahadjamal/499a3064aa2dbf77f5867c79365266c1 to your computer and use it in GitHub Desktop.
Save fahadjamal/499a3064aa2dbf77f5867c79365266c1 to your computer and use it in GitHub Desktop.
Login Modal for keeping your User Login data inside your App
#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; \
} \
\
#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
#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