Browse Source

Validate passwords

Only accept ASCII passwords
webdeploy
meskio 3 years ago
parent
commit
8a94b22401
Signed by: meskio
GPG Key ID: 52B8F5AC97A2DA86
  1. 12
      server/add_user.go
  2. 4
      server/user.go
  3. 7
      tmpl/adduser.html
  4. 3
      tmpl/password.html

12
server/add_user.go

@ -14,6 +14,7 @@ import (
var (
validName = regexp.MustCompile(`^[a-z0-9][a-z0-9_\-\.]*$`)
validPass = regexp.MustCompile(`^[ -~]*$`)
// See https://ldpreload.com/blog/names-to-reserve
reservedNames = map[string]bool{
@ -169,8 +170,8 @@ func (s *server) addUserHandler(w http.ResponseWriter, r *http.Request) {
return
}
if name == "" || pass == "" {
response.execute("empty")
if !validPassword(pass) {
response.execute("invalidPass")
return
}
@ -240,3 +241,10 @@ func validUserName(name string) bool {
return validName.MatchString(name)
}
func validPassword(password string) bool {
if len(password) < 4 {
return false
}
return validPass.MatchString(password)
}

4
server/user.go

@ -76,6 +76,10 @@ func (s *server) passwordHandler(w http.ResponseWriter, r *http.Request) {
response.execute("SameOldPass")
return
}
if !validPassword(pass) {
response.execute("invalidPass")
return
}
err := s.ldap.ChangePass(response.User, oldpass, pass)
if err != nil {

7
tmpl/adduser.html

@ -20,16 +20,15 @@
<form class="col-sm-4" id="needs-validation" method="post">
<div class="form-group">
<label for="name">Nombre de usuaria:</label>
<input type="text" class="form-control {{if eq .Data "exists" "empty"}}is-invalid{{end}}" id="name" name="name" placeholder="Nombre">
<input type="text" class="form-control {{if eq .Data "exists" "invalid"}}is-invalid{{end}}" id="name" name="name" placeholder="Nombre">
{{if eq .Data "invalid"}}<div class="invalid-feedback">El nombre de usuaria es invalido. Tiene que tener al menos 3 caracteres, empezar por letra o numero y solo puede contener letras, numeros, '_', '-' o '.'.</div>{{end}}
{{if eq .Data "exists"}}<div class="invalid-feedback">La usuaria ya existe.</div>{{end}}
{{if eq .Data "empty"}}<div class="invalid-feedback">Ni el nombre de usuaria ni la password pueden estar vacías.</div>{{end}}
</div>
<div class="form-group">
{{template "passwd-tips.html"}}
<label for="password">Contraseña:</label>
<input type="password" class="form-control {{if eq .Data "empty"}}is-invalid{{end}}" id="password" name="password" placeholder="Contraseña">
{{if eq .Data "empty"}}<div class="invalid-feedback">Ni el nombre de usuaria ni la password pueden estar vacías.</div>{{end}}
<input type="password" class="form-control {{if eq .Data "invalidPass"}}is-invalid{{end}}" id="password" name="password" placeholder="Contraseña">
{{if eq .Data "invalidPass"}}<div class="invalid-feedback">Password invalida, usa solo caracteres ASCII.</div>{{end}}
<div class="progress">
<div id="StrengthProgressBar" class="progress-bar"></div>
</div>

3
tmpl/password.html

@ -23,8 +23,9 @@
<div class="form-group">
<label for="password">Nueva contraseña:</label>
{{template "passwd-tips.html"}}
<input type="password" class="form-control {{if eq .Data "SameOldPass"}}is-invalid{{end}}" id="password" name="password" placeholder="Contraseña">
<input type="password" class="form-control {{if eq .Data "SameOldPass" "invalidPass"}}is-invalid{{end}}" id="password" name="password" placeholder="Contraseña">
{{ if eq .Data "SameOldPass"}}<div class="invalid-feedback">Cuando decíamos "cambiarla" nos referíamos a... cambiarla ;)</div>{{end}}
{{if eq .Data "invalidPass"}}<div class="invalid-feedback">Password invalida, usa solo caracteres ASCII.</div>{{end}}
<div class="progress">
<div id="StrengthProgressBar" class="progress-bar"></div>
</div>

Loading…
Cancel
Save