From 21d3023a9b7b6aff68c1170e345951396b1c6cfd Mon Sep 17 00:00:00 2001
From: 单军华
Date: Tue, 31 Jul 2018 13:35:21 +0800
Subject: [PATCH] no message

---
 screendisplay/Pods/ASIHTTPRequest/Classes/ASIAuthenticationDialog.m |  520 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 520 insertions(+), 0 deletions(-)

diff --git a/screendisplay/Pods/ASIHTTPRequest/Classes/ASIAuthenticationDialog.m b/screendisplay/Pods/ASIHTTPRequest/Classes/ASIAuthenticationDialog.m
new file mode 100755
index 0000000..7fb612e
--- /dev/null
+++ b/screendisplay/Pods/ASIHTTPRequest/Classes/ASIAuthenticationDialog.m
@@ -0,0 +1,520 @@
+//
+//  ASIAuthenticationDialog.m
+//  Part of ASIHTTPRequest -> http://allseeing-i.com/ASIHTTPRequest
+//
+//  Created by Ben Copsey on 21/08/2009.
+//  Copyright 2009 All-Seeing Interactive. All rights reserved.
+//
+
+#import "ASIAuthenticationDialog.h"
+#import "ASIHTTPRequest.h"
+#import <QuartzCore/QuartzCore.h>
+
+static ASIAuthenticationDialog *sharedDialog = nil;
+BOOL isDismissing = NO;
+static NSMutableArray *requestsNeedingAuthentication = nil;
+
+static const NSUInteger kUsernameRow = 0;
+static const NSUInteger kUsernameSection = 0;
+static const NSUInteger kPasswordRow = 1;
+static const NSUInteger kPasswordSection = 0;
+static const NSUInteger kDomainRow = 0;
+static const NSUInteger kDomainSection = 1;
+
+
+@implementation ASIAutorotatingViewController
+
+- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
+{
+	return YES;
+}
+
+@end
+
+
+@interface ASIAuthenticationDialog ()
+- (void)showTitle;
+- (void)show;
+- (NSArray *)requestsRequiringTheseCredentials;
+- (void)presentNextDialog;
+- (void)keyboardWillShow:(NSNotification *)notification;
+- (void)orientationChanged:(NSNotification *)notification;
+- (void)cancelAuthenticationFromDialog:(id)sender;
+- (void)loginWithCredentialsFromDialog:(id)sender;
+@property (retain) UITableView *tableView;
+@end
+
+@implementation ASIAuthenticationDialog
+
+#pragma mark init / dealloc
+
++ (void)initialize
+{
+	if (self == [ASIAuthenticationDialog class]) {
+		requestsNeedingAuthentication = [[NSMutableArray array] retain];
+	}
+}
+
++ (void)presentAuthenticationDialogForRequest:(ASIHTTPRequest *)theRequest
+{
+	// No need for a lock here, this will always be called on the main thread
+	if (!sharedDialog) {
+		sharedDialog = [[self alloc] init];
+		[sharedDialog setRequest:theRequest];
+		if ([theRequest authenticationNeeded] == ASIProxyAuthenticationNeeded) {
+			[sharedDialog setType:ASIProxyAuthenticationType];
+		} else {
+			[sharedDialog setType:ASIStandardAuthenticationType];
+		}
+		[sharedDialog show];
+	} else {
+		[requestsNeedingAuthentication addObject:theRequest];
+	}
+}
+
+- (id)init
+{
+	if ((self = [self initWithNibName:nil bundle:nil])) {
+		[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
+
+#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_3_2
+		if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
+#endif
+			if (![UIDevice currentDevice].generatesDeviceOrientationNotifications) {
+				[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
+				[self setDidEnableRotationNotifications:YES];
+			}
+			[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged:) name:UIDeviceOrientationDidChangeNotification object:nil];
+#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_3_2
+		}
+#endif
+	}
+	return self;
+}
+
+- (void)dealloc
+{
+	if ([self didEnableRotationNotifications]) {
+		[[NSNotificationCenter defaultCenter] removeObserver:self name:UIDeviceOrientationDidChangeNotification object:nil];
+	}
+	[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil];
+
+	[request release];
+	[tableView release];
+	[presentingController.view removeFromSuperview];
+	[presentingController release];
+	[super dealloc];
+}
+
+#pragma mark keyboard notifications
+
+- (void)keyboardWillShow:(NSNotification *)notification
+{
+#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_3_2
+	if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
+#endif
+#if __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_3_2
+		NSValue *keyboardBoundsValue = [[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey];
+#else
+		NSValue *keyboardBoundsValue = [[notification userInfo] objectForKey:UIKeyboardBoundsUserInfoKey];
+#endif
+		CGRect keyboardBounds;
+		[keyboardBoundsValue getValue:&keyboardBounds];
+		UIEdgeInsets e = UIEdgeInsetsMake(0, 0, keyboardBounds.size.height, 0);
+		[[self tableView] setScrollIndicatorInsets:e];
+		[[self tableView] setContentInset:e];
+#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_3_2
+	}
+#endif
+}
+
+// Manually handles orientation changes on iPhone
+- (void)orientationChanged:(NSNotification *)notification
+{
+	[self showTitle];
+	
+	UIInterfaceOrientation o = (UIInterfaceOrientation)[[UIApplication sharedApplication] statusBarOrientation];
+	CGFloat angle = 0;
+	switch (o) {
+		case UIDeviceOrientationLandscapeLeft: angle = 90; break;
+		case UIDeviceOrientationLandscapeRight: angle = -90; break;
+		case UIDeviceOrientationPortraitUpsideDown: angle = 180; break;
+		default: break;
+	}
+
+	CGRect f = [[UIScreen mainScreen] applicationFrame];
+
+	// Swap the frame height and width if necessary
+ 	if (UIDeviceOrientationIsLandscape(o)) {
+		CGFloat t;
+		t = f.size.width;
+		f.size.width = f.size.height;
+		f.size.height = t;
+	}
+
+	CGAffineTransform previousTransform = self.view.layer.affineTransform;
+	CGAffineTransform newTransform = CGAffineTransformMakeRotation((CGFloat)(angle * M_PI / 180.0));
+
+	// Reset the transform so we can set the size
+	self.view.layer.affineTransform = CGAffineTransformIdentity;
+	self.view.frame = (CGRect){ { 0, 0 }, f.size};
+
+	// Revert to the previous transform for correct animation
+	self.view.layer.affineTransform = previousTransform;
+
+	[UIView beginAnimations:nil context:NULL];
+	[UIView setAnimationDuration:0.3];
+
+	// Set the new transform
+	self.view.layer.affineTransform = newTransform;
+
+	// Fix the view origin
+	self.view.frame = (CGRect){ { f.origin.x, f.origin.y },self.view.frame.size};
+    [UIView commitAnimations];
+}
+		 
+#pragma mark utilities
+
+- (UIViewController *)presentingController
+{
+	if (!presentingController) {
+		presentingController = [[ASIAutorotatingViewController alloc] initWithNibName:nil bundle:nil];
+
+		// Attach to the window, but don't interfere.
+		UIWindow *window = [[[UIApplication sharedApplication] windows] objectAtIndex:0];
+		[window addSubview:[presentingController view]];
+		[[presentingController view] setFrame:CGRectZero];
+		[[presentingController view] setUserInteractionEnabled:NO];
+	}
+
+	return presentingController;
+}
+
+- (UITextField *)textFieldInRow:(NSUInteger)row section:(NSUInteger)section
+{
+	return [[[[[self tableView] cellForRowAtIndexPath:
+			   [NSIndexPath indexPathForRow:row inSection:section]]
+			  contentView] subviews] objectAtIndex:0];
+}
+
+- (UITextField *)usernameField
+{
+	return [self textFieldInRow:kUsernameRow section:kUsernameSection];
+}
+
+- (UITextField *)passwordField
+{
+	return [self textFieldInRow:kPasswordRow section:kPasswordSection];
+}
+
+- (UITextField *)domainField
+{
+	return [self textFieldInRow:kDomainRow section:kDomainSection];
+}
+
+#pragma mark show / dismiss
+
++ (void)dismiss
+{
+    UIViewController* dismisser = nil;
+    if ([sharedDialog respondsToSelector:@selector(presentingViewController)]){
+        dismisser = [sharedDialog presentingViewController];
+    }else{
+        dismisser = [sharedDialog parentViewController];
+    }
+    if([dismisser respondsToSelector:@selector(dismissViewControllerAnimated:completion:)]){
+        [dismisser dismissViewControllerAnimated:YES completion:nil];
+    }else{
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+        [dismisser dismissModalViewControllerAnimated:YES];
+#pragma clang diagnostic pop
+    }
+}
+
+- (void)viewDidDisappear:(BOOL)animated
+{
+	[self retain];
+	[sharedDialog release];
+	sharedDialog = nil;
+	[self performSelector:@selector(presentNextDialog) withObject:nil afterDelay:0];
+	[self release];
+}
+
+- (void)dismiss
+{
+	if (self == sharedDialog) {
+		[[self class] dismiss];
+	} else {
+        UIViewController* dismisser = nil;
+		if ([self respondsToSelector:@selector(presentingViewController)]){
+            dismisser = [self presentingViewController];
+        }else{
+            dismisser = [self parentViewController];
+        }
+        if([dismisser respondsToSelector:@selector(dismissViewControllerAnimated:completion:)]){
+            [dismisser dismissViewControllerAnimated:YES completion:nil];
+        }else{
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+            [dismisser dismissModalViewControllerAnimated:YES];
+#pragma clang diagnostic pop
+        }
+	}
+}
+
+- (void)showTitle
+{
+	UINavigationBar *navigationBar = [[[self view] subviews] objectAtIndex:0];
+	UINavigationItem *navItem = [[navigationBar items] objectAtIndex:0];
+	if (UIInterfaceOrientationIsPortrait([[UIDevice currentDevice] orientation])) {
+		// Setup the title
+		if ([self type] == ASIProxyAuthenticationType) {
+			[navItem setPrompt:@"Login to this secure proxy server."];
+		} else {
+			[navItem setPrompt:@"Login to this secure server."];
+		}
+	} else {
+		[navItem setPrompt:nil];
+	}
+	[navigationBar sizeToFit];
+	CGRect f = [[self view] bounds];
+	f.origin.y = [navigationBar frame].size.height;
+	f.size.height -= f.origin.y;
+	[[self tableView] setFrame:f];
+}
+
+- (void)show
+{
+	// Remove all subviews
+	UIView *v;
+	while ((v = [[[self view] subviews] lastObject])) {
+		[v removeFromSuperview];
+	}
+
+	// Setup toolbar
+	UINavigationBar *bar = [[[UINavigationBar alloc] init] autorelease];
+	[bar setAutoresizingMask:UIViewAutoresizingFlexibleWidth];
+
+	UINavigationItem *navItem = [[[UINavigationItem alloc] init] autorelease];
+	bar.items = [NSArray arrayWithObject:navItem];
+
+	[[self view] addSubview:bar];
+
+	[self showTitle];
+
+	// Setup toolbar buttons
+	if ([self type] == ASIProxyAuthenticationType) {
+		[navItem setTitle:[[self request] proxyHost]];
+	} else {
+		[navItem setTitle:[[[self request] url] host]];
+	}
+
+	[navItem setLeftBarButtonItem:[[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancelAuthenticationFromDialog:)] autorelease]];
+	[navItem setRightBarButtonItem:[[[UIBarButtonItem alloc] initWithTitle:@"Login" style:UIBarButtonItemStyleDone target:self action:@selector(loginWithCredentialsFromDialog:)] autorelease]];
+
+	// We show the login form in a table view, similar to Safari's authentication dialog
+	[bar sizeToFit];
+	CGRect f = [[self view] bounds];
+	f.origin.y = [bar frame].size.height;
+	f.size.height -= f.origin.y;
+
+	[self setTableView:[[[UITableView alloc] initWithFrame:f style:UITableViewStyleGrouped] autorelease]];
+	[[self tableView] setDelegate:self];
+	[[self tableView] setDataSource:self];
+	[[self tableView] setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight];
+	[[self view] addSubview:[self tableView]];
+
+	// Force reload the table content, and focus the first field to show the keyboard
+	[[self tableView] reloadData];
+	[[[[[self tableView] cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]].contentView subviews] objectAtIndex:0] becomeFirstResponder];
+
+#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_3_2
+	if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
+		[self setModalPresentationStyle:UIModalPresentationFormSheet];
+	}
+#endif
+
+    if([[self presentingController] respondsToSelector:@selector(presentViewController:animated:completion:)]){
+        [[self presentingController] presentViewController:self animated:YES completion:nil];
+    }else{
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+        [[self presentingController] presentModalViewController:self animated:YES];
+#pragma clang diagnostic pop
+    }
+}
+
+#pragma mark button callbacks
+
+- (void)cancelAuthenticationFromDialog:(id)sender
+{
+	for (ASIHTTPRequest *theRequest in [self requestsRequiringTheseCredentials]) {
+		[theRequest cancelAuthentication];
+		[requestsNeedingAuthentication removeObject:theRequest];
+	}
+	[self dismiss];
+}
+
+- (NSArray *)requestsRequiringTheseCredentials
+{
+	NSMutableArray *requestsRequiringTheseCredentials = [NSMutableArray array];
+	NSURL *requestURL = [[self request] url];
+	for (ASIHTTPRequest *otherRequest in requestsNeedingAuthentication) {
+		NSURL *theURL = [otherRequest url];
+		if (([otherRequest authenticationNeeded] == [[self request] authenticationNeeded]) && [[theURL host] isEqualToString:[requestURL host]] && ([theURL port] == [requestURL port] || ([requestURL port] && [[theURL port] isEqualToNumber:[requestURL port]])) && [[theURL scheme] isEqualToString:[requestURL scheme]] && ((![otherRequest authenticationRealm] && ![[self request] authenticationRealm]) || ([otherRequest authenticationRealm] && [[self request] authenticationRealm] && [[[self request] authenticationRealm] isEqualToString:[otherRequest authenticationRealm]]))) {
+			[requestsRequiringTheseCredentials addObject:otherRequest];
+		}
+	}
+	[requestsRequiringTheseCredentials addObject:[self request]];
+	return requestsRequiringTheseCredentials;
+}
+
+- (void)presentNextDialog
+{
+	if ([requestsNeedingAuthentication count]) {
+		ASIHTTPRequest *nextRequest = [requestsNeedingAuthentication objectAtIndex:0];
+		[requestsNeedingAuthentication removeObjectAtIndex:0];
+		[[self class] presentAuthenticationDialogForRequest:nextRequest];
+	}
+}
+
+
+- (void)loginWithCredentialsFromDialog:(id)sender
+{
+	for (ASIHTTPRequest *theRequest in [self requestsRequiringTheseCredentials]) {
+
+		NSString *username = [[self usernameField] text];
+		NSString *password = [[self passwordField] text];
+
+		if (username == nil) { username = @""; }
+		if (password == nil) { password = @""; }
+
+		if ([self type] == ASIProxyAuthenticationType) {
+			[theRequest setProxyUsername:username];
+			[theRequest setProxyPassword:password];
+		} else {
+			[theRequest setUsername:username];
+			[theRequest setPassword:password];
+		}
+
+		// Handle NTLM domains
+		NSString *scheme = ([self type] == ASIStandardAuthenticationType) ? [[self request] authenticationScheme] : [[self request] proxyAuthenticationScheme];
+		if ([scheme isEqualToString:(NSString *)kCFHTTPAuthenticationSchemeNTLM]) {
+			NSString *domain = [[self domainField] text];
+			if ([self type] == ASIProxyAuthenticationType) {
+				[theRequest setProxyDomain:domain];
+			} else {
+				[theRequest setDomain:domain];
+			}
+		}
+
+		[theRequest retryUsingSuppliedCredentials];
+		[requestsNeedingAuthentication removeObject:theRequest];
+	}
+	[self dismiss];
+}
+
+#pragma mark table view data source
+
+- (NSInteger)numberOfSectionsInTableView:(UITableView *)aTableView
+{
+	NSString *scheme = ([self type] == ASIStandardAuthenticationType) ? [[self request] authenticationScheme] : [[self request] proxyAuthenticationScheme];
+	if ([scheme isEqualToString:(NSString *)kCFHTTPAuthenticationSchemeNTLM]) {
+		return 2;
+	}
+	return 1;
+}
+
+- (CGFloat)tableView:(UITableView *)aTableView heightForFooterInSection:(NSInteger)section
+{
+	if (section == [self numberOfSectionsInTableView:aTableView]-1) {
+		return 30;
+	}
+	return 0;
+}
+
+- (CGFloat)tableView:(UITableView *)aTableView heightForHeaderInSection:(NSInteger)section
+{
+	if (section == 0) {
+#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_3_2
+		if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
+			return 54;
+		}
+#endif
+		return 30;
+	}
+	return 0;
+}
+
+- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
+{
+	if (section == 0) {
+		return [[self request] authenticationRealm];
+	}
+	return nil;
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
+{
+#if __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_3_0
+	UITableViewCell *cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil] autorelease];
+#else
+	UITableViewCell *cell = [[[UITableViewCell alloc] initWithFrame:CGRectMake(0,0,0,0) reuseIdentifier:nil] autorelease];
+#endif
+
+	[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
+
+	CGRect f = CGRectInset([cell bounds], 10, 10);
+	UITextField *textField = [[[UITextField alloc] initWithFrame:f] autorelease];
+	[textField setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight];
+	[textField setAutocapitalizationType:UITextAutocapitalizationTypeNone];
+	[textField setAutocorrectionType:UITextAutocorrectionTypeNo];
+
+	NSUInteger s = [indexPath section];
+	NSUInteger r = [indexPath row];
+
+	if (s == kUsernameSection && r == kUsernameRow) {
+		[textField setPlaceholder:@"User"];
+	} else if (s == kPasswordSection && r == kPasswordRow) {
+		[textField setPlaceholder:@"Password"];
+		[textField setSecureTextEntry:YES];
+	} else if (s == kDomainSection && r == kDomainRow) {
+		[textField setPlaceholder:@"Domain"];
+	}
+	[cell.contentView addSubview:textField];
+
+	return cell;
+}
+
+- (NSInteger)tableView:(UITableView *)aTableView numberOfRowsInSection:(NSInteger)section
+{
+	if (section == 0) {
+		return 2;
+	} else {
+		return 1;
+	}
+}
+
+- (NSString *)tableView:(UITableView *)aTableView titleForFooterInSection:(NSInteger)section
+{
+	if (section == [self numberOfSectionsInTableView:aTableView]-1) {
+		// If we're using Basic authentication and the connection is not using SSL, we'll show the plain text message
+		if ([[[self request] authenticationScheme] isEqualToString:(NSString *)kCFHTTPAuthenticationSchemeBasic] && ![[[[self request] url] scheme] isEqualToString:@"https"]) {
+			return @"Password will be sent in the clear.";
+		// We are using Digest, NTLM, or any scheme over SSL
+		} else {
+			return @"Password will be sent securely.";
+		}
+	}
+	return nil;
+}
+
+#pragma mark -
+
+@synthesize request;
+@synthesize type;
+@synthesize tableView;
+@synthesize didEnableRotationNotifications;
+@synthesize presentingController;
+@end

--
Gitblit v1.8.0