Trying a utility file

This commit is contained in:
Chris Mann 2023-07-20 13:46:32 +02:00
parent 121477cc25
commit a415ea4a96
4 changed files with 108 additions and 115 deletions

View file

@ -52,10 +52,12 @@ func handleInvitationCode(w http.ResponseWriter, r *http.Request) {
code := mux.Vars(r)["code"] code := mux.Vars(r)["code"]
code_id, code_pw := readCode(code) code_id, code_pw := readCode(code)
l := ldapOpen(w) login := checkLogin(w, r)
if l == nil {
return // l := ldapOpen(w)
} // if l == nil {
// return
// }
inviteDn := config.InvitationNameAttr + "=" + code_id + "," + config.InvitationBaseDN inviteDn := config.InvitationNameAttr + "=" + code_id + "," + config.InvitationBaseDN
err := l.Bind(inviteDn, code_pw) err := l.Bind(inviteDn, code_pw)
@ -117,10 +119,14 @@ func handleNewAccount(w http.ResponseWriter, r *http.Request, l *ldap.Conn, invi
if r.Method == "POST" { if r.Method == "POST" {
r.ParseForm() r.ParseForm()
data.Username = strings.TrimSpace(strings.Join(r.Form["username"], "")) newUser := NewUser{}
data.DisplayName = strings.TrimSpace(strings.Join(r.Form["displayname"], ""))
data.GivenName = strings.TrimSpace(strings.Join(r.Form["givenname"], "")) newUser.CN = strings.TrimSpace(strings.Join(r.Form["username"], "@lesgv.com"))
data.Surname = strings.TrimSpace(strings.Join(r.Form["surname"], "")) newUser.DisplayName = strings.TrimSpace(strings.Join(r.Form["displayname"], ""))
newUser.GivenName = strings.TrimSpace(strings.Join(r.Form["givenname"], ""))
newUser.SN = strings.TrimSpace(strings.Join(r.Form["surname"], ""))
newUser.UID = strings.TrimSpace(strings.Join(r.Form["username"], ""))
newUser.Mail = strings.TrimSpace(strings.Join(r.Form["mail"], ""))
password1 := strings.Join(r.Form["password"], "") password1 := strings.Join(r.Form["password"], "")
password2 := strings.Join(r.Form["password2"], "") password2 := strings.Join(r.Form["password2"], "")
@ -248,19 +254,12 @@ func handleInviteSendCode(w http.ResponseWriter, r *http.Request) {
// carLicense // carLicense
if r.Method == "POST" { if r.Method == "POST" {
r.ParseForm() r.ParseForm()
data := &SendCodeData{ data := &SendCodeData{
WebBaseAddress: config.WebAddress, WebBaseAddress: config.WebAddress,
} }
// modify_request := ldap.NewModifyRequest(login.UserEntry.DN, nil) // modify_request := ldap.NewModifyRequest(login.UserEntry.DN, nil)
// // choice := strings.Join(r.Form["choice"], "") // // choice := strings.Join(r.Form["choice"], "")
// // sendto := strings.Join(r.Form["sendto"], "") // // sendto := strings.Join(r.Form["sendto"], "")
@ -277,7 +276,7 @@ func handleInviteSendCode(w http.ResponseWriter, r *http.Request) {
// data.CodeDisplay = code // data.CodeDisplay = code
// } // }
log.Printf(fmt.Sprintf("279: %v %v %v", code, code_id, code_pw)) log.Printf(fmt.Sprintf("279: %v %v %v", code, code_id, code_pw))
addReq := ldap.NewAddRequest("documentIdentifier=" + code_id + "," + config.InvitationBaseDN,nil) addReq := ldap.NewAddRequest("documentIdentifier="+code_id+","+config.InvitationBaseDN, nil)
addReq.Attribute("objectClass", []string{"top", "document", "simpleSecurityObject"}) addReq.Attribute("objectClass", []string{"top", "document", "simpleSecurityObject"})
addReq.Attribute("cn", []string{code}) addReq.Attribute("cn", []string{code})
addReq.Attribute("userPassword", []string{code_pw}) addReq.Attribute("userPassword", []string{code_pw})
@ -293,22 +292,14 @@ func handleInviteSendCode(w http.ResponseWriter, r *http.Request) {
data.CodeDisplay = code data.CodeDisplay = code
} }
templateInviteSendCode.Execute(w, data) templateInviteSendCode.Execute(w, data)
// if choice == "display" || choice == "send" { // if choice == "display" || choice == "send" {
// log.Printf(fmt.Sprintf("260: %v %v %v %v", login, choice, sendto, data)) // log.Printf(fmt.Sprintf("260: %v %v %v %v", login, choice, sendto, data))
// trySendCode(login, choice, sendto, data) // trySendCode(login, choice, sendto, data)
// } // }
} }
} }
func trySendCode(login *LoginStatus, choice string, sendto string, data *SendCodeData) { func trySendCode(login *LoginStatus, choice string, sendto string, data *SendCodeData) {
@ -318,11 +309,6 @@ func trySendCode(login *LoginStatus, choice string, sendto string, data *SendCod
log.Printf(fmt.Sprintf("272: %v %v %v", code, code_id, code_pw)) log.Printf(fmt.Sprintf("272: %v %v %v", code, code_id, code_pw))
// Create invitation object in database // Create invitation object in database
// len_base_dn := len(strings.Split(config.BaseDN, ",")) // len_base_dn := len(strings.Split(config.BaseDN, ","))
// dn_split := strings.Split(super_dn, ",") // dn_split := strings.Split(super_dn, ",")
// for i := len_base_dn + 1; i <= len(dn_split); i++ { // for i := len_base_dn + 1; i <= len(dn_split); i++ {
@ -397,13 +383,6 @@ func trySendCode(login *LoginStatus, choice string, sendto string, data *SendCod
// } // }
// } // }
// inviteDn := config.InvitationNameAttr + "=" + code_id + "," + config.InvitationBaseDN // inviteDn := config.InvitationNameAttr + "=" + code_id + "," + config.InvitationBaseDN
// req := ldap.NewAddRequest(inviteDn, nil) // req := ldap.NewAddRequest(inviteDn, nil)
// pw, err := SSHAEncode(code_pw) // pw, err := SSHAEncode(code_pw)
@ -493,4 +472,3 @@ func readCode(code string) (code_id string, code_pw string) {
code_pw = hex.EncodeToString(pw_hash[:16]) code_pw = hex.EncodeToString(pw_hash[:16])
return code_id, code_pw return code_id, code_pw
} }

View file

@ -43,7 +43,7 @@
Inviter des gens sur {{.Org}} Inviter des gens sur {{.Org}}
</div> </div>
<div class="list-group list-group-flush"> <div class="list-group list-group-flush">
<a class="list-group-item list-group-item-action" href="/invite/send_code">Envoyer un code d'invitation</a> <!-- <a class="list-group-item list-group-item-action" href="/invite/send_code">Envoyer un code d'invitation</a> -->
<a class="list-group-item list-group-item-action" href="/invite/new_account">Créer un nouveau compte directement</a> <a class="list-group-item list-group-item-action" href="/invite/new_account">Créer un nouveau compte directement</a>
</div> </div>
</div> </div>

View file

@ -5,25 +5,24 @@
<h4>Création d'un nouveau compte</h4> <h4>Création d'un nouveau compte</h4>
<a class="ml-auto btn btn-info" href="/">Retour</a> <a class="ml-auto btn btn-info" href="/">Retour</a>
</div> </div>
{{if .ErrorMessage}}
{{if .ErrorMessage}} <div class="alert alert-danger mt-4">Impossible de créer le compte.
<div class="alert alert-danger mt-4">Impossible de créer le compte.
<div style="font-size: 0.8em">{{ .ErrorMessage }}</div> <div style="font-size: 0.8em">{{ .ErrorMessage }}</div>
</div> </div>
{{end}} {{end}}
{{if .WarningMessage}} {{if .WarningMessage}}
<div class="alert alert-danger mt-4">Des erreurs se sont produites, le compte pourrait ne pas être totalement fonctionnel. <div class="alert alert-danger mt-4">Des erreurs se sont produites, le compte pourrait ne pas être totalement
fonctionnel.
<div style="font-size: 0.8em">{{ .WarningMessage }}</div> <div style="font-size: 0.8em">{{ .WarningMessage }}</div>
</div> </div>
{{end}} {{end}}
{{if .Success}} {{if .Success}}
<div class="alert alert-success mt-4"> <div class="alert alert-success mt-4">
Le compe a été créé ! Le compe a été créé !
Rendez-vous <a href="/logout">sur la page d'accueil</a> pour vous connecter avec ce nouveau compte. Rendez-vous <a href="/logout">sur la page d'accueil</a> pour vous connecter avec ce nouveau compte.
</div> </div>
{{else}} {{else}}
<form method="POST" class="mt-4"> <form method="POST" class="mt-4">
<h5>Renseignements obligatoires</h5>
<div class="form-group"> <div class="form-group">
<label for="username">Identifiant souhaité :</label> <label for="username">Identifiant souhaité :</label>
<input type="text" id="username" name="username" class="form-control" value="{{ .Username }}" /> <input type="text" id="username" name="username" class="form-control" value="{{ .Username }}" />
@ -31,9 +30,12 @@
Votre identifiant doit être en minuscule. Votre identifiant doit être en minuscule.
</small> </small>
</div> </div>
<div id="calc-uid"></div>
<div id="calc-cn"></div>
{{if .ErrorInvalidUsername}} {{if .ErrorInvalidUsername}}
<div class="alert alert-warning"> <div class="alert alert-warning">
Nom d'utilisateur invalide. Ne peut contenir que les caractères suivants : chiffres, lettres minuscules, point, tiret bas (_) et tiret du milieu (-). Nom d'utilisateur invalide. Ne peut contenir que les caractères suivants : chiffres, lettres minuscules, point,
tiret bas (_) et tiret du milieu (-).
</div> </div>
{{end}} {{end}}
{{if .ErrorUsernameTaken}} {{if .ErrorUsernameTaken}}
@ -41,11 +43,31 @@
Ce nom d'utilisateur est déjà pris. Ce nom d'utilisateur est déjà pris.
</div> </div>
{{end}} {{end}}
<div class="form-group">
<label for="mail">Email :</label>
<input type="text" id="mail" name="mail" class="form-control" value="{{ .Mail }}" />
<small class="form-text text-muted">
Le courriel de l'utilisateur.
</small>
</div>
<div class="form-group">
<label for="displayname">Nom affiché :</label>
<input type="text" id="displayname" name="displayname" class="form-control" value="{{ .DisplayName }}" />
</div>
<div class="form-group">
<label for="givenname">Prénom :</label>
<input type="text" id="givenname" name="givenname" class="form-control" value="{{ .GivenName }}" />
</div>
<div class="form-group">
<label for="surname">Nom de famille :</label>
<input type="text" id="surname" name="surname" class="form-control" value="{{ .Surname }}" />
</div>
<div class="form-group"> <div class="form-group">
<label for="password">Mot de passe :</label> <label for="password">Mot de passe :</label>
<input type="password" id="password" name="password" class="form-control" /> <input type="password" id="password" name="password" class="form-control" />
<small class="form-text text-muted"> <small class="form-text text-muted">
La seule contrainte est que votre mot de passe doit faire au moins 8 caractères. Utilisez chiffres, majuscules, et caractères spéciaux sans modération ! La seule contrainte est que votre mot de passe doit faire au moins 8 caractères. Utilisez chiffres, majuscules, et
caractères spéciaux sans modération !
</small> </small>
</div> </div>
{{if .ErrorPasswordTooShort}} {{if .ErrorPasswordTooShort}}
@ -62,19 +84,7 @@
Les deux mots de passe entrés ne correspondent pas. Les deux mots de passe entrés ne correspondent pas.
</div> </div>
{{end}} {{end}}
<div class="form-group">
<label for="displayname">Nom affiché :</label>
<input type="text" id="displayname" name="displayname" class="form-control" value="{{ .DisplayName }}" />
</div>
<div class="form-group">
<label for="givenname">Prénom :</label>
<input type="text" id="givenname" name="givenname" class="form-control" value="{{ .GivenName }}" />
</div>
<div class="form-group">
<label for="surname">Nom de famille :</label>
<input type="text" id="surname" name="surname" class="form-control" value="{{ .Surname }}" />
</div>
<button type="submit" class="btn btn-primary">Créer le compte</button> <button type="submit" class="btn btn-primary">Créer le compte</button>
</form> </form>
{{end}} {{end}}
{{end}} {{end}}

View file

@ -30,6 +30,7 @@ type NewUser struct {
SN string SN string
UID string UID string
Description string Description string
Password string
} }
func openLdap(config ConfigFile) *ldap.Conn { func openLdap(config ConfigFile) *ldap.Conn {
@ -67,6 +68,10 @@ func addNewUser(newUser NewUser, config *ConfigFile, login *LoginStatus) bool {
if newUser.Description != "" { if newUser.Description != "" {
req.Attribute("description", []string{newUser.Description}) req.Attribute("description", []string{newUser.Description})
} }
if newUser.Password != "" {
pw, _ := SSHAEncode(newUser.Password)
req.Attribute("userPassword", []string{pw})
}
err := login.conn.Add(req) err := login.conn.Add(req)
log.Printf(fmt.Sprintf("71: %v", err)) log.Printf(fmt.Sprintf("71: %v", err))
log.Printf(fmt.Sprintf("72: %v", req)) log.Printf(fmt.Sprintf("72: %v", req))