aboutsummaryrefslogtreecommitdiff
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
parent54eb5d623979c2fe4765d20c5683eb853fd29285 (diff)
downloadguichet-08a7ec3292cd538f487e77a850943d5859231767.tar.gz
guichet-08a7ec3292cd538f487e77a850943d5859231767.zip
Ability to delete an object
-rw-r--r--admin.go52
-rw-r--r--templates/admin_ldap.html16
2 files changed, 48 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,
diff --git a/templates/admin_ldap.html b/templates/admin_ldap.html
index 3ceed7d..193f4e6 100644
--- a/templates/admin_ldap.html
+++ b/templates/admin_ldap.html
@@ -190,6 +190,22 @@
</div>
{{end}}
+{{if .CanDelete}}
+ <hr class="mt-4">
+ <h5 class="mt-4">Supprimer l'objet</h5>
+ <div class="alert alert-danger">
+ Attention, cette opération est irrévocable !
+ </div>
+ <form method="POST" onsubmit="return confirm('Supprimer cet objet DÉFINITIVEMENT ?');">
+ <div class="form-row">
+ <input type="hidden" name="action" value="delete-object" />
+ <div class="col-sm-5"></div>
+ <input type="submit" value="Supprimer l'objet" class="form-control btn btn-danger col-sm-2" />
+ <div class="col-sm-5"></div>
+ </div>
+ </form>
+{{end}}
+
<hr class="mt-4" />
{{end}}