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>