aboutsummaryrefslogtreecommitdiff
path: root/admin.go
diff options
context:
space:
mode:
authorAlex Auvolat <alex@adnab.me>2020-02-09 23:20:44 +0100
committerAlex Auvolat <alex@adnab.me>2020-02-09 23:20:44 +0100
commit08a7ec3292cd538f487e77a850943d5859231767 (patch)
tree02cb7c710b7bceccf2c76fc2df7060425bf3f7ed /admin.go
parent54eb5d623979c2fe4765d20c5683eb853fd29285 (diff)
downloadguichet-08a7ec3292cd538f487e77a850943d5859231767.tar.gz
guichet-08a7ec3292cd538f487e77a850943d5859231767.zip
Ability to delete an object
Diffstat (limited to 'admin.go')
-rw-r--r--admin.go52
1 files changed, 32 insertions, 20 deletions
diff --git a/admin.go b/admin.go
index a28c266..33c63e7 100644
--- a/admin.go
+++ b/admin.go
@@ -128,6 +128,7 @@ type AdminLDAPTplData struct {
Children []Child
CanAddChild bool
Props map[string]*PropValues
+ CanDelete bool
HasMembers bool
Members []EntryName
@@ -174,6 +175,27 @@ func handleAdminLDAP(w http.ResponseWriter, r *http.Request) {
dError := ""
dSuccess := false
+ // Build path
+ path := []PathItem{
+ PathItem{
+ DN: config.BaseDN,
+ Identifier: config.BaseDN,
+ Active: dn == config.BaseDN,
+ },
+ }
+
+ len_base_dn := len(strings.Split(config.BaseDN, ","))
+ dn_split := strings.Split(dn, ",")
+ dn_last_attr := strings.Split(dn_split[0], "=")[0]
+ for i := len_base_dn + 1; i <= len(dn_split); i++ {
+ path = append(path, PathItem{
+ DN: strings.Join(dn_split[len(dn_split)-i:len(dn_split)], ","),
+ Identifier: dn_split[len(dn_split)-i],
+ Active: i == len(dn_split),
+ })
+ }
+
+ // Handle modification operation
if r.Method == "POST" {
r.ParseForm()
action := strings.Join(r.Form["action"], "")
@@ -266,29 +288,18 @@ func handleAdminLDAP(w http.ResponseWriter, r *http.Request) {
} else {
dSuccess = true
}
+ } else if action == "delete-object" {
+ del_request := ldap.NewDelRequest(dn, nil)
+ err := login.conn.Del(del_request)
+ if err != nil {
+ dError = err.Error()
+ } else {
+ http.Redirect(w, r, "/admin/ldap/" + strings.Join(dn_split[1:], ","), http.StatusFound)
+ return
+ }
}
}
- // Build path
- path := []PathItem{
- PathItem{
- DN: config.BaseDN,
- Identifier: config.BaseDN,
- Active: dn == config.BaseDN,
- },
- }
-
- len_base_dn := len(strings.Split(config.BaseDN, ","))
- dn_split := strings.Split(dn, ",")
- dn_last_attr := strings.Split(dn_split[0], "=")[0]
- for i := len_base_dn + 1; i <= len(dn_split); i++ {
- path = append(path, PathItem{
- DN: strings.Join(dn_split[len(dn_split)-i:len(dn_split)], ","),
- Identifier: dn_split[len(dn_split)-i],
- Active: i == len(dn_split),
- })
- }
-
// Get object and parse it
searchRequest := ldap.NewSearchRequest(
dn,
@@ -445,6 +456,7 @@ func handleAdminLDAP(w http.ResponseWriter, r *http.Request) {
Children: children,
Props: props,
CanAddChild: dn_last_attr == "ou",
+ CanDelete: dn != config.BaseDN && len(children) == 0,
HasMembers: len(members) > 0 || hasMembers,
Members: members,