Skip to content

Commit 0cfec45

Browse files
committed
Merge branch 'develop'
2 parents 6ff1c41 + 87bf087 commit 0cfec45

File tree

9 files changed

+64
-16
lines changed

9 files changed

+64
-16
lines changed

Mage/AuthenticationCoordinator.m

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -366,7 +366,7 @@ - (void) returnToLogin: (void (^) (AuthenticationStatus authenticationStatus, NS
366366

367367
- (void) authenticationWasSuccessfulWithModule: (id<AuthenticationProtocol>) module {
368368

369-
[module finishLogin:^(AuthenticationStatus authenticationStatus, NSString *errorString) {
369+
[module finishLogin:^(AuthenticationStatus authenticationStatus, NSString *errorString, NSString *errorDetail) {
370370
if (authenticationStatus == AUTHENTICATION_SUCCESS) {
371371
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
372372

@@ -384,7 +384,7 @@ - (void) authenticationWasSuccessfulWithModule: (id<AuthenticationProtocol>) mod
384384
[self.navigationController pushViewController:viewController animated:NO];
385385
}
386386
} else {
387-
ContactInfo *info = [[ContactInfo alloc] initWithTitle:@"Login Failed" andMessage: errorString];
387+
ContactInfo *info = [[ContactInfo alloc] initWithTitle:@"Login Failed" andMessage: errorString andDetailedInfo: errorDetail];
388388
// info.username = username;
389389
[self.loginView setContactInfo:info];
390390
}

Mage/ContactInfo.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,10 @@ NS_ASSUME_NONNULL_BEGIN
3232
*/
3333
@property (nonatomic, strong) NSString *strategy;
3434

35+
@property (nonatomic, strong) NSString *detailedInfo;
36+
3537
- (instancetype) initWithTitle: (nullable NSString *)title andMessage: (NSString *) message;
38+
- (instancetype) initWithTitle: (nullable NSString *)title andMessage: (NSString *) message andDetailedInfo: (NSString *) detailedInfo;
3639

3740
- (NSAttributedString *) messageWithContactInfo;
3841

Mage/ContactInfo.m

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,16 @@ - (instancetype) initWithTitle: (nullable NSString *)title andMessage: (NSString
2323
return self;
2424
}
2525

26+
- (instancetype) initWithTitle: (nullable NSString *)title andMessage: (NSString *) message andDetailedInfo:(nonnull NSString *)detailedInfo {
27+
28+
self = [self initWithTitle:title andMessage:message];
29+
if (!self) return nil;
30+
31+
[self setDetailedInfo:detailedInfo];
32+
33+
return self;
34+
}
35+
2636
- (NSAttributedString *) messageWithContactInfo {
2737
NSString * htmlString = [self constructMessage];
2838
NSAttributedString *attributedString = [[NSAttributedString alloc]

Mage/LoginViewController.m

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#import "LocalLoginView.h"
1515
#import "LdapLoginView.h"
1616
#import "OrView.h"
17+
#import <PureLayout.h>
1718

1819
@interface LoginViewController () <UITextFieldDelegate, UIGestureRecognizerDelegate>
1920

@@ -32,7 +33,10 @@ @interface LoginViewController () <UITextFieldDelegate, UIGestureRecognizerDeleg
3233
@property (strong, nonatomic) id<MDCContainerScheming> scheme;
3334
@property (weak, nonatomic) IBOutlet UIStackView *loginsStackView;
3435
@property (strong, nonatomic) IBOutlet UITextView *messageView;
36+
@property (strong, nonatomic) MDCButton *messageDetailButton;
37+
@property (strong, nonatomic) NSString *errorMessageDetail;
3538
@property (strong, nonatomic) OrView *orView;
39+
@property (strong, nonatomic) UITapGestureRecognizer *gestureRecognizer;
3640

3741
@end
3842

@@ -169,9 +173,26 @@ - (void) setupAuthentication {
169173
self.messageView.editable = NO;
170174
[self.loginsStackView addArrangedSubview:self.messageView];
171175

176+
UIView *messageDetailButtonContainer = [UIView newAutoLayoutView];
177+
self.messageDetailButton = [[MDCButton alloc] init];
178+
[self.messageDetailButton applyTextThemeWithScheme:_scheme];
179+
[self.messageDetailButton setTitle:@"Copy Error Message Detail" forState:UIControlStateNormal];
180+
[self.messageDetailButton addTarget:self action:@selector(copyDetail) forControlEvents:UIControlEventTouchUpInside];
181+
self.messageDetailButton.hidden = YES;
182+
183+
[messageDetailButtonContainer addSubview:self.messageDetailButton];
184+
[self.messageDetailButton autoPinEdgesToSuperviewEdgesWithInsets:UIEdgeInsetsMake(0, 16, 0, 16)];
185+
186+
[self.loginsStackView addArrangedSubview:messageDetailButtonContainer];
187+
172188
self.statusView.hidden = !self.loginFailure;
173189
}
174190

191+
- (void) copyDetail {
192+
UIPasteboard.generalPasteboard.string = self.errorMessageDetail;
193+
[MDCSnackbarManager.defaultManager showMessage:[MDCSnackbarMessage messageWithText: @"Error detail copied to clipboard"]];
194+
}
195+
175196
- (void) setContactInfo:(ContactInfo *) contactInfo {
176197
self.messageView.attributedText = contactInfo.messageWithContactInfo;
177198
self.messageView.accessibilityLabel = contactInfo.title;
@@ -183,6 +204,14 @@ - (void) setContactInfo:(ContactInfo *) contactInfo {
183204
[self.messageView sizeToFit];
184205
self.messageView.hidden = NO;
185206

207+
if (contactInfo.detailedInfo) {
208+
self.messageDetailButton.hidden = NO;
209+
self.errorMessageDetail = contactInfo.detailedInfo;
210+
} else {
211+
self.messageDetailButton.hidden = YES;
212+
self.errorMessageDetail = nil;
213+
}
214+
186215
if([self.loginsStackView.superview isMemberOfClass:[UIScrollView class]]) {
187216
[self.loginsStackView.superview layoutIfNeeded];
188217
dispatch_async(dispatch_get_main_queue(), ^{

sdk/Authentication.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ typedef NS_ENUM(NSInteger, AuthenticationStatus) {
1818
- (NSDictionary *) parameters;
1919
- (BOOL) canHandleLoginToURL: (NSString *) url;
2020
- (void) loginWithParameters: (NSDictionary *) loginParameters complete:(void (^) (AuthenticationStatus authenticationStatus, NSString *errorString)) complete;
21-
- (void) finishLogin:(void (^) (AuthenticationStatus authenticationStatus, NSString *errorString)) complete;
21+
- (void) finishLogin:(void (^) (AuthenticationStatus authenticationStatus, NSString *errorString, NSString *errorDetail)) complete;
2222
@end
2323

2424
@interface Authentication : NSObject

sdk/IdpAuthentication.m

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ - (void) signupWithParameters: (NSDictionary *) parameters complete:(void (^) (A
5656
}
5757
}
5858

59-
- (void) finishLogin:(void (^) (AuthenticationStatus authenticationStatus, NSString *errorString)) complete {
59+
- (void) finishLogin:(void (^) (AuthenticationStatus authenticationStatus, NSString *errorString, NSString *errorDetail)) complete {
6060
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
6161
NSDictionary *api = [self.response objectForKey:@"api"];
6262

@@ -109,7 +109,7 @@ - (void) finishLogin:(void (^) (AuthenticationStatus authenticationStatus, NSStr
109109
[defaults synchronize];
110110
[StoredPassword persistTokenToKeyChain:token];
111111

112-
complete(AUTHENTICATION_SUCCESS, nil);
112+
complete(AUTHENTICATION_SUCCESS, nil, nil);
113113
}];
114114
}
115115

sdk/LdapAuthentication.m

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ - (void) loginWithParameters: (NSDictionary *) parameters complete:(void (^) (Au
8181
[manager addTask:task];
8282
}
8383

84-
- (void) finishLogin:(void (^) (AuthenticationStatus authenticationStatus, NSString *errorString)) complete {
84+
- (void) finishLogin:(void (^) (AuthenticationStatus authenticationStatus, NSString *errorString, NSString *errorDetail)) complete {
8585
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
8686
NSDictionary *api = [self.response objectForKey:@"api"];
8787

@@ -135,7 +135,7 @@ - (void) finishLogin:(void (^) (AuthenticationStatus authenticationStatus, NSStr
135135
[defaults synchronize];
136136
[StoredPassword persistTokenToKeyChain:token];
137137

138-
complete(AUTHENTICATION_SUCCESS, nil);
138+
complete(AUTHENTICATION_SUCCESS, nil, nil);
139139
}];
140140
}
141141

sdk/LocalAuthentication.m

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ - (void) loginWithParameters: (NSDictionary *) loginParameters complete:(void (^
5959
complete(AUTHENTICATION_ERROR, @"Error logging in");
6060
}
6161

62-
- (void) finishLogin:(void (^) (AuthenticationStatus authenticationStatus, NSString *errorString)) complete {
62+
- (void) finishLogin:(void (^) (AuthenticationStatus authenticationStatus, NSString *errorString, NSString *errorDetail)) complete {
6363
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
6464
NSDictionary *oldLoginParameters = [defaults objectForKey:@"loginParameters"];
6565

@@ -73,7 +73,7 @@ - (void) finishLogin:(void (^) (AuthenticationStatus authenticationStatus, NSStr
7373
[[UserUtility singleton] resetExpiration];
7474

7575
[MageSessionManager sharedManager].token = [oldLoginParameters objectForKey:@"token"];
76-
complete(AUTHENTICATION_SUCCESS, nil);
76+
complete(AUTHENTICATION_SUCCESS, nil, nil);
7777
}
7878

7979
@end

sdk/ServerAuthentication.m

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,9 @@ - (void) authorize:(NSDictionary *) parameters complete:(void (^) (Authenticatio
9797
NSMutableURLRequest *request = [manager.requestSerializer requestWithMethod:@"POST" URLString:url parameters:authorizeParameters error:nil];
9898
[request setValue:[NSString stringWithFormat:@"Bearer %@", token] forHTTPHeaderField:@"Authorization"];
9999
NSURLSessionDataTask *task = [manager dataTaskWithRequest:request uploadProgress:nil downloadProgress:nil completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) {
100+
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;
101+
100102
if (error) {
101-
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;
102103

103104
// if the error was a network error try to login with the local auth module
104105
if ([error.domain isEqualToString:NSURLErrorDomain]&& (error.code == NSURLErrorCannotConnectToHost|| error.code == NSURLErrorNotConnectedToInternet)) {
@@ -125,23 +126,27 @@ - (void) authorize:(NSDictionary *) parameters complete:(void (^) (Authenticatio
125126
return complete(AUTHENTICATION_ERROR, error.localizedDescription);
126127
}
127128
self.loginParameters = parameters;
128-
self.response = responseObject;
129+
130+
NSMutableDictionary *responseDictionary = [[NSMutableDictionary alloc] initWithDictionary:responseObject];
131+
responseDictionary[@"headers"] = [httpResponse allHeaderFields];
132+
133+
self.response = responseDictionary;
129134

130135
complete(AUTHENTICATION_SUCCESS, nil);
131136
}];
132137

133138
[manager addTask:task];
134139
}
135140

136-
- (void) finishLogin:(void (^) (AuthenticationStatus authenticationStatus, NSString *errorString)) complete {
141+
- (void) finishLogin:(void (^) (AuthenticationStatus authenticationStatus, NSString *errorString, NSString *errorDetail)) complete {
137142
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
138143
NSDictionary *api = [self.response objectForKey:@"api"];
139144

140145
if (self.response == nil) {
141-
complete(AUTHENTICATION_ERROR, @"Invalid server response");
146+
complete(AUTHENTICATION_ERROR, @"Invalid server response", nil);
142147
return;
143148
} else if (self.loginParameters == nil) {
144-
complete(AUTHENTICATION_ERROR, @"Server login error");
149+
complete(AUTHENTICATION_ERROR, @"Server login error", nil);
145150
return;
146151
}
147152

@@ -165,7 +170,8 @@ - (void) finishLogin:(void (^) (AuthenticationStatus authenticationStatus, NSStr
165170
if (tokenExpirationDate == nil) {
166171
failureMessage = [NSString stringWithFormat: @"%@Invalid Token Expiration Date<br>", failureMessage];
167172
}
168-
complete(AUTHENTICATION_ERROR, failureMessage);
173+
174+
complete(AUTHENTICATION_ERROR, failureMessage, [NSString stringWithFormat:@"Response Details %@", self.response]);
169175
return;
170176
}
171177

@@ -215,7 +221,7 @@ - (void) finishLogin:(void (^) (AuthenticationStatus authenticationStatus, NSStr
215221
[StoredPassword persistPasswordToKeyChain:password];
216222
[StoredPassword persistTokenToKeyChain:token];
217223

218-
complete(AUTHENTICATION_SUCCESS, nil);
224+
complete(AUTHENTICATION_SUCCESS, nil, nil);
219225
}];
220226
}
221227

0 commit comments

Comments
 (0)