| Index: remoting/webapp/crd/js/identity.js
|
| diff --git a/remoting/webapp/crd/js/identity.js b/remoting/webapp/crd/js/identity.js
|
| deleted file mode 100644
|
| index d53a0395d010e372a7eaf4ffc22a0dfa284fd7db..0000000000000000000000000000000000000000
|
| --- a/remoting/webapp/crd/js/identity.js
|
| +++ /dev/null
|
| @@ -1,247 +0,0 @@
|
| -// Copyright (c) 2012 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.
|
| -
|
| -/**
|
| - * @fileoverview
|
| - * Wrapper class for Chrome's identity API.
|
| - */
|
| -/** @suppress {duplicate} */
|
| -var remoting = remoting || {};
|
| -
|
| -(function(){
|
| -
|
| -'use strict';
|
| -
|
| -/**
|
| - * @type {remoting.Identity}
|
| - */
|
| -remoting.identity = null;
|
| -
|
| -var USER_CANCELLED = 'The user did not approve access.';
|
| -
|
| -/**
|
| - * @param {remoting.Identity.ConsentDialog=} opt_consentDialog
|
| - * @constructor
|
| - */
|
| -remoting.Identity = function(opt_consentDialog) {
|
| - /** @private */
|
| - this.consentDialog_ = opt_consentDialog;
|
| - /** @private {string} */
|
| - this.email_ = '';
|
| - /** @private {string} */
|
| - this.fullName_ = '';
|
| - /** @private {Object<base.Deferred<string>>} */
|
| - this.authTokensDeferred_ = {};
|
| - /** @private {boolean} */
|
| - this.interactive_ = false;
|
| -};
|
| -
|
| -/**
|
| - * chrome.identity.getAuthToken should be initiated from user interactions if
|
| - * called with interactive equals true. This interface prompts a dialog for
|
| - * the user's consent.
|
| - *
|
| - * @interface
|
| - */
|
| -remoting.Identity.ConsentDialog = function() {};
|
| -
|
| -/**
|
| - * @return {Promise} A Promise that resolves when permission to start an
|
| - * interactive flow is granted.
|
| - */
|
| -remoting.Identity.ConsentDialog.prototype.show = function() {};
|
| -
|
| -/**
|
| - * Gets an access token.
|
| - *
|
| - * @param {Array<string>=} opt_scopes Optional OAuth2 scopes to request. If not
|
| - * specified, the scopes specified in the manifest will be used. No consent
|
| - * prompt will be needed as long as the requested scopes are a subset of
|
| - * those already granted (in most cases, the remoting.Application framework
|
| - * ensures that the scopes specified in the manifest are already authorized
|
| - * before any application code is executed). Callers can request scopes not
|
| - * specified in the manifest, but a consent prompt will be shown.
|
| - *
|
| - * @return {!Promise<string>} A promise resolved with an access token
|
| - * or rejected with a remoting.Error.
|
| - */
|
| -remoting.Identity.prototype.getToken = function(opt_scopes) {
|
| - var key = getScopesKey(opt_scopes);
|
| - if (!this.authTokensDeferred_[key]) {
|
| - this.authTokensDeferred_[key] = new base.Deferred();
|
| - var options = {
|
| - 'interactive': this.interactive_,
|
| - 'scopes': opt_scopes
|
| - };
|
| - chrome.identity.getAuthToken(options,
|
| - this.onAuthComplete_.bind(this, opt_scopes));
|
| - }
|
| - return this.authTokensDeferred_[key].promise();
|
| -};
|
| -
|
| -/**
|
| - * Gets a fresh access token.
|
| - *
|
| - * @param {Array<string>=} opt_scopes Optional OAuth2 scopes to request, as
|
| - * documented in getToken().
|
| - * @return {!Promise<string>} A promise resolved with an access token
|
| - * or rejected with a remoting.Error.
|
| - */
|
| -remoting.Identity.prototype.getNewToken = function(opt_scopes) {
|
| - /** @type {remoting.Identity} */
|
| - var that = this;
|
| -
|
| - return this.getToken(opt_scopes).then(function(/** string */ token) {
|
| - return new Promise(function(resolve, reject) {
|
| - chrome.identity.removeCachedAuthToken({'token': token }, function() {
|
| - resolve(that.getToken());
|
| - });
|
| - });
|
| - });
|
| -};
|
| -
|
| -/**
|
| - * Removes the cached auth token, if any.
|
| - *
|
| - * @return {!Promise<null>} A promise resolved with the operation completes.
|
| - */
|
| -remoting.Identity.prototype.removeCachedAuthToken = function() {
|
| - return new Promise(function(resolve, reject) {
|
| - /** @param {string} token */
|
| - var onToken = function(token) {
|
| - if (token) {
|
| - chrome.identity.removeCachedAuthToken(
|
| - {'token': token}, resolve.bind(null, null));
|
| - } else {
|
| - resolve(null);
|
| - }
|
| - };
|
| - chrome.identity.getAuthToken({'interactive': false}, onToken);
|
| - });
|
| -};
|
| -
|
| -/**
|
| - * Gets the user's email address and full name. The full name will be
|
| - * null unless the webapp has requested and been granted the
|
| - * userinfo.profile permission.
|
| - *
|
| - * TODO(jrw): Type declarations say the name can't be null. Are the
|
| - * types wrong, or is the documentation wrong?
|
| - *
|
| - * @return {!Promise<{email:string, name:string}>} Promise
|
| - * resolved with the user's email address and full name, or rejected
|
| - * with a remoting.Error.
|
| - */
|
| -remoting.Identity.prototype.getUserInfo = function() {
|
| - if (this.isAuthenticated()) {
|
| - /**
|
| - * The temp variable is needed to work around a compiler bug.
|
| - * @type {{email: string, name: string}}
|
| - */
|
| - var result = {email: this.email_, name: this.fullName_};
|
| - return Promise.resolve(result);
|
| - }
|
| -
|
| - /** @type {remoting.Identity} */
|
| - var that = this;
|
| -
|
| - return this.getToken().then(function(token) {
|
| - return new Promise(function(resolve, reject) {
|
| - /**
|
| - * @param {string} email
|
| - * @param {string} name
|
| - */
|
| - var onResponse = function(email, name) {
|
| - that.email_ = email;
|
| - that.fullName_ = name;
|
| - resolve({email: email, name: name});
|
| - };
|
| -
|
| - remoting.oauth2Api.getUserInfo(onResponse, reject, token);
|
| - });
|
| - });
|
| -};
|
| -
|
| -/**
|
| - * Gets the user's email address.
|
| - *
|
| - * @return {!Promise<string>} Promise resolved with the user's email
|
| - * address or rejected with a remoting.Error.
|
| - */
|
| -remoting.Identity.prototype.getEmail = function() {
|
| - return this.getUserInfo().then(function(userInfo) {
|
| - return userInfo.email;
|
| - });
|
| -};
|
| -
|
| -/**
|
| - * Callback for the getAuthToken API.
|
| - *
|
| - * @param {Array<string>|undefined} scopes The explicit scopes passed to
|
| - * getToken, or undefined if no scopes were specified.
|
| - * @param {?string} token The auth token, or null if the request failed.
|
| - * @private
|
| - */
|
| -remoting.Identity.prototype.onAuthComplete_ = function(scopes, token) {
|
| - var key = getScopesKey(scopes);
|
| - var authTokenDeferred = this.authTokensDeferred_[key];
|
| -
|
| - // Pass the token to the callback(s) if it was retrieved successfully.
|
| - if (token) {
|
| - var promise = this.authTokensDeferred_[key];
|
| - delete this.authTokensDeferred_[key];
|
| - promise.resolve(token);
|
| - return;
|
| - }
|
| -
|
| - // If not, pass an error back to the callback(s) if we've already prompted the
|
| - // user for permission.
|
| - if (this.interactive_) {
|
| - var error_message =
|
| - chrome.runtime.lastError ? chrome.runtime.lastError.message
|
| - : 'Unknown error.';
|
| - console.error(error_message);
|
| - var error = (error_message == USER_CANCELLED) ?
|
| - new remoting.Error(remoting.Error.Tag.CANCELLED) :
|
| - new remoting.Error(remoting.Error.Tag.NOT_AUTHENTICATED);
|
| - this.authTokensDeferred_[key].reject(error);
|
| - delete this.authTokensDeferred_[key];
|
| - return;
|
| - }
|
| -
|
| - // If there's no token, but we haven't yet prompted for permission, do so
|
| - // now.
|
| - var that = this;
|
| - var showConsentDialog =
|
| - (this.consentDialog_) ? this.consentDialog_.show() : Promise.resolve();
|
| - showConsentDialog.then(function() {
|
| - that.interactive_ = true;
|
| - var options = {
|
| - 'interactive': that.interactive_,
|
| - 'scopes': scopes
|
| - };
|
| - chrome.identity.getAuthToken(options,
|
| - that.onAuthComplete_.bind(that, scopes));
|
| - });
|
| -};
|
| -
|
| -/**
|
| - * Returns whether the web app has authenticated with the Google services.
|
| - *
|
| - * @return {boolean}
|
| - */
|
| -remoting.Identity.prototype.isAuthenticated = function() {
|
| - return remoting.identity.email_ !== '';
|
| -};
|
| -
|
| -
|
| -/**
|
| - * @param {Array<string>=} opt_scopes
|
| - * @return {string}
|
| - */
|
| -function getScopesKey(opt_scopes) {
|
| - return opt_scopes ? JSON.stringify(opt_scopes) : '';
|
| -}
|
| -
|
| -})();
|
|
|