From 1a20a64eff34336789c0e3b41db1de727e3fe998 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Tue, 9 Mar 2021 18:30:59 +0100 Subject: Refactoring --- write.go | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) (limited to 'write.go') diff --git a/write.go b/write.go index 41d00c6..e4c7de1 100644 --- a/write.go +++ b/write.go @@ -1,14 +1,58 @@ package main import ( + "encoding/json" "fmt" "strings" ldap "bottin/ldapserver" + consul "github.com/hashicorp/consul/api" message "github.com/lor00x/goldap/message" ) +// Generic item modification function -------- + +func (server *Server) putAttributes(dn string, attrs Entry) error { + prefix, err := dnToConsul(dn) + if err != nil { + return err + } + + for k, valuesNC := range attrs { + path := prefix + "/attribute=" + k + + // Trim spaces and remove empty values + values := []string{} + for _, v := range valuesNC { + vv := strings.TrimSpace(v) + if len(vv) > 0 { + values = append(values, vv) + } + } + + // If we have zero values, delete associated k/v pair + // Otherwise, write new values + if len(values) == 0 { + _, err := server.kv.Delete(path, nil) + if err != nil { + return err + } + } else { + json, err := json.MarshalIndent(values, "", " ") + if err != nil { + return err + } + pair := &consul.KVPair{Key: path, Value: json} + _, err = server.kv.Put(pair, nil) + if err != nil { + return err + } + } + } + return nil +} + // Add request ------------------------ func (server *Server) handleAdd(s ldap.UserState, w ldap.ResponseWriter, m *ldap.Message) { -- cgit v1.2.3