API Docs for: 0.0.8
Show:

File: client/auth/lightbox/api.js

                        /* This Source Code Form is subject to the terms of the Mozilla Public
                         * License, v. 2.0. If a copy of the MPL was not distributed with this
                         * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
                        
                        /*globals define*/
                        
                        define([
                          'p-promise',
                          'client/lib/object',
                          'client/lib/options',
                          'client/lib/constants',
                          '../base/api',
                          './lightbox',
                          './iframe_channel'
                        ], function (p, ObjectHelpers, Options, Constants, BaseBroker,
                            Lightbox, IFrameChannel) {
                          'use strict';
                        
                          function getLightbox() {
                            //jshint validthis: true
                            var self = this;
                            if (self._lightbox) {
                              return self._lightbox;
                            }
                        
                            self._lightbox = new Lightbox({
                              window: self._window
                            });
                        
                            return self._lightbox;
                          }
                        
                          function openLightbox(fxaUrl, options) {
                            /*jshint validthis: true*/
                            var self = this;
                            return p().then(function() {
                              if (self._lightbox && self._lightbox.isLoaded()) {
                                throw new Error('lightbox already open');
                              }
                        
                              var lightbox = getLightbox.call(self);
                        
                              lightbox.load(fxaUrl, options);
                        
                              return lightbox;
                            });
                          }
                        
                          function getChannel(lightbox) {
                            //jshint validthis: true
                            var self = this;
                            if (self._channel) {
                              return self._channel;
                            }
                        
                            self._channel = new IFrameChannel({
                              iframeHost: self._contentHost,
                              contentWindow: lightbox.getContentWindow(),
                              window: self._window
                            });
                        
                            return self._channel;
                          }
                        
                          function waitForAuthentication(lightbox) {
                            /*jshint validthis: true*/
                            var self = this;
                            return p().then(function () {
                              var channel = getChannel.call(self, lightbox);
                              return channel.attach();
                            });
                          }
                        
                          /**
                           * Authenticate users with a lightbox
                           *
                           * @class LightboxBroker
                           * @extends BaseBroker
                           * @constructor
                           * @param {string} clientId - the OAuth client ID for the relier
                           * @param {Object} [options={}] - configuration
                           *   @param {String} [options.contentHost]
                           *   Firefox Accounts Content Server host
                           *   @param {String} [options.oauthHost]
                           *   Firefox Accounts OAuth Server host
                           *   @param {Object} [options.window]
                           *   window override, used for unit tests
                           *   @param {Object} [options.lightbox]
                           *   lightbox override, used for unit tests
                           *   @param {Object} [options.channel]
                           *   channel override, used for unit tests
                           */
                          function LightboxBroker(clientId, options) {
                            options = options || {};
                        
                            BaseBroker.call(this, clientId, options);
                        
                            this._lightbox = options.lightbox;
                            this._channel = options.channel;
                            this._contentHost = options.contentHost || Constants.DEFAULT_CONTENT_HOST;
                            this.setContext('iframe');
                          }
                          LightboxBroker.prototype = Object.create(BaseBroker.prototype);
                        
                          ObjectHelpers.extend(LightboxBroker.prototype, {
                            openFxa: function (fxaUrl, options) {
                              /*jshint validthis: true*/
                              var self = this;
                        
                              return openLightbox.call(self, fxaUrl, options)
                                .then(function (lightbox) {
                                  return waitForAuthentication.call(self, lightbox);
                                })
                                .then(function (result) {
                                  self.unload();
                                  return result;
                                }, function (err) {
                                  self.unload();
                                  throw err;
                                });
                            },
                        
                            /**
                             * Unload the lightbox
                             *
                             * @method unload
                             */
                            unload: function () {
                              var self = this;
                              return p().then(function () {
                                if (! self._lightbox) {
                                  throw new Error('lightbox not open');
                                }
                        
                                self._lightbox.unload();
                                self._channel.detach();
                              });
                            }
                          });
                        
                          return LightboxBroker;
                        });