github.com/greenpau/go-authcrunch@v1.1.4/assets/portal/templates/basic/login.template (about) 1 <!DOCTYPE html> 2 <html lang="en" class="h-full bg-blue-100"> 3 <head> 4 <title>{{ .MetaTitle }} - {{ .PageTitle }}</title> 5 <!-- Required meta tags --> 6 <meta charset="utf-8" /> 7 <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" /> 8 <meta name="description" content="{{ .MetaDescription }}" /> 9 <meta name="author" content="{{ .MetaAuthor }}" /> 10 <link rel="shortcut icon" href="{{ pathjoin .ActionEndpoint "/assets/images/favicon.png" }}" type="image/png" /> 11 <link rel="icon" href="{{ pathjoin .ActionEndpoint "/assets/images/favicon.png" }}" type="image/png" /> 12 <link rel="stylesheet" href="{{ pathjoin .ActionEndpoint "/assets/google-webfonts/roboto.css" }}" /> 13 <link rel="stylesheet" href="{{ pathjoin .ActionEndpoint "/assets/line-awesome/line-awesome.css" }}" /> 14 <link rel="stylesheet" href="{{ pathjoin .ActionEndpoint "/assets/css/login.css" }}" /> 15 {{ if eq .Data.ui_options.custom_css_required "yes" }} 16 <link rel="stylesheet" href="{{ pathjoin .ActionEndpoint "/assets/css/custom.css" }}" /> 17 {{ end }} 18 </head> 19 20 {{ $authenticatorCount := len .Data.login_options.authenticators }} 21 {{ $qrCodeLink := pathjoin .ActionEndpoint "/qrcode/login.png" }} 22 23 24 <body class="h-full"> 25 <div class="app-page"> 26 <div class="app-content"> 27 <div class="app-container"> 28 <div class="logo-box"> 29 {{ if .LogoURL }} 30 <img class="logo-img" src="{{ .LogoURL }}" alt="{{ .LogoDescription }}" /> 31 {{ end }} 32 <h2 class="logo-txt">{{ .PageTitle }}</h2> 33 </div> 34 35 {{ if eq .Data.login_options.form_required "yes" }} 36 <div id="loginform" {{ if ne $authenticatorCount 1 }}class="hidden"{{ end }}> 37 <div> 38 <form class="space-y-6" action="{{ pathjoin .ActionEndpoint "/login" }}" method="POST"> 39 <div> 40 <label for="username" class="block text-center pb-2 text-lg font-sans font-medium text-primary-700">Please provide username or email address</label> 41 <div class="app-inp-box"> 42 <div class="app-inp-prf-img"><i class="las la-user"></i></div> 43 <input class="app-inp-txt" id="username" name="username" type="text" autocorrect="off" autocapitalize="off" autocomplete="username" spellcheck="false" autofocus required /> 44 </div> 45 </div> 46 47 {{ if eq .Data.login_options.realm_dropdown_required "yes" }} 48 <div class="hidden"> 49 <select id="realm" name="realm" class="app-inp-sel"> 50 {{ range .Data.login_options.realms }} 51 {{ if eq .default "yes" }} 52 <option value="{{ .realm }}" selected>{{ .label }}</option> 53 {{ else }} 54 <option value="{{ .realm }}">{{ .label }}</option> 55 {{ end }} 56 {{ end }} 57 </select> 58 </div> 59 {{ else }} 60 {{ range .Data.login_options.realms }} 61 <div class="hidden"> 62 <input type="hidden" id="realm" name="realm" value="{{ .realm }}" /> 63 </div> 64 {{ end }} 65 {{ end }} 66 67 68 <div class="flex gap-4"> 69 {{ if ne $authenticatorCount 1 }} 70 <div class="flex-none"> 71 <button type="button" onclick="hideLoginForm();return false;" class="app-btn-sec"> 72 <div><i class="las la-caret-left"></i></div> 73 <div class="pl-1 pr-2"><span>Back</span></div> 74 </button> 75 </div> 76 {{ end }} 77 <div class="grow"> 78 <button type="submit" class="app-btn-pri"> 79 <div><i class="las la-check-circle"></i></div> 80 <div class="pl-2"><span>Proceed</span></div> 81 </button> 82 </div> 83 </div> 84 </form> 85 </div> 86 87 <div id="user_actions" class="flex flex-wrap pt-6 justify-center gap-4 {{ if or (ne $authenticatorCount 1) (eq .Data.login_options.hide_links "yes") }}hidden{{ end -}}"> 88 <div id="user_register_link" {{ if eq .Data.login_options.hide_register_link "yes" }}class="hidden"{{ end -}}> 89 <a class="text-primary-600" href="{{ pathjoin .ActionEndpoint "/register" .Data.login_options.default_realm }}"> 90 <i class="las la-book"></i> 91 <span class="text-lg">Register</span> 92 </a> 93 </div> 94 95 <div id="forgot_username_link" {{ if eq .Data.login_options.hide_forgot_username_link "yes" }}class="hidden"{{ end -}}> 96 <a class="text-primary-600" href="{{ pathjoin .ActionEndpoint "/forgot" .Data.login_options.default_realm }}"> 97 <i class="las la-unlock"></i> 98 <span class="text-lg">Forgot Username?</span> 99 </a> 100 </div> 101 102 <div id="contact_support_link" {{ if eq .Data.login_options.hide_contact_support_link "yes" }}class="hidden"{{ end -}}> 103 <a class="text-primary-600" href="{{ pathjoin .ActionEndpoint "/help" .Data.login_options.default_realm }}"> 104 <i class="las la-info-circle"></i> 105 <span class="text-lg">Contact Support</span> 106 </a> 107 </div> 108 </div> 109 </div> 110 {{ end }} 111 112 {{ if eq .Data.login_options.authenticators_required "yes" }} 113 <div id="authenticators" class="flex flex-col gap-2"> 114 {{ range .Data.login_options.authenticators }} 115 <div> 116 {{ if .endpoint }} 117 <a href="{{ .endpoint }}"> 118 <div class="app-login-btn-box"> 119 <div class="p-4 bg-[{{ .background_color }}] text-[{{ .color }}] shadow-sm rounded-l-md text-2xl"> 120 <i class="{{ .class_name }}"></i> 121 </div> 122 <div class="app-login-btn-txt"> 123 <span class="uppercase leading-loose">{{ .text }}</span> 124 </div> 125 </div> 126 </a> 127 {{ else }} 128 <a href="#" onclick="showLoginForm('{{ .realm }}', '{{ .registration_enabled }}', '{{ .username_recovery_enabled }}', '{{ .contact_support_enabled }}', '{{ .ActionEndpoint }}');return false;"> 129 <div class="app-login-btn-box"> 130 <div class="p-4 bg-[{{ .background_color }}] text-[{{ .color }}] shadow-sm rounded-l-md text-2xl"> 131 <i class="{{ .class_name }}"></i> 132 </div> 133 <div class="app-login-btn-txt"> 134 <span class="uppercase leading-loose">{{ .text }}</span> 135 </div> 136 </div> 137 </a> 138 {{ end }} 139 </div> 140 {{ end }} 141 </div> 142 {{ end }} 143 </div> 144 <div id="bookmarks" class="px-4 hidden sm:block"> 145 <div onclick="showQRCode('{{ $qrCodeLink }}');return false;" class="bg-[#24292f] text-[#f6f8fa] py-1 px-1 shadow-xl rounded-b-lg pb-2 text-center" style="max-width: 3em;"> 146 <i class="las la-qrcode text-3xl"></i> 147 </div> 148 </div> 149 <div id="qr" class="px-4 flex justify-center hidden"> 150 <div id="qrcode" onclick="hideQRCode();return false;" class="bg-white border border-t-2 py-1 px-1 shadow-xl rounded-b-lg pb-2 max-w-xs inline-flex"></div> 151 </div> 152 </div> 153 </div> 154 <!-- JavaScript --> 155 <script src="{{ pathjoin .ActionEndpoint "/assets/js/login.js" }}"></script> 156 {{ if eq .Data.ui_options.custom_js_required "yes" }} 157 <script src="{{ pathjoin .ActionEndpoint "/assets/js/custom.js" }}"></script> 158 {{ end }} 159 </body> 160 </html>