feat: initial commit

This commit is contained in:
2023-11-15 20:38:25 +01:00
commit e199fe3d26
67 changed files with 4152 additions and 0 deletions

View File

@ -0,0 +1,19 @@
{{define "base"}}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>{{block "title" . -}}{{- end}}</title>
{{- block "head_style" . -}}
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bulma@0.9.4/css/bulma.min.css" />
<link rel="stylesheet" href="{{ .BaseURL }}/css/style.css" />
{{end}}
{{- block "head_script" . -}}{{end}}
</head>
<body>
{{- block "body" . -}}{{- end -}}
{{- block "body_script" . -}}{{end}}
</body>
</html>
{{end}}

View File

@ -0,0 +1,24 @@
{{define "flash"}}
<div class="flash has-margin-top-small mb-3">
{{- range .Flashes -}}
{{- if eq .Type "error" -}}
{{template "flash_message" map "Title" "Erreur" "MessageClass" "is-danger" "Message" .Message }}
{{- else if eq .Type "warn" -}}
{{template "flash_message" map "Title" "Attention" "MessageClass" "is-warning" "Message" .Message }}
{{- else if eq .Type "success" -}}
{{template "flash_message" map "Title" "Succès" "MessageClass" "is-success" "Message" .Message }}
{{- else -}}
{{template "flash_message" map "Title" "Information" "MessageClass" "is-info" "Message" .Message }}
{{- end -}}
{{- end -}}
</div>
{{end}}
{{define "flash_message" -}}
<div class="message {{.MessageClass}}">
<div class="message-body">
<span class="has-text-weight-bold">{{.Title}}</span>
<p>{{.Message}}</p>
</div>
</div>
{{- end}}

View File

@ -0,0 +1,7 @@
{{define "footer"}}
<p class="has-margin-top-small has-text-right is-size-7 has-text-grey">
Version: {{ .BuildInfo.ProjectVersion }} -
Réf.: {{ .BuildInfo.GitRef }} -
Date de construction: {{ .BuildInfo.BuildDate }}
</p>
{{end}}

View File

@ -0,0 +1,35 @@
{{define "title"}}Autorisation{{end}}
{{define "body"}}
<section class="hero is-fullheight">
<div class="hero-body">
<div class="container">
<div class="columns">
<div class="column is-4 is-offset-4">
{{template "flash" .}}
<p class="has-text-black title has-text-centered">
Demande d'autorisation
</p>
<p class="has-text-black subtitle has-text-centered">
Autorisez vous l'application à utiliser ces informations vous concernant ?
</p>
<div class="box">
<form action="{{ .BaseURL }}/consent" method="POST">
{{range .RequestedScope}}
<div class="">
<label class="checkbox">
<input type="checkbox" name="scope_{{ . }}">
{{ . }}
</label>
</div>
{{end}}
{{ .csrfField }}
<input name="challenge" type="hidden" value="{{ .ConsentChallenge }}" />
<button type="submit" class="button is-link is-medium is-block is-fullwidth">Autoriser</button>
</form>
</div>
</div>
</div>
</div>
</section>
{{end}}
{{template "base" .}}

View File

@ -0,0 +1,20 @@
{{define "title"}}Erreur{{end}}
{{define "body"}}
<section class="hero is-fullheight">
<div class="hero-body">
<div class="container">
<div class="columns">
<div class="column is-4 is-offset-4">
<div class="message is-danger">
<div class="message-body">
<p class="title is-size-4 has-text-danger">{{ .ErrorTitle }}</p>
<p>{{ .ErrorDescription }}</p>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
{{end}}
{{template "base" .}}

View File

@ -0,0 +1,22 @@
{{define "title"}}Connexion{{end}}
{{define "body"}}
<section class="hero is-fullheight">
<div class="hero-body">
<div class="container has-text-centered">
<div class="columns">
<div class="column is-4 is-offset-4">
<p class="has-text-black title">
Hydra Web<span class="has-text-grey">Authn</span>
</p>
<p class="is-size-7">
Version: {{ .BuildInfo.ProjectVersion }} |
Réf.: {{ .BuildInfo.GitRef }} |
Date de construction: {{ .BuildInfo.BuildDate }}
</p>
</div>
</div>
</div>
</div>
</section>
{{end}}
{{template "base" .}}

View File

@ -0,0 +1,53 @@
{{define "title"}}Connexion{{end}}
{{define "body"}}
<section class="hero is-fullheight">
<div class="hero-body">
<div class="container">
<div class="columns">
<div class="column is-6 is-offset-3">
{{template "flash" .}}
<p class="has-text-black title has-text-centered">
Authentification sur <br /><a href="{{ .ClientURI }}" class="has-text-info">{{ .ClientName }}</a>
</p>
<div>
<noscript>
<div class="message is-danger">
<div class="message-body">
L'activation de JavaScript est nécessaire afin de pouvoir vous authentifier !
</div>
</div>
</noscript>
<div class="box">
<form id="login" method="POST">
<div class="field">
<label for="username" class="label">Nom d'utilisateur</label>
<div class="control">
<input id="username" class="input" name="username" type="text" placeholder="jdoe" value="{{ .Username }}" required>
</div>
</div>
<div>
<label for="rememberme" class="checkbox">
<input type="checkbox" id="rememberme" name="rememberme" {{if .RememberMe }}checked="true"{{end}} >
Se souvenir de moi
</label>
</div>
{{if .AssertionRequest}}
<input type="hidden" id="assertion" name="assertion" />
{{end}}
{{ .csrfField }}
<input name="challenge" type="hidden" value="{{ .LoginChallenge }}" />
<input type="submit" value="Envoyer" class="button is-fullwidth is-primary mt-3" />
</form>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
{{if .AssertionRequest}}
<script type="text/javascript" src="{{ .BaseURL }}/js/hydra-webauthn.js"></script>
<script type="text/javascript" src="{{ .BaseURL }}/js/login.js" data-assertion-request="{{ base64 ( marshal .AssertionRequest ) }}"></script>
{{end}}
{{end}}
{{template "base" .}}

View File

@ -0,0 +1,28 @@
{{define "title"}}S'enregistrer{{end}}
{{define "body"}}
<section class="hero is-fullheight">
<div class="hero-body">
<div class="container">
<div class="columns">
<div class="column is-4 is-offset-4">
{{template "flash" .}}
<p class="has-text-black title has-text-centered mt-2">
Finaliser votre compte
</p>
<p>Cliquer sur le bouton ci-dessous pour générer une paire de clés cryptographiques qui sera associée à votre compte.</p>
<div class="button is-link is-medium is-block is-fullwidth mt-5" onclick="generateCredentials()">
Générer
</div>
<form id="register" action="{{ .BaseURL }}/register/{{ .Token }}" method="POST">
{{ .csrfField }}
<input type="hidden" id="credentials" name="credentials" />
</form>
</div>
</div>
</div>
</div>
</section>
<script type="text/javascript" src="{{ .BaseURL }}/js/hydra-webauthn.js"></script>
<script type="text/javascript" src="{{ .BaseURL }}/js/register.js" data-web-authn-options="{{ base64 ( marshal .WebAuthnOptions ) }}"></script>
{{end}}
{{template "base" .}}