IdP Selection Page Examples

On this page, we'll add some more examples of how to customize the IdP Selection Page Template in the app's Page Template section.

Page templates are using Velocity (http://velocity.apache.org/) and support HTML, CSS, JS, and images.
Images can only be embedded directly, as Base64 blobs. You can convert them here: https://www.base64-image.de/

Jira (IdP Buttons)

This is for Jira only, looks like the normal login page with IdPs added as Buttons

image2020-10-8_10-6-14.png
  1. <html>
  2. <head>
  3. <title>Select Identity Provider</title>
  4. $webResourceManager.requireResource("$pluginproperties.pluginkey:resources")
  5. <meta name="decorator" content="atl.general">
  6. </head>
  7. <body class="aui-layout aui-theme-default page-type-message">
  8. <section id="content" role="main">
  9. <div class="aui-page-panel">
  10. <div class="aui-page-panel-inner">
  11. <section class="aui-page-panel-content">
  12. <header class="aui-page-header">
  13. <div class="aui-page-header-inner">
  14. <div class="aui-page-header-main">
  15. <h1>Welcome to Jira</h1>
  16. </div>
  17. </div>
  18. </header>
  19. <form action="/login.jsp" class="aui" id="login-form" method="post">
  20. <div class="form-body">
  21. <div class="aui-group jira-login-method">
  22. <div class="aui-item jira-login-item">
  23. <div class="field-group">
  24. <label accesskey="u" for="login-form-username"><u>U</u>sername</label>
  25. <input class="text medium-field" id="login-form-username" name="os_username"
  26. type="text" value="">
  27. </div>
  28. <div class="field-group">
  29. <label accesskey="p" for="login-form-password" id="passwordlabel"><u>P</u>assword</label>
  30. <input id="login-form-password" class="text medium-field" name="os_password"
  31. type="password">
  32. </div>
  33. <fieldset class="group ">
  34. <div class="checkbox" resolved="">
  35. <input class="checkbox" id="login-form-remember-me" name="os_cookie"
  36. type="checkbox" value="true" resolved=""><span
  37. class="aui-form-glyph"></span>
  38. <label for="login-form-remember-me" accesskey="r"><u>R</u>emember my
  39. login on this computer</label>
  40. </div>
  41. </fieldset>
  42. <!-- // .group -->
  43. <div id="sign-up-hint" class="field-group">
  44. Not a member? To request an account, please contact your Jira
  45. administrators.
  46. </div>
  47. </div>
  48. </div>
  49. <div class="hidden">
  50. <input name="os_destination" id="redirect_to" type="hidden" >
  51. <script>
  52. const queryString = window.location.search;
  53. const urlParams = new URLSearchParams(queryString);
  54. if (urlParams.has('redirectTo')){
  55. document.getElementById('redirect_to').value = urlParams.get('redirectTo');
  56. }
  57. </script>
  58. </div>
  59. <div class="hidden">
  60. <input name="user_role" type="hidden">
  61. </div>
  62. <div class="hidden">
  63. <input name="atl_token" type="hidden">
  64. </div>
  65. </div>
  66. <div class="buttons-container form-footer">
  67. <div class="buttons">
  68. <input accesskey="s" class="aui-button aui-button-primary" id="login-form-submit"
  69. name="login" title="Press Ctrl+Alt+s to submit this form" type="submit"
  70. value="Log In" resolved="">
  71. <a accesskey="`" class="aui-button aui-button-link cancel"
  72. href="/secure/ForgotLoginDetails.jspa" id="login-form-cancel"
  73. title="Press Ctrl+Alt+` to cancel" resolved="">Can't access your account?</a>
  74. </div>
  75. </div>
  76. </form>
  77. </div>
  78. <div class="buttons-container form-footer">
  79. <div class="buttons" align="center">
  80. #foreach($idp in $idps)
  81. <button title="Click to login with $idp.name" class="aui-button"
  82. onclick="window.location.href = '$idp.ssoUrl';">Login with $idp.name
  83. </button>
  84. #end
  85. </div>
  86. <p> </p>
  87. </div>
  88. </form>
  89. <!-- // .aui #login-form -->
  90. </section>
  91. <!-- .aui-page-panel-content -->
  92. </div>
  93. <!-- .aui-page-panel-inner -->
  94. </div>
  95. <!-- .aui-page-panel -->
  96. </section>
  97. </div>
  98. </div>
  99. </section>
  100. </body>
  101. </html>


Template with embedded Images and CSS/ JS

image2020-10-8_10-4-58.png
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1">
  6. <title>Your page title</title>
  7. <script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
  8. <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
  9. <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
  10. <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
  11. <style type="text/css">
  12. body {
  13. background-image: url('data:image/png;base64,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');
  14. background-repeat: repeat;
  15. }
  16. * {
  17. font-family: 'Blue Sky Standard', sans-serif;
  18. }
  19. .content-container {
  20. /*margin-top: 120px;*/
  21. top: 30%;
  22. position: absolute;
  23. background-color: transparent !important;
  24. color: #fff;
  25. }
  26. .heading {
  27. font-size: 25px;
  28. font-weight: lighter;
  29. }
  30. .select-box {
  31. margin-top: 10px;
  32. max-width: 650px;
  33. padding: 0;
  34. color: #fff;
  35. background: rgba(256, 256, 256, 0.2);
  36. border-radius: 4px;
  37. font-weight: lighter;
  38. }
  39. .select-box > .inner-select:first-child {
  40. border-bottom: 1px solid #000;
  41. }
  42. .inner-select {
  43. padding: 30px;
  44. transition: 0.5s all;
  45. color: #fff;
  46. }
  47. .select-type {
  48. margin-bottom: 0;
  49. font-size: 15px;
  50. }
  51. .click {
  52. font-size: 10px;
  53. }
  54. .tab {
  55. padding: 0;
  56. }
  57. .inner-select:hover {
  58. cursor: pointer;
  59. background: rgba(256, 256, 256, 0.9);
  60. transition: 0.5s all;
  61. color: black;
  62. font-weight: normal;
  63. }
  64. .desc-container {
  65. padding: 0;
  66. max-width: 500px;
  67. }
  68. .description {
  69. font-size: smaller;
  70. font-weight: lighter;
  71. }
  72. .logo {
  73. width: 75px;
  74. }
  75. .logo-container {
  76. padding: 20px;
  77. }
  78. .arrow {
  79. padding: 7px 0;
  80. }
  81. .click-arrow {
  82. font-size: 25px;
  83. }
  84. </style>
  85. </head>
  86. <body>
  87. <div class="container-fluid">
  88. <div class="logo-container">
  89. <img src="data:image/png;base64,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" class="logo">
  90. </div>
  91. <div class="content-container col-sm-4 col-sm-offset-4">
  92. <h1 class="heading">Your heading</h1>
  93. #if($idpSelected)
  94. <p>Select or wait 3 seconds to use $selectedName <span class="aui-icon aui-icon-wait"></span></p>
  95. <script>
  96. var timeout = setTimeout("location.href = '$selectedUrl';", 3000);
  97. window.onclick= function () { clearTimeout(timeout); }
  98. </script>
  99. #end
  100. <div class="select-box col-xs-12">
  101. #foreach($idp in $idps)
  102. <a class="inner-select col-xs-12" href="$idp.ssoUrl">
  103. <div class="tab col-xs-11">
  104. <span class="select-type">$idp.name</span><br/>
  105. <span class="click">CLICK HERE</span>
  106. </div>
  107. <div class="arrow col-xs-1 pull-right">
  108. <i class="fa fa-angle-right click-arrow"></i>
  109. </div>
  110. </a>
  111. #end
  112. </div>
  113. <div class="select-box col-xs-12">
  114. <a class="inner-select col-xs-12" href="/login.jsp?nosso">
  115. <div class="tab col-xs-11">
  116. <span class="select-type">Login with local password</span><br/>
  117. <span class="click">CLICK HERE</span>
  118. </div>
  119. <div class="arrow col-xs-1 pull-right">
  120. <i class="fa fa-angle-right click-arrow"></i>
  121. </div>
  122. </a>
  123. </div>             <div class="desc-container col-xs-12">
  124. <h1 class="heading">Status</h1>
  125. <span class="description">More text to be displayed here</span>
  126. </div>
  127. </div>
  128. </div>
  129. </body>
  130. </html>

Change the decorator

Atlassian's applications support standard page decorators, allowing our plugin to generate new web pages with consistent decoration by the host application across the Atlassian products.

Default we are using the 'atl.general' decorator in our page templates. The general decorator can be used for the header and footer of general pages outside the administration UI.

atl.general decorator

general_decorator
general_decorator


If you want to remove the header and footer from the page, you need to change the decorator type. We will use the 'atl.popup' decorator for content that can be placed in a new browser popup window.

Just change the decorator type to hide the header and footer.

In the “IdP Selection Page Template”, replace the line:

  1. <meta name="decorator" content="atl.general">

to

  1. <meta name="decorator" content="atl.popup">
page_templates_popup
page_templates_popup

Look & Feel

general decorator

decorator_general_lf
decorator_general_lf
decorator_popup_lf
decorator_popup_lf

Click-thru Terms & Conditions Sign-up

Would it be possible to provide some kind of "Click-thru" agreement to a user which requires that they sign up to the terms of the site before getting general access?

For this scenario, we use the 'IdP Selection Page Template' (SAML Single Sign-On Plugin Configuration → Page Templates) and modify the default IdP Selection Page Template.

When a user now accesses Jira/Confluence for the first time, this page is displayed to him. By clicking "Okay", he will then be redirected to the first configured Identity Provider.

In doing so, we set a cookie that stores this. If the page is now visited a second time, it will be redirected directly to the Identity Provider as long as the cookie is still set.

So this means that each of your users will see this banner once (if the cookie is lost, the page is displayed again).


terms_of_service_idp_selection
terms_of_service_idp_selection

Below you will find the template, please use it in the Page Templates (IdP Selection Page) section. You can easily customize the text or button text to your needs, as well as the color via CSS.

  1. <html>
  2. <head>
  3. <title>Terms of Service</title>
  4. $webResourceManager.requireResource("$pluginproperties.pluginkey:resources")
  5. <meta name="decorator" content="atl.general">
  6. </head>
  7. <body class="aui-layout aui-theme-default page-type-message">
  8. <style>
  9. .alert {
  10. padding: 20px;
  11. background-color: #0000ff;
  12. color: white;
  13. }
  14. .closebtn {
  15. margin-left: 15px;
  16. color: white;
  17. font-weight: bold;
  18. float: right;
  19. font-size: 22px;
  20. line-height: 20px;
  21. cursor: pointer;
  22. transition: 0.3s;
  23. }
  24. .closebtn:hover {
  25. color: black;
  26. }
  27. </style>
  28. <div class="alert" id="message">
  29. Your data will be processed for things. You will see this message only once. Click 'Okay' to acknowledge and proceed.<br></br>
  30. <button onclick="function myFunction() {
  31. window.location.href = '$idps.get(0).ssoUrl'
  32. }
  33. myFunction()"
  34. type="button">
  35. Okay
  36. </button>
  37. #if($idpSelected)
  38. <script>
  39. document.getElementById("message").style.display = "none";
  40. window.location.href = '$idps.get(0).ssoUrl'
  41. </script>
  42. #end
  43. </div>
  44. </body>
  45. </html>

Multi-language IdP Selection Page

Would it be possible to have a multi-language version of the 'IdP Selection Page Template' (SAML Single Sign On Plugin Configuration → Page Templates)?

We currently don't have an option in the UI to support multi-language templates. However, you can use JavaScript inside the IdP Selection templates to achieve your goal.

SAML_Page_Template
SAML_Page_Template

Below you will find an example based on our default page template. Our example contains the languages German (de) and French (fr), however you can change or add the languages to your needs.

Multilanguage Template
  1. <html>
  2. <head>
  3. <title>Select Identity Provider</title>
  4. $webResourceManager.requireResource("com.atlassian.auiplugin:aui-spinner")
  5. $webResourceManager.requireResource("$pluginproperties.pluginkey:resources")
  6. <meta name="decorator" content="atl.general">
  7. </head>
  8. <body class="aui-layout aui-theme-default page-type-message" >
  9. <section id="content" role="main">
  10. <div class="aui-page-panel"><div class="aui-page-panel-inner">
  11. <section class="aui-page-panel-content">
  12. <div style="display: flex; justify-content: center;" id="initial-load-spinner">
  13. <aui-spinner size="large"></aui-spinner>
  14. </div>
  15. <div class="form-body" style="display: none;" id="form-body">
  16. <h1 data-translate="title">Select your Identity Provider</h1>
  17. #if($idpSelected)
  18. <p><span data-translate="wait">Select or wait 3 seconds to use $selectedName</span> <span class="aui-icon aui-icon-wait"></span></p>
  19. <script>
  20. var timeout = setTimeout("location.href = '$selectedUrl';", 3000);
  21. window.onclick= function () { clearTimeout(timeout); }
  22. </script>
  23. #end
  24. #foreach($idp in $idps)
  25. <p>
  26. <a href="$idp.ssoUrl" data-translate="$idp.name">$idp.name</a> $idp.description
  27. </p>
  28. #end
  29. #if($loginurl) <p>
  30. <a href="$loginurl" data-translate="nosso">Login with username and password</a>
  31. </p>
  32. #end
  33. </div>
  34. </section>
  35. </div>
  36. </div>
  37. </section>
  38. <script>
  39. AJS.toInit(function() {
  40. // TRANSLATION SETTINGS
  41. // The key to this template is that elements above whose text is supposed to be translated all have this data-translate attribute, where they get a translation key
  42. // The following map contains mappings from languages to translation keys to the actual translations.
  43. // Add your translations here. The keys ('de', 'fr') can be either locales ('de-DE', 'de-AT') or languages ('de', 'fr'). When in doubt, just use the language it's going to be used as a fallback
  44. var translations = {
  45. de: {
  46. title: "Wählen Sie Ihren Identity Provider",
  47. wait: "Wählen Sie einen Identity Provider aus oder warten Sie 3 Sekunden um $selectedName zu benutzen",
  48. nosso: "Login mit Benutzername und Passwort",
  49. // IdP names are allowed as well
  50. // If they contain non-alphanumeric characters, you'll have to write the name in "quotes"
  51. // the keys are case-sensitive!!!
  52. "Your IdP name": "Ihr IdP-Name"
  53. },
  54. fr: { // This translation has been generously provided by Google Translate, I would not trust it, but it's here as an example.
  55. title: "Choisissez votre fournisseur d'identité",
  56. wait: "Sélectionnez un fournisseur d'identité ou attendez 3 secondes pour utiliser $selectedName",
  57. nosso: "Connectez-vous avec nom d'utilisateur et mot de passe",
  58. "Your IdP name": "Votre nom IdP"
  59. }
  60. };
  61. // This is supposed to be the language present in the fields that are given above
  62. var defaultLanguage = "en";
  63. // TRANSLATION CODE
  64. // This is where the magic happens. Ideally, you shouldn't need to touch the code after this.
  65. // Detect user language with fallbacks for different levels of old browsers
  66. // This will be ordered from most preferred to least preferred
  67. var userLanguages = navigator.languages || [navigator.language] || [navigator.userLanguage] || [];
  68. // ensure default language can also match.
  69. translations[defaultLanguage] = {};
  70. var matchedLanguage = null;
  71. // Check if one the user's preferred languages is available
  72. userLanguages.forEach(function (languageString) {
  73. if (matchedLanguage === null && languageString in translations) {
  74. matchedLanguage = languageString
  75. }
  76. });
  77. // if no match was found, try converting the locale strings into language strings and see if that helps
  78. if (matchedLanguage === null) {
  79. userLanguages.forEach(function (languageString) {
  80. try {
  81. var splitLanguageString = languageString.split('-')[0];
  82. if (matchedLanguage === null && typeof splitLanguageString === 'string' && splitLanguageString in translations) {
  83. matchedLanguage = splitLanguageString;
  84. }
  85. } catch (e) {
  86. console.warn("Error preparing user language");
  87. }
  88. });
  89. }
  90. // if any (non-default language) match was found, we set the translated strings in the UI
  91. if (matchedLanguage !== null && matchedLanguage !== defaultLanguage) {
  92. var translationsToUse = translations[matchedLanguage];
  93. AJS.$('[data-translate]').each(function() {
  94. var elem = AJS.$(this);
  95. var translationToUse = translationsToUse[elem.attr('data-translate')];
  96. if (!translationToUse) {
  97. console.warn("Did not find a", matchedLanguage, "translation for", elem.attr('data-translate'));
  98. return;
  99. }
  100. elem.text(translationToUse);
  101. })
  102. }
  103. // and now display the UI
  104. AJS.$("#initial-load-spinner").hide();
  105. AJS.$("#form-body").show();
  106. })
  107. </script>
  108. </body>
  109. </html>

A little more background/explanation

The script basically extends every element with text in it to have an attribute (data-translate) that contains a “translation key”, while the text is kept as the default language. After loading the page, it executes a JavaScript block. This contains the translations you want to have for each language and the translation key (you can modify this according to the example and your need). Afterwards, there’s code that detects the user’s preferred language and does the substitution if necessary.


IdP Selection By Email Page with a Button

Applying the following template to the "IdP Selection By Email Page Template" would add a button that only upon clicking would trigger redirection.

image2022-2-10_21-35-50.png

 

IdP Selection by Email with a Button
  1. #disable_html_escaping()
  2. <html>
  3. <head>
  4. <title>Enter your Email Address</title>
  5. $webResourceManager.requireResource("$pluginproperties.pluginkey:resources")
  6. <meta name="decorator" content="atl.general">
  7. <script type="text/javascript">
  8. var emailDomains = $emailDomainMap;
  9. var ssoURL = "$ssourl";
  10. AJS.toInit(function () {
  11. // Hide these items
  12. jQuery('#notFound').hide();
  13. jQuery('#redirecting').hide();
  14. // The form is never submitted
  15. jQuery("#emailAddressForm").submit(function (e) {
  16. checkEmailField();
  17. e.preventDefault();
  18. });
  19. });
  20. function checkEmailField() {
  21. jQuery('#notFound').hide();
  22. jQuery('#redirecting').hide();
  23. // The input must have an @ and a . behind it to be ready to be checked
  24. var addressPattern = new RegExp(".*@.*\\...+");
  25. var enteredEmail = jQuery("#emailAddressField").val();
  26. if (!addressPattern.test(enteredEmail)) {
  27. return;
  28. }
  29. var atPosition = enteredEmail.indexOf('@');
  30. if (atPosition < 0) {
  31. return;
  32. }
  33. var emailDomain = enteredEmail.substring(atPosition + 1).toLowerCase();
  34. if (!emailDomain) {
  35. return;
  36. }
  37. var restEndpointUrl = emailDomains.__emailDomainCheck;
  38. jQuery.ajax({
  39. url: restEndpointUrl + emailDomain,
  40. dataType: "json",
  41. success: function (data) {
  42. console.log("Successfully retrieved IdP for given email domain", data);
  43. var idpId = data.idpId;
  44. if (idpId !== 0) {
  45. jQuery('#notFound').hide();
  46. jQuery('#redirecting').show();
  47. jQuery('#emailAddressField').prop('disabled', true);
  48. redirectUrl = ssoURL.replace('IDPID', idpId);
  49. // This avoids a warning message when starting the redirect
  50. window.onbeforeunload = function () {
  51. };
  52. window.location = redirectUrl;
  53. } else {
  54. jQuery('#notFound').show();
  55. }
  56. },
  57. error: function (xhr, errorText, err) {
  58. console.error("Error checking email domain: " + errorText, err);
  59. jQuery('#notFound').show();
  60. }
  61. });
  62. }
  63. </script>
  64. </head>
  65. <body class="aui-layout aui-theme-default page-type-message">
  66. <section id="content" role="main">
  67. <div class="aui-page-panel">
  68. <div class="aui-page-panel-inner">
  69. <section class="aui-page-panel-content">
  70. <h1>Single Sign On</h1>
  71. <form class="aui top-label" id="emailAddressForm" >
  72. <div class="field-group">
  73. <label for="emailAddressField">Enter your email address</label>
  74. <input type="text" class="text" id="emailAddressField" name="emailAddressField">
  75. <input type="submit" class="aui-button aui-button-primary" value="Do SSO">
  76. <div class="description">
  77. <div id="notFound" >No SSO destination found for this address</div>
  78. <div id="redirecting"><span class="aui-icon aui-icon-wait"></span>Redirecting...</div>
  79. </div>
  80. </div>
  81. #if($loginurl)
  82. <p><a href="$loginurl">Login with username and password</a></p>
  83. #end
  84. </form>
  85. </section>
  86. </div>
  87. </div>
  88. </section>
  89. </body>
  90. </html>


IdP Selection page only at the first login 

From version 6.3.0 of the plugin, it is also possible to provide users the choice of whether they want to see the IdP selection page again or if they only want to pick their IdP ones. So far the user's choice was already stored in a cookie but the IdP selection was always displayed for 3 seconds (a default value that can be amended) until the previous IdP was automatically selected. This gives the user the choice to switch the IdP within that timeframe.

Please note, the option described below will only work if you set the timeout variable (setTimeout) to 0 instead of 3000.

Now in this example, when the "Do you want to save your selection?" is selected the IdP selection page will not be shown the next time a user logs in. This is especially useful in an environment where the majority of users only use one IdP and you have some users that need to switch the IdPs for logging into the application. 

The IdPs can be displayed in a meatball or drop-down menu, or as a list. Our template below contains all options (meatball, drop-down menu, or as a list). Every option is marked with a comment. Please modify the template if you only want to display the IdPs with one option.


image2022-10-28_12-14-36.png


IdP Selection page only at the first login 
  1. <html>
  2. <head>
  3. <title>Select Identity Provider</title>
  4. $webResourceManager.requireResource("$pluginproperties.pluginkey:resources")
  5. <meta name="decorator" content="atl.general">
  6. </head>
  7. <body class="aui-layout aui-theme-default page-type-message" >
  8. <section id="content" role="main">
  9. <div class="aui-page-panel"><div class="aui-page-panel-inner">
  10. <section class="aui-page-panel-content">
  11. <div class="form-body">
  12. <h1>Select your Identity Provider</h1>
  13. #if($idpSelected)
  14. <!-- Change the value setTimeout 3000 to 0, otherwise the IdP selection page will be shown every time -->
  15.                 <p>Select or wait 3 seconds to use $selectedName <span class="aui-icon aui-icon-wait"></span></p>
  16. <script>
  17. var timeout = setTimeout("location.href = '$selectedUrl';", 3000);
  18. window.onclick= function () { clearTimeout(timeout); }
  19. </script>
  20. #end
  21.                <!-- This is the meatball option -->
  22.                 <form action="/plugins/servlet/samlsso" method="get" >
  23. <label for="idp">Choose an Idp:</label>
  24. <fieldset id="idp">
  25. #foreach($idp in $idps)
  26. <input type="radio" value="$idp.idpId" name="idp" id="$idp.idpId">
  27. <label for="$idp.idpId">$idp.name $idp.description</label>
  28. <br>
  29. #end
  30. </fieldset>
  31.                   <!-- This is the drop-down menu option -->
  32.                     <select name="idp">
  33. #foreach($idp in $idps)
  34. <option value="$idp.idpId">$idp.name $idp.description</option>
  35. #end
  36. </select>
  37. <input type="hidden" name="tracker" value="$trackerId">
  38. <input type="hidden" name="redirectTo" value="$redirectTo">
  39. <br><br>
  40. <input type="hidden" name="saveIdpSelection" value="false">
  41. <input type="checkbox" name="saveIdpSelection" id="saveIdpCookie" value="true" checked>
  42. <label for="saveIdpCookie">Do you want to save your selection?</label>
  43. <br><br>
  44. <input type="submit" value="Go">
  45. </form>
  46. <!-- This is the list option -->
  47.                 #foreach($idp in $idps)
  48. <p>
  49. <a href="$idp.ssoUrl">$idp.name</a> $idp.description
  50. </p>
  51. #end
  52. #if($loginurl) <p>
  53. <a href="$loginurl">Login with username and password</a>
  54. </p>
  55. #end
  56. </div>
  57. </section>
  58. </div>
  59. </div>
  60. </section>
  61. </body>
  62. </html>