aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMrArmonius <mrarmonius@gmail.com>2021-07-12 17:08:56 +0200
committerGitea <gitea@fake.local>2021-07-22 10:41:06 +0200
commit3d7b4a9f68f5b5c06bc6c039c90ee8406a56e500 (patch)
tree7e3f9f48b0213bf04413f387826b7ea173cca337
parent353f9600f3f1ce59c6faa825203f50b48017e44f (diff)
downloadguichet-3d7b4a9f68f5b5c06bc6c039c90ee8406a56e500.tar.gz
guichet-3d7b4a9f68f5b5c06bc6c039c90ee8406a56e500.zip
Add Datalist to help search users or group in LDAP admin page
-rw-r--r--admin.go109
-rw-r--r--templates/admin_ldap.html14
2 files changed, 75 insertions, 48 deletions
diff --git a/admin.go b/admin.go
index 0f78bd7..5314ea8 100644
--- a/admin.go
+++ b/admin.go
@@ -132,6 +132,8 @@ type AdminLDAPTplData struct {
HasGroups bool
Groups []EntryName
+ ListMemGro map[string]string
+
Error string
Success bool
}
@@ -360,32 +362,30 @@ func handleAdminLDAP(w http.ResponseWriter, r *http.Request) {
}
members := []EntryName{}
- if len(members_dn) > 0 {
- mapDnToName := make(map[string]string)
- searchRequest = ldap.NewSearchRequest(
- config.UserBaseDN,
- ldap.ScopeWholeSubtree, ldap.NeverDerefAliases, 0, 0, false,
- fmt.Sprintf("(objectClass=organizationalPerson)"),
- []string{"dn", "displayname", "description"},
- nil)
- sr, err := login.conn.Search(searchRequest)
- if err != nil {
- http.Error(w, err.Error(), http.StatusInternalServerError)
- return
- }
- 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,
- Name: mapDnToName[memdn],
- })
+ mapDnToNameMember := make(map[string]string)
+ searchRequest = ldap.NewSearchRequest(
+ config.UserBaseDN,
+ ldap.ScopeWholeSubtree, ldap.NeverDerefAliases, 0, 0, false,
+ fmt.Sprintf("(objectClass=organizationalPerson)"),
+ []string{"dn", "displayname", "description"},
+ nil)
+ sr, err = login.conn.Search(searchRequest)
+ if err != nil {
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+ for _, ent := range sr.Entries {
+ mapDnToNameMember[ent.DN] = ent.GetAttributeValue("displayname")
+ if mapDnToNameMember[ent.DN] == "" {
+ mapDnToNameMember[ent.DN] = ent.GetAttributeValue("description")
}
}
+ for _, memdn := range members_dn {
+ members = append(members, EntryName{
+ DN: memdn,
+ Name: mapDnToNameMember[memdn],
+ })
+ }
groups_dn := []string{}
if gp, ok := props["memberof"]; ok {
@@ -394,28 +394,26 @@ func handleAdminLDAP(w http.ResponseWriter, r *http.Request) {
}
groups := []EntryName{}
- if len(groups_dn) > 0 {
- mapDnToName := make(map[string]string)
- searchRequest = ldap.NewSearchRequest(
- config.GroupBaseDN,
- ldap.ScopeWholeSubtree, ldap.NeverDerefAliases, 0, 0, false,
- fmt.Sprintf("(objectClass=groupOfNames)"),
- []string{"dn", "description"},
- nil)
- sr, err := login.conn.Search(searchRequest)
- if err != nil {
- http.Error(w, err.Error(), http.StatusInternalServerError)
- return
- }
- for _, ent := range sr.Entries {
- mapDnToName[ent.DN] = ent.GetAttributeValue("description")
- }
- for _, grpdn := range groups_dn {
- groups = append(groups, EntryName{
- DN: grpdn,
- Name: mapDnToName[grpdn],
- })
- }
+ mapDnToNameGroup := make(map[string]string)
+ searchRequest = ldap.NewSearchRequest(
+ config.GroupBaseDN,
+ ldap.ScopeWholeSubtree, ldap.NeverDerefAliases, 0, 0, false,
+ fmt.Sprintf("(objectClass=groupOfNames)"),
+ []string{"dn", "description"},
+ nil)
+ sr, err = login.conn.Search(searchRequest)
+ if err != nil {
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+ for _, ent := range sr.Entries {
+ mapDnToNameGroup[ent.DN] = ent.GetAttributeValue("description")
+ }
+ for _, grpdn := range groups_dn {
+ groups = append(groups, EntryName{
+ DN: grpdn,
+ Name: mapDnToNameGroup[grpdn],
+ })
}
// Get children
@@ -465,6 +463,23 @@ func handleAdminLDAP(w http.ResponseWriter, r *http.Request) {
}
}
+ //Get the members or groups existing
+ var ExistList map[string]string
+ if hasMembers {
+ ExistList = mapDnToNameMember
+ //Suppress the members already in the group
+ for _, value := range members {
+ delete(ExistList, value.DN)
+ }
+ } else if hasGroups {
+ ExistList = mapDnToNameGroup
+ //Delete the groups where the user is already a member
+ for _, value := range groups {
+ delete(ExistList, value.DN)
+ }
+ }
+
+
templateAdminLDAP.Execute(w, &AdminLDAPTplData{
DN: dn,
@@ -479,6 +494,8 @@ func handleAdminLDAP(w http.ResponseWriter, r *http.Request) {
HasGroups: len(groups) > 0 || hasGroups,
Groups: groups,
+ ListMemGro: ExistList,
+
Error: dError,
Success: dSuccess,
})
diff --git a/templates/admin_ldap.html b/templates/admin_ldap.html
index 7b274dc..d1aab29 100644
--- a/templates/admin_ldap.html
+++ b/templates/admin_ldap.html
@@ -146,7 +146,12 @@
<div class="col-md-3"><strong>Ajouter au groupe :</strong>
</div>
<div class="col-md-5">
- <input class="form-control" type="text" name="values" placeholder="Utilisateur..." />
+ <input class="form-control" type="text" list="users" name="values" placeholder="Utilisateur..." />
+ <datalist id="users">
+ {{ range $key, $value := .ListMemGro}}
+ <option value={{$key}}>{{$value}}</option>
+ {{end}}
+ </datalist>
</div>
<div class="col-md-2">
<input type="submit" value="Ajouter" class="form-control btn btn-success btn-sm" />
@@ -182,7 +187,12 @@
<div class="col-md-3"><strong>Nouveau groupe :</strong>
</div>
<div class="col-md-5">
- <input class="form-control" type="text" name="group" placeholder="Groupe..." />
+ <input class="form-control" list="groups" type="text" name="group" placeholder="Groupe..." />
+ <datalist id="groups">
+ {{ range $key, $value := .ListMemGro}}
+ <option value={{$key}}>{{$value}}</option>
+ {{end}}
+ </datalist>
</div>
<div class="col-md-2">
<input type="submit" value="Ajouter" class="form-control btn btn-success btn-sm" />