From e51bff05d225ce68143b0aefa282116fe5eb587f Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Sun, 9 Feb 2020 22:43:24 +0100 Subject: [PATCH] Also show groups/members when none are present for some object classes --- admin.go | 49 ++++++++++++++++++++++++++++++--------- templates/admin_ldap.html | 6 ++--- 2 files changed, 41 insertions(+), 14 deletions(-) diff --git a/admin.go b/admin.go index 70d555f..def23d6 100644 --- a/admin.go +++ b/admin.go @@ -123,11 +123,15 @@ func handleAdminGroups(w http.ResponseWriter, r *http.Request) { type AdminLDAPTplData struct { DN string - Members []EntryName - Groups []EntryName - Props map[string]*PropValues - Children []Child + Path []PathItem + Children []Child + Props map[string]*PropValues + + HasMembers bool + Members []EntryName + HasGroups bool + Groups []EntryName Error string Success bool @@ -151,6 +155,7 @@ type PathItem struct { } type PropValues struct { + Name string Values []string Editable bool } @@ -306,8 +311,9 @@ func handleAdminLDAP(w http.ResponseWriter, r *http.Request) { props := make(map[string]*PropValues) for _, attr := range object.Attributes { - if attr.Name != dn_last_attr { - if existing, ok := props[attr.Name]; ok { + name_lower := strings.ToLower(attr.Name) + if name_lower != dn_last_attr { + if existing, ok := props[name_lower]; ok { existing.Values = append(existing.Values, attr.Values...) } else { editable := true @@ -320,7 +326,8 @@ func handleAdminLDAP(w http.ResponseWriter, r *http.Request) { break } } - props[attr.Name] = &PropValues{ + props[name_lower] = &PropValues{ + Name: attr.Name, Values: attr.Values, Editable: editable, } @@ -415,13 +422,33 @@ func handleAdminLDAP(w http.ResponseWriter, r *http.Request) { }) } + // Checkup objectclass + objectClass := []string{} + if val, ok := props["objectclass"]; ok { + objectClass = val.Values + } + hasMembers, hasGroups := false, false + for _, oc := range objectClass { + if strings.EqualFold(oc, "organizationalperson") || strings.EqualFold(oc, "person") { + hasGroups = true + } + if strings.EqualFold(oc, "groupOfNames") { + hasMembers = true + } + } + templateAdminLDAP.Execute(w, &AdminLDAPTplData{ DN: dn, - Members: members, - Groups: groups, - Props: props, - Children: children, + Path: path, + Children: children, + Props: props, + + HasMembers: len(members) > 0 || hasMembers, + Members: members, + HasGroups: len(groups) > 0 || hasGroups, + Groups: groups, + Error: dError, Success: dSuccess, }) diff --git a/templates/admin_ldap.html b/templates/admin_ldap.html index b72f587..fa4b934 100644 --- a/templates/admin_ldap.html +++ b/templates/admin_ldap.html @@ -51,7 +51,7 @@ {{range $key, $value := .Props}} {{if $value.Editable}}
-
{{$key}}
+
{{$value.Name}}
@@ -106,7 +106,7 @@
-{{if .Members}} +{{if .HasMembers}}
Membres
@@ -143,7 +143,7 @@
{{end}} -{{if .Groups}} +{{if .HasGroups}}
Membre de