dkforest

A forum and chat platform (onion)
git clone https://git.dasho.dev/n0tr1v/dkforest.git
Log | Files | Refs | LICENSE

forgot-password.gohtml (10762B)


      1 {{ define "extra-head" }}
      2     <style>
      3         #timer_countdown:before {
      4             content: "{{ .Data.CaptchaSec }}";
      5             animation: {{ .Data.CaptchaSec }}s 1s forwards timer_countdown_frames;
      6         }
      7         @keyframes timer_countdown_frames {
      8             {{ range .Data.Frames -}}{{ . | css }}{{ end -}}
      9         }
     10     </style>
     11 {{ end }}
     12 
     13 {{ define "content" }}
     14 <div id="parent">
     15     <div class="container" id="form_login">
     16         <div class="row">
     17             <div class="col-8 offset-2 col-md-8 offset-md-2 col-sm-8 col-lg-6 offset-lg-3 col-xl-4 offset-xl-4">
     18                 {{ if eq .Data.Step 1 }}
     19                     <form autocomplete="on" method="post">
     20                         <input type="hidden" name="csrf" value="{{ .CSRF }}" />
     21                         <input type="hidden" name="form_name" value="step1" />
     22                         <input type="hidden" name="captcha_id" value="{{ .Data.CaptchaID }}" />
     23                         <input type="hidden" name="captcha_img" value="{{ .Data.CaptchaImg }}" />
     24                         <fieldset>
     25                             <div class="row">
     26                                 <div class="center-block">
     27                                 </div>
     28                             </div>
     29                             <div class="row">
     30                                 <div class="col-sm-12 col-md-10 offset-md-1 ">
     31                                     <div class="form-group">
     32                                         <input class="transparent-input form-control{{ if .Data.UsernameError }} is-invalid{{ end }}" placeholder="{{ t "Username" . }}" name="username" type="text" value="{{ .Data.Username }}" autofocus />
     33                                         {{ if .Data.UsernameError }}<div class="invalid-feedback d-block">{{ .Data.UsernameError }}</div>{{ end }}
     34                                     </div>
     35                                     <div class="form-group">
     36                                         <div class="text-center mb-2 bg-label">Captcha expires in <span id="timer_countdown"></span> seconds (<a href="/captcha-help">help</a>)</div>
     37                                         <div class="mb-2 text-center">
     38                                             <img src="data:image/png;base64,{{ .Data.CaptchaImg }}" alt="captcha" style="background-color: hsl(0, 0%, 90%);"  class="captcha-img" />
     39                                         </div>
     40                                         <input class="transparent-input form-control{{ if .Data.ErrCaptcha }} is-invalid{{ end }}" placeholder="{{ t "Captcha (6 digits)" . }}" name="captcha" type="text" value="{{ .Data.Captcha }}" maxlength="6" autocomplete="off" />
     41                                         {{ if .Data.ErrCaptcha }}<div class="invalid-feedback d-block">{{ .Data.ErrCaptcha }}</div>{{ end }}
     42                                     </div>
     43                                     <div class="form-group">
     44                                         <span class="bg-label">
     45                                             <input id="gpg_mode_decrypt" name="gpg_mode" value="0" type="radio"{{ if not .Data.GpgMode }} checked{{ end }} />
     46                                             <label for="gpg_mode_decrypt">Decrypt code</label>
     47                                         </span>
     48                                         <span class="bg-label ml-2">
     49                                             <input id="gpg_mode_sign" name="gpg_mode" value="1" type="radio"{{ if .Data.GpgMode }} checked{{ end }} />
     50                                             <label for="gpg_mode_sign">Sign message</label>
     51                                         </span>
     52                                     </div>
     53                                     <div class="form-group">
     54                                         <input type="submit" class="transparent-input btn btn-lg btn-primary btn-block" value="{{ t "Recover password" . }}" />
     55                                     </div>
     56                                     <div class="form-group">
     57                                         <a href="/{{ if .Data.Redirect }}?redirect={{ .Data.Redirect }}{{ end }}" class="bg-label link">{{ t "Login" . }}</a>
     58                                     </div>
     59                                 </div>
     60                             </div>
     61                         </fieldset>
     62                     </form>
     63                 {{ else if eq .Data.Step 2 }}
     64                 <form autocomplete="on" method="post">
     65                     <input type="hidden" name="csrf" value="{{ .CSRF }}" />
     66                     <input type="hidden" name="token" value="{{ .Data.Token }}" />
     67                     <input type="hidden" name="form_name" value="step2" />
     68                     <input type="hidden" name="gpg_mode" value="{{ .Data.GpgMode }}" />
     69                     <fieldset>
     70                         <div class="row">
     71                             <div class="center-block">
     72                             </div>
     73                         </div>
     74                         <div class="row">
     75                             <div class="col-sm-12 col-md-10 offset-md-1 ">
     76                                 {{ if .Data.GpgMode }}
     77                                     <div class="form-group">
     78                                         <label for="encrypted_message" class="bg-label">
     79                                             {{ t "Please sign the following message with your private key and send the signature" . }}<br />
     80                                             <code>gpg --armor --detach-sign file</code>
     81                                         </label>
     82                                         <input name="to_be_signed_message" id="to_be_signed_message" value="{{ .Data.ToBeSignedMessage }}" type="text" class="transparent-input form-control mono" readonly />
     83                                     </div>
     84                                     <div class="form-group">
     85                                         <label for="signed_message" class="bg-label">{{ t "Message detached signature" . }}</label>
     86                                         <textarea name="signed_message" id="signed_message" rows="10" class="transparent-input form-control mono{{ if .Data.ErrorSignedMessage }} is-invalid{{ end }}" autofocus>{{ .Data.SignedMessage }}</textarea>
     87                                         {{ if .Data.ErrorSignedMessage }}
     88                                             <div class="invalid-feedback">{{ .Data.ErrorSignedMessage }}</div>
     89                                         {{ end }}
     90                                     </div>
     91                                 {{ else }}
     92                                     <div class="form-group">
     93                                         <label for="encrypted_message" class="bg-label">{{ t "Please decrypt the following message with your private key and send the required code" . }}</label>
     94                                         <input name="encrypted_message" value="{{ .Data.EncryptedMessage }}" type="hidden" />
     95                                         <pre class="code-select transparent-input"><code>{{ .Data.EncryptedMessage }}</code></pre>
     96                                     </div>
     97                                     <div class="form-group">
     98                                         <label for="pgp_code" class="bg-label">{{ t "Your decrypted code" . }}</label>
     99                                         <input name="pgp_code" id="pgp_code" value="{{ .Data.Code }}" type="text" class="transparent-input form-control{{ if .Data.ErrorCode }} is-invalid{{ end }}" autofocus />
    100                                         {{ if .Data.ErrorCode }}
    101                                             <div class="invalid-feedback">{{ .Data.ErrorCode }}</div>
    102                                         {{ end }}
    103                                     </div>
    104                                 {{ end }}
    105                                 <div class="form-group">
    106                                     <input type="submit" value="{{ t "Continue" . }}" class="btn btn-primary" />
    107                                     <a href="/" class="btn btn-secondary">{{ t "Cancel" . }}</a>
    108                                 </div>
    109                             </div>
    110                         </div>
    111                     </fieldset>
    112                 </form>
    113                 {{ else if eq .Data.Step 3 }}
    114                     <form autocomplete="on" method="post">
    115                         <input type="hidden" name="csrf" value="{{ .CSRF }}" />
    116                         <input type="hidden" name="token" value="{{ .Data.Token }}" />
    117                         <input type="hidden" name="form_name" value="step3" />
    118                         <fieldset>
    119                             <div class="row">
    120                                 <div class="center-block">
    121                                 </div>
    122                             </div>
    123                             <div class="row">
    124                                 <div class="col-sm-12 col-md-10 offset-md-1 ">
    125                                     <div class="form-group">
    126                                         <input placeholder="{{ t "New password" . }}" name="newPassword" value="{{ .Data.NewPassword }}" class="transparent-input form-control{{ if .Data.ErrorNewPassword }} is-invalid{{ end }}" type="password"{{ if .Data.ErrorNewPassword }} autofocus{{ end }} required />
    127                                         {{ if .Data.ErrorNewPassword }}
    128                                             <div class="invalid-feedback">{{ .Data.ErrorNewPassword }}</div>
    129                                         {{ end }}
    130                                     </div>
    131                                     <div class="form-group">
    132                                         <input placeholder="{{ t "Confirm new password" . }}" name="rePassword" value="{{ .Data.RePassword }}" class="transparent-input form-control{{ if .Data.ErrorRePassword }} is-invalid{{ end }}" type="password"{{ if .Data.ErrorRePassword }} autofocus{{ end }} />
    133                                         {{ if .Data.ErrorRePassword }}
    134                                             <div class="invalid-feedback">{{ .Data.ErrorRePassword }}</div>
    135                                         {{ end }}
    136                                     </div>
    137                                     <div class="form-group">
    138                                         <input type="submit" value="{{ t "Update password" . }}" class="btn btn-primary" />
    139                                         <a href="/" class="btn btn-secondary">{{ t "Cancel" . }}</a>
    140                                     </div>
    141                                 </div>
    142                             </div>
    143                         </fieldset>
    144                     </form>
    145                 {{ end }}
    146             </div>
    147         </div>
    148     </div>
    149 </div>
    150 {{ end }}