diff options
Diffstat (limited to 'write.go')
-rw-r--r-- | write.go | 44 |
1 files changed, 44 insertions, 0 deletions
@@ -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) { |