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++ {
@ -360,11 +346,11 @@ func trySendCode(login *LoginStatus, choice string, sendto string, data *SendCod
// req := ldap.NewAddRequest(dn, nil) // req := ldap.NewAddRequest(dn, nil)
// req.Attribute("objectclass", object_class) // req.Attribute("objectclass", object_class)
// // req.Attribute("mail", []string{data.IdValue}) // // req.Attribute("mail", []string{data.IdValue})
// /* // /*
// if data.StructuralObjectClass != "" { // if data.StructuralObjectClass != "" {
// req.Attribute("structuralobjectclass", []string{data.StructuralObjectClass}) // req.Attribute("structuralobjectclass", []string{data.StructuralObjectClass})
// } // }
// */ // */
// if data.DisplayName != "" { // if data.DisplayName != "" {
// req.Attribute("displayname", []string{data.DisplayName}) // req.Attribute("displayname", []string{data.DisplayName})
// } // }
@ -384,9 +370,9 @@ func trySendCode(login *LoginStatus, choice string, sendto string, data *SendCod
// req.Attribute("description", []string{data.Description}) // req.Attribute("description", []string{data.Description})
// } // }
// err := login.conn.Add(req) // err := login.conn.Add(req)
// // log.Printf(fmt.Sprintf("899: %v",err)) // // log.Printf(fmt.Sprintf("899: %v",err))
// // log.Printf(fmt.Sprintf("899: %v",req)) // // log.Printf(fmt.Sprintf("899: %v",req))
// // log.Printf(fmt.Sprintf("899: %v",data)) // // log.Printf(fmt.Sprintf("899: %v",data))
// if err != nil { // if err != nil {
// data.Error = err.Error() // data.Error = err.Error()
// } else { // } else {
@ -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,76 +5,86 @@
<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}}
{{if .WarningMessage}}
<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>
{{end}}
{{if .Success}}
<div class="alert alert-success mt-4">
Le compe a été créé !
Rendez-vous <a href="/logout">sur la page d'accueil</a> pour vous connecter avec ce nouveau compte.
</div>
{{else}}
<form method="POST" class="mt-4">
<h5>Renseignements obligatoires</h5>
<div class="form-group">
<label for="username">Identifiant souhaité :</label>
<input type="text" id="username" name="username" class="form-control" value="{{ .Username }}" />
<small class="form-text text-muted">
Votre identifiant doit être en minuscule.
</small>
</div>
{{if .ErrorInvalidUsername}}
<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 (-).
</div>
{{end}}
{{if .ErrorUsernameTaken}}
<div class="alert alert-warning">
Ce nom d'utilisateur est déjà pris.
</div>
{{end}}
<div class="form-group">
<label for="password">Mot de passe :</label>
<input type="password" id="password" name="password" class="form-control" />
<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 !
</small>
</div>
{{if .ErrorPasswordTooShort}}
<div class="alert alert-warning">
Le mot de passe choisi est trop court (minimum 8 caractères).
</div>
{{end}}
<div class="form-group">
<label for="password2">Répéter le mot de passe :</label>
<input type="password" id="password2" name="password2" class="form-control" />
</div>
{{if .ErrorPasswordMismatch}}
<div class="alert alert-warning">
Les deux mots de passe entrés ne correspondent pas.
</div>
{{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>
</form>
{{end}}
{{end}} {{end}}
{{if .WarningMessage}}
<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>
{{end}}
{{if .Success}}
<div class="alert alert-success mt-4">
Le compe a été créé !
Rendez-vous <a href="/logout">sur la page d'accueil</a> pour vous connecter avec ce nouveau compte.
</div>
{{else}}
<form method="POST" class="mt-4">
<div class="form-group">
<label for="username">Identifiant souhaité :</label>
<input type="text" id="username" name="username" class="form-control" value="{{ .Username }}" />
<small class="form-text text-muted">
Votre identifiant doit être en minuscule.
</small>
</div>
<div id="calc-uid"></div>
<div id="calc-cn"></div>
{{if .ErrorInvalidUsername}}
<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 (-).
</div>
{{end}}
{{if .ErrorUsernameTaken}}
<div class="alert alert-warning">
Ce nom d'utilisateur est déjà pris.
</div>
{{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">
<label for="password">Mot de passe :</label>
<input type="password" id="password" name="password" class="form-control" />
<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 !
</small>
</div>
{{if .ErrorPasswordTooShort}}
<div class="alert alert-warning">
Le mot de passe choisi est trop court (minimum 8 caractères).
</div>
{{end}}
<div class="form-group">
<label for="password2">Répéter le mot de passe :</label>
<input type="password" id="password2" name="password2" class="form-control" />
</div>
{{if .ErrorPasswordMismatch}}
<div class="alert alert-warning">
Les deux mots de passe entrés ne correspondent pas.
</div>
{{end}}
<button type="submit" class="btn btn-primary">Créer le compte</button>
</form>
{{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))