Use more appropriate description instead of displayname for everything except users

This commit is contained in:
Alex Auvolat 2020-02-12 15:54:17 +01:00
parent 3fbbe61a46
commit b3d6854d82
4 changed files with 59 additions and 38 deletions

View File

@ -98,7 +98,7 @@ func handleAdminGroups(w http.ResponseWriter, r *http.Request) {
config.GroupBaseDN,
ldap.ScopeSingleLevel, ldap.NeverDerefAliases, 0, 0, false,
fmt.Sprintf("(&(objectClass=groupOfNames))"),
[]string{config.GroupNameAttr, "dn", "displayname"},
[]string{config.GroupNameAttr, "dn", "description"},
nil)
sr, err := login.conn.Search(searchRequest)
@ -137,14 +137,14 @@ type AdminLDAPTplData struct {
}
type EntryName struct {
DN string
DisplayName string
DN string
Name string
}
type Child struct {
DN string
Identifier string
DisplayName string
DN string
Identifier string
Name string
}
type PathItem struct {
@ -337,7 +337,7 @@ func handleAdminLDAP(w http.ResponseWriter, r *http.Request) {
}
}
deletable := true
for _, restricted := range []string{"displayname", "objectclass", "structuralobjectclass"} {
for _, restricted := range []string{"objectclass", "structuralobjectclass"} {
if strings.EqualFold(attr.Name, restricted) {
deletable = false
break
@ -366,7 +366,7 @@ func handleAdminLDAP(w http.ResponseWriter, r *http.Request) {
config.UserBaseDN,
ldap.ScopeWholeSubtree, ldap.NeverDerefAliases, 0, 0, false,
fmt.Sprintf("(objectClass=organizationalPerson)"),
[]string{"dn", "displayname"},
[]string{"dn", "displayname", "description"},
nil)
sr, err := login.conn.Search(searchRequest)
if err != nil {
@ -375,11 +375,14 @@ func handleAdminLDAP(w http.ResponseWriter, r *http.Request) {
}
for _, ent := range sr.Entries {
mapDnToName[ent.DN] = ent.GetAttributeValue("displayname")
if mapDnToName[ent.DN] == "" {
mapDnToName[ent.DN] = ent.GetAttributeValue("description")
}
}
for _, memdn := range members_dn {
members = append(members, EntryName{
DN: memdn,
DisplayName: mapDnToName[memdn],
DN: memdn,
Name: mapDnToName[memdn],
})
}
}
@ -397,7 +400,7 @@ func handleAdminLDAP(w http.ResponseWriter, r *http.Request) {
config.GroupBaseDN,
ldap.ScopeWholeSubtree, ldap.NeverDerefAliases, 0, 0, false,
fmt.Sprintf("(objectClass=groupOfNames)"),
[]string{"dn", "displayname"},
[]string{"dn", "description"},
nil)
sr, err := login.conn.Search(searchRequest)
if err != nil {
@ -405,12 +408,12 @@ func handleAdminLDAP(w http.ResponseWriter, r *http.Request) {
return
}
for _, ent := range sr.Entries {
mapDnToName[ent.DN] = ent.GetAttributeValue("displayname")
mapDnToName[ent.DN] = ent.GetAttributeValue("description")
}
for _, grpdn := range groups_dn {
groups = append(groups, EntryName{
DN: grpdn,
DisplayName: mapDnToName[grpdn],
DN: grpdn,
Name: mapDnToName[grpdn],
})
}
}
@ -420,7 +423,7 @@ func handleAdminLDAP(w http.ResponseWriter, r *http.Request) {
dn,
ldap.ScopeSingleLevel, ldap.NeverDerefAliases, 0, 0, false,
fmt.Sprintf("(objectclass=*)"),
[]string{"dn", "displayname"},
[]string{"dn", "displayname", "description"},
nil)
sr, err = login.conn.Search(searchRequest)
@ -433,10 +436,14 @@ func handleAdminLDAP(w http.ResponseWriter, r *http.Request) {
children := []Child{}
for _, item := range sr.Entries {
name := item.GetAttributeValue("displayname")
if name == "" {
name = item.GetAttributeValue("description")
}
children = append(children, Child{
DN: item.DN,
Identifier: strings.Split(item.DN, ",")[0],
DisplayName: item.GetAttributeValue("displayname"),
DN: item.DN,
Identifier: strings.Split(item.DN, ",")[0],
Name: name,
})
}
@ -478,15 +485,16 @@ func handleAdminLDAP(w http.ResponseWriter, r *http.Request) {
}
type CreateData struct {
SuperDN string
Path []PathItem
SuperDN string
Path []PathItem
Template string
IdType string
IdValue string
DisplayName string
Description string
StructuralObjectClass string
ObjectClass string
IsTemplated bool
Error string
}
@ -543,35 +551,35 @@ func handleAdminCreate(w http.ResponseWriter, r *http.Request) {
SuperDN: super_dn,
Path: path,
}
data.Template = template
if template == "user" {
data.IdType = config.UserNameAttr
data.StructuralObjectClass = "inetOrgPerson"
data.ObjectClass = "inetOrgPerson\norganizationalPerson\nperson\ntop"
data.IsTemplated = true
} else if template == "group" {
data.IdType = config.UserNameAttr
data.StructuralObjectClass = "groupOfNames"
data.ObjectClass = "groupOfNames\ntop"
data.IsTemplated = true
} else if template == "ou" {
data.IdType = "ou"
data.StructuralObjectClass = "organizationalUnit"
data.ObjectClass = "organizationalUnit\ntop"
data.IsTemplated = true
} else {
data.IdType = "cn"
data.ObjectClass = "top"
data.Template = ""
}
if r.Method == "POST" {
r.ParseForm()
if !data.IsTemplated {
if data.Template == "" {
data.IdType = strings.TrimSpace(strings.Join(r.Form["idtype"], ""))
data.StructuralObjectClass = strings.TrimSpace(strings.Join(r.Form["soc"], ""))
data.ObjectClass = strings.Join(r.Form["oc"], "")
}
data.IdValue = strings.TrimSpace(strings.Join(r.Form["idvalue"], ""))
data.DisplayName = strings.TrimSpace(strings.Join(r.Form["displayname"], ""))
data.Description = strings.TrimSpace(strings.Join(r.Form["description"], ""))
object_class := []string{}
for _, oc := range strings.Split(data.ObjectClass, "\n") {
@ -593,11 +601,15 @@ func handleAdminCreate(w http.ResponseWriter, r *http.Request) {
dn := data.IdType + "=" + data.IdValue + "," + super_dn
req := ldap.NewAddRequest(dn, nil)
req.Attribute("objectClass", object_class)
req.Attribute("structuralObjectClass",
[]string{data.StructuralObjectClass})
if data.StructuralObjectClass != "" {
req.Attribute("structuralObjectClass", []string{data.StructuralObjectClass})
}
if data.DisplayName != "" {
req.Attribute("displayname", []string{data.DisplayName})
}
if data.Description != "" {
req.Attribute("description", []string{data.Description})
}
err := login.conn.Add(req)
if err != nil {

View File

@ -36,19 +36,28 @@
</div>
<div class="form-group">
<label for="idtype">Type d'identifiant:</label>
<input type="text" {{if .IsTemplated}}disabled="disabled"{{end}} id="idtype" name="idtype" class="form-control" value="{{ .IdType }}" />
</div>
<div class="form-group">
<label for="displayname">Nom:</label>
<input type="text" id="displayname" name="displayname" class="form-control" value="{{ .DisplayName }}" />
<input type="text" {{if .Template}}disabled="disabled"{{end}} id="idtype" name="idtype" class="form-control" value="{{ .IdType }}" />
</div>
{{ if eq .Template "user" }}
<div class="form-group">
<label for="displayname">Nom:</label>
<input type="text" id="displayname" name="displayname" class="form-control" value="{{ .DisplayName }}" />
</div>
<input type="hidden" name="description" value="" />
{{ else }}
<div class="form-group">
<label for="description">Description:</label>
<input type="text" id="description" name="description" class="form-control" value="{{ .Description }}" />
</div>
<input type="hidden" name="displayname" value="" />
{{ end }}
<div class="form-group">
<label for="soc">StructuralObjectClass:</label>
<input type="text" {{if .IsTemplated}}disabled="disabled"{{end}} id="soc" name="soc" class="form-control" value="{{ .StructuralObjectClass }}" />
<input type="text" {{if .Template}}disabled="disabled"{{end}} id="soc" name="soc" class="form-control" value="{{ .StructuralObjectClass }}" />
</div>
<div class="form-group">
<label for="oc">ObjectClass:</label>
<textarea rows="5" {{if .IsTemplated}}disabled="disabled"{{end}} id="oc" name="oc" class="form-control">{{ .ObjectClass }}</textarea>
<textarea rows="5" {{if .Template}}disabled="disabled"{{end}} id="oc" name="oc" class="form-control">{{ .ObjectClass }}</textarea>
</div>
<button type="submit" class="btn btn-primary">Créer l'objet</button>
</form>

View File

@ -22,7 +22,7 @@
{{$group.GetAttributeValue $root.GroupNameAttr}}
</a>
</td>
<td>{{$group.GetAttributeValue "displayname"}}</td>
<td>{{$group.GetAttributeValue "description"}}</td>
</tr>
{{end}}
{{end}}

View File

@ -30,7 +30,7 @@
{{.Identifier}}
</a>
</td>
<td>{{.DisplayName}}</td>
<td>{{.Name}}</td>
</tr>
{{end}}
</tbody>
@ -125,7 +125,7 @@
{{range .Members}}
<div class="row mt-4">
<div class="col-md-3">
<strong>{{.DisplayName}}</strong>
<strong>{{.Name}}</strong>
</div>
<div class="col-md-5">
<a href="/admin/ldap/{{.DN}}">{{.DN}}</a>
@ -162,7 +162,7 @@
{{range .Groups}}
<div class="row mt-4">
<div class="col-md-3">
<strong>{{.DisplayName}}</strong>
<strong>{{.Name}}</strong>
</div>
<div class="col-md-5">
<a href="/admin/ldap/{{.DN}}">{{.DN}}</a>