Skip to content

Automatic redirect to provider in passport case

Meghna Joshi edited this page Dec 18, 2019 · 1 revision
  1. Add provider in getPageForStep in your passport interception script 1-getpageforstep

  2. Add provider in prepareForStep in your passport interception script 2-Prepareforstep

  3. Add one page passportfront.xhtml which has javascript code to click on the button and redirect you to your provider. Create passportfront.xhtml with below content and put it on /opt/gluu-server/opt/gluu/jetty/oxauth/custom/pages path.

<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
                xmlns:f="http://xmlns.jcp.org/jsf/core"
                xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
                xmlns:h="http://xmlns.jcp.org/jsf/html"
                template="/WEB-INF/incl/layout/front-template.xhtml">
    <f:metadata>
        <f:viewAction action="#{authenticator.prepareAuthenticationForStep}" if="#{not identity.loggedIn}"/>
    </f:metadata>
    <ui:define name="head">
        <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
    </ui:define>
    <ui:define name="pageTitle">icrypto Login</ui:define>
    <ui:define name="body">

        <div class="row">
            <div class="col-xs-12 col-md-6">
                <div>

                    <div>
                        <h:form id="loginForm">
                            <h:panelGroup rendered="#{not identity.loggedIn}">
                                <p class="text-danger errormsg" style="display: none"></p>
                                <h:inputHidden id="provider"/>
                                <div class="row form-group" style="display: none">
                                    <h:messages class="text-danger"/>
                                    <span class="input-name col-md-3"> <h:outputLabel
                                            for="username" value="#{msgs['login.username']}"/>
								</span>
                                    <div class="col-md-6">
                                        <h:inputText id="username" value="#{credentials.username}"
                                                     autocomplete="off" class="form-control usernameField"/>
                                    </div>
                                </div>

                                <div class="row form-group" style="display: none">
								<span class="input-name col-md-3"> <h:outputLabel
                                        for="password" value="#{msgs['login.password']}"/>
								</span>
                                    <div class="col-md-6">
                                        <h:inputSecret id="password" value="#{credentials.password}"
                                                       autocomplete="off" class="form-control passwordField"/>

                                    </div>
                                </div>
                                <div class="row form-group" style="display: none">
                                    <h:outputLabel styleClass="col-sm-3 control-label"
                                                   for="rememberme" value="#{msgs['login.rememberMe']}"/>
                                    <div class="col-sm-6">
                                        <input type="checkbox" value="rememberme" id="rememberme"
                                               class="rememberField"/>
                                    </div>
                                </div>

                                <div class="row form-group" style="display: none">
                                    <div id="submit_block" class="col-md-offset-3 col-md-3">
                                        <h:commandButton id="loginButton"
                                                         value="#{msgs['login.login']}" onclick="checkRememberMe();"
                                                         action="#{authenticator.authenticate}"
                                                         class="btn btn-login"/>
                                    </div>
                                </div>

                                <div class="row" style="display: none">
                                    <div class="col-md-offset-3 col-md-6">
                                        <a href="/identity/person/passwordReminder.htm">#{msgs['passport.forgotYourPassword']}</a>
                                    </div>
                                </div>
                                <h:panelGroup rendered='#{!empty client.getPolicyUri()}'>
                                    <p>
                                        <h:outputText value="#{msgs['common.agreePolicy']}"/>
                                        <a target="_blank" href='#{client.getPolicyUri()}'>
                                            <h:outputText
                                                    value="#{msgs['common.privacyPolicy']}"/>
                                        </a>
                                    </p>
                                </h:panelGroup>
                                <h:panelGroup rendered='#{!empty client.getTosUri()}'>
                                    <p>
                                        <h:outputText value="#{msgs['common.pleaseReadTheTos']}"/>
                                        <a target="_blank" href='#{client.getTosUri()}'>
                                            <h:outputText
                                                    value="#{msgs['common.termsOfService']}"/>
                                        </a>
                                    </p>
                                </h:panelGroup>
                                <h:panelGroup
                                        rendered="#{external_auth_request_uri != Null or external_registration_uri != Null}">
                                    <li class="row-fluid submit-container">
                                        <div class="gradient contact-button green span2 offset3"
                                             style="width: 320px;">
                                            <h:panelGroup
                                                    rendered="#{external_auth_request_uri != Null}">
                                                <a id="externalAuthButton"
                                                   href="#{external_auth_request_uri}"> <input
                                                        type="button"
                                                        value="#{msgs['passport.useExternalAuthentication']}"/>
                                                </a>
                                            </h:panelGroup>
                                            <h:panelGroup
                                                    rendered="#{external_registration_uri != Null}">
                                                <a id="externalRegistrationButton"
                                                   href="#{external_registration_uri}"> <input
                                                        type="button" style="width: 220px;"
                                                        value="#{msgs['passport.registerNewUser']}"/>
                                                </a>
                                            </h:panelGroup>
                                        </div>
                                    </li>
                                </h:panelGroup>
                            </h:panelGroup>
                        </h:form>
                    </div>
                </div>
            </div>

            <div class="col-xs-12 col-md-6" style="display: none">
                <div visibility="hidden" id="provider_panel">
                    <div class="panel panel-default panel-order">
                        <div class="panel-heading">External Providers</div>
                        <div class="panel-body" id="add_here">

                            <div id="signinButton"></div>

                        </div>
                    </div>
                </div>
            </div>
        </div>


        <form id="providerForm" method="post">

            <input type="hidden" id="Hidden_ProviderType" name="Hidden_ProviderType"
                   value="#{identity.getWorkingParameter('provider_type')}"/>
            <input type="hidden" id="Hidden_Provider" name="Hidden_Provider"
                   value="#{identity.getWorkingParameter('provider')}"/>

        </form>

        <script type="text/javascript">
          //<![CDATA[
          var helper = (function () {

            var provider = $("#Hidden_Provider").val();
            //alert(provider);
            if (typeof (provider) != "undefined" && provider != null && provider != "") {
              idp_redirect(provider);
            }
          })();

          function idp_redirect(provider) {
            var form = document.forms.loginForm;
            form["loginForm:provider"].value = provider;
            form["loginForm:loginButton"].click();
          }

          //]]>
        </script>
    </ui:define>
</ui:composition>