| Index: remoting/ios/authorize.mm
|
| diff --git a/remoting/ios/authorize.mm b/remoting/ios/authorize.mm
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..92f467c648527dd2e6cc493c02c4f19bd6d201ed
|
| --- /dev/null
|
| +++ b/remoting/ios/authorize.mm
|
| @@ -0,0 +1,123 @@
|
| +// Copyright 2014 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#if !defined(__has_feature) || !__has_feature(objc_arc)
|
| +#error "This file requires ARC support."
|
| +#endif
|
| +
|
| +#import "remoting/ios/authorize.h"
|
| +
|
| +// TODO (aboone) This include is for The Google Toolbox for Mac OAuth 2
|
| +// Controllers https://code.google.com/p/gtm-oauth2/ This may need to be added
|
| +// as a third-party or locate the proper project in Chromium.
|
| +#import "GTMOAuth2ViewControllerTouch.h"
|
| +
|
| +#include "google_apis/google_api_keys.h"
|
| +// TODO (aboone) Pulling in some service values from the host side. The cc's
|
| +// are also compiled as part of this project because the target remoting_host
|
| +// does not build on iOS right now.
|
| +#include "remoting/host/service_urls.h"
|
| +#include "remoting/host/setup/oauth_helper.h"
|
| +
|
| +namespace {
|
| +static NSString* const kKeychainItemName = @"Google Chromoting iOS";
|
| +
|
| +NSString* ClientId() {
|
| + return
|
| + [NSString stringWithUTF8String:google_apis::GetOAuth2ClientID(
|
| + google_apis::CLIENT_REMOTING).c_str()];
|
| +}
|
| +
|
| +NSString* ClientSecret() {
|
| + return
|
| + [NSString stringWithUTF8String:google_apis::GetOAuth2ClientSecret(
|
| + google_apis::CLIENT_REMOTING).c_str()];
|
| +}
|
| +
|
| +NSString* Scopes() {
|
| + return [NSString stringWithUTF8String:remoting::GetOauthScope().c_str()];
|
| +}
|
| +
|
| +NSMutableString* HostURL() {
|
| + return
|
| + [NSMutableString stringWithUTF8String:remoting::ServiceUrls::GetInstance()
|
| + ->directory_hosts_url()
|
| + .c_str()];
|
| +}
|
| +
|
| +NSString* APIKey() {
|
| + return [NSString stringWithUTF8String:google_apis::GetAPIKey().c_str()];
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +@implementation Authorize
|
| +
|
| ++ (GTMOAuth2Authentication*)getAnyExistingAuthorization {
|
| + // Ensure the google_apis lib has keys
|
| + // If this check fails then google_apis was not built right
|
| + // TODO (aboone) For now we specify the preprocessor macros for
|
| + // GOOGLE_CLIENT_SECRET_REMOTING and GOOGLE_CLIENT_ID_REMOTING when building
|
| + // the google_apis target. The values may be developer specific, and should
|
| + // be well know to the project staff.
|
| + // See http://www.chromium.org/developers/how-tos/api-keys for more general
|
| + // information.
|
| + DCHECK(![ClientId() isEqualToString:@"dummytoken"]);
|
| +
|
| + return [GTMOAuth2ViewControllerTouch
|
| + authForGoogleFromKeychainForName:kKeychainItemName
|
| + clientID:ClientId()
|
| + clientSecret:ClientSecret()];
|
| +}
|
| +
|
| ++ (void)beginRequest:(GTMOAuth2Authentication*)authReq
|
| + delegate:(id)delegate
|
| + didFinishSelector:(SEL)sel {
|
| + // Build request URL using API HTTP endpoint, and our api key
|
| + NSMutableString* hostsUrl = HostURL();
|
| + [hostsUrl appendString:@"?key="];
|
| + [hostsUrl appendString:APIKey()];
|
| +
|
| + NSMutableURLRequest* theRequest =
|
| + [NSMutableURLRequest requestWithURL:[NSURL URLWithString:hostsUrl]];
|
| +
|
| + // Add scopes if needed
|
| + NSString* scope = authReq.scope;
|
| +
|
| + if ([scope rangeOfString:Scopes()].location == NSNotFound) {
|
| + scope = [GTMOAuth2Authentication scopeWithStrings:scope, Scopes(), nil];
|
| + authReq.scope = scope;
|
| + }
|
| +
|
| + // Execute request async
|
| + [authReq authorizeRequest:theRequest delegate:delegate didFinishSelector:sel];
|
| +}
|
| +
|
| ++ (void)appendCredentials:(NSMutableURLRequest*)request {
|
| + // Add credentials for service
|
| + [request addValue:ClientId() forHTTPHeaderField:@"client_id"];
|
| + [request addValue:ClientSecret() forHTTPHeaderField:@"client_secret"];
|
| +}
|
| +
|
| ++ (UINavigationController*)createLoginController:(id)delegate
|
| + finishedSelector:(SEL)finishedSelector {
|
| + [GTMOAuth2ViewControllerTouch
|
| + removeAuthFromKeychainForName:kKeychainItemName];
|
| +
|
| + // When the sign in is complete a http redirection occurs, and the
|
| + // user would see the output. We do not want the user to notice this
|
| + // transition. Wrapping the oAuth2 Controller in a
|
| + // UINavigationController causes the view to render as a blank/black
|
| + // page when a http redirection occurs.
|
| + return [[UINavigationController alloc]
|
| + initWithRootViewController:[[GTMOAuth2ViewControllerTouch alloc]
|
| + initWithScope:Scopes()
|
| + clientID:ClientId()
|
| + clientSecret:ClientSecret()
|
| + keychainItemName:kKeychainItemName
|
| + delegate:delegate
|
| + finishedSelector:finishedSelector]];
|
| +}
|
| +
|
| +@end
|
|
|