docs: function (auth) {
          var host = window.location;
          var pathname = location.pathname.substring(0, location.pathname.lastIndexOf('/'));
          var defaultRedirectUrl = host.protocol + '//' + host.host + pathname + '/o2c.html';
          var redirectUrl = window.oAuthRedirectUrl || defaultRedirectUrl;
          var url = null;
          var scopes = _.map(auth.get('scopes'), function (scope) {
              if(scope.checked) {
                  return scope.scope;
              }
          });
          var container = window.swaggerUiAuth || (window.swaggerUiAuth = {});
          var state, dets, ep;
          container.OAuthSchemeKey = auth.get('title');
  
          window.enabledScopes = scopes;
          var flow = auth.get('flow');
  
          /**
           * Returns the name of the access token parameter returned by the server.
           *
           * @param dets
           *     The authorisation scheme configuration.
           * @return the name of the access token parameter
           */
          function getTokenName(dets) {
              return dets.vendorExtensions['x-tokenName'] || dets.tokenName;
          }
  
          if(auth.get('type') === 'oauth2' && flow && (flow === 'implicit' || flow === 'accessCode')) {
              dets = auth.attributes;
              url = dets.authorizationUrl + '?response_type=' + (flow === 'implicit' ? 'token' : 'code');
              container.tokenName = getTokenName(dets) || 'access_token';
              container.tokenUrl = (flow === 'accessCode' ? dets.tokenUrl : null);
              state = container.OAuthSchemeKey;
          }
          else if(auth.get('type') === 'oauth2' && flow && (flow === 'application')) {
              dets = auth.attributes;
              container.tokenName = getTokenName(dets) || 'access_token';
              this.clientCredentialsFlow(scopes, dets, container.OAuthSchemeKey);
              return;
          }
          else if(auth.get('type') === 'oauth2' && flow && (flow === 'password')) {
              dets = auth.attributes;
              container.tokenName = getTokenName(dets) || 'access_token';
              this.passwordFlow(scopes, dets, container.OAuthSchemeKey);
              return;
          }
          else if(auth.get('grantTypes')) {
              // 1.2 support
              var o = auth.get('grantTypes');
              for(var t in o) {
                  if(o.hasOwnProperty(t) && t === 'implicit') {
                      dets = o[t];
                      ep = dets.loginEndpoint.url;
                      url = dets.loginEndpoint.url + '?response_type=token';
                      container.tokenName = getTokenName(dets);
                  }
                  else if (o.hasOwnProperty(t) && t === 'accessCode') {
                      dets = o[t];
                      ep = dets.tokenRequestEndpoint.url;
                      url = dets.tokenRequestEndpoint.url + '?response_type=code';
                      container.tokenName = getTokenName(dets);
                  }
              }
          }
  
          redirect_uri = redirectUrl;
  
          url += '&redirect_uri=' + encodeURIComponent(redirectUrl);
          url += '&realm=' + encodeURIComponent(realm);
          url += '&client_id=' + encodeURIComponent(clientId);
          url += '&scope=' + encodeURIComponent(scopes.join(scopeSeparator));
          url += '&state=' + encodeURIComponent(state);
          for (var key in additionalQueryStringParams) {
              url += '&' + key + '=' + encodeURIComponent(additionalQueryStringParams[key]);
          }
  
          window.open(url);
      }