diff options
author | Joram Wilander <jwawilander@gmail.com> | 2017-09-01 14:28:15 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-09-01 14:28:15 -0400 |
commit | e2042c4b6579aa367bdf764ddecbca4e1bd38772 (patch) | |
tree | dc92c71098412235cb3a582daafd395af7b9afe4 /app/plugin/ldapextras/plugin.go | |
parent | b6456a675d140d6d80eb0874a5b6a89008e28eaa (diff) | |
download | chat-e2042c4b6579aa367bdf764ddecbca4e1bd38772.tar.gz chat-e2042c4b6579aa367bdf764ddecbca4e1bd38772.tar.bz2 chat-e2042c4b6579aa367bdf764ddecbca4e1bd38772.zip |
Add built-in plugin for getting LDAP attributes (#7317)
Diffstat (limited to 'app/plugin/ldapextras/plugin.go')
-rw-r--r-- | app/plugin/ldapextras/plugin.go | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/app/plugin/ldapextras/plugin.go b/app/plugin/ldapextras/plugin.go new file mode 100644 index 000000000..3198125aa --- /dev/null +++ b/app/plugin/ldapextras/plugin.go @@ -0,0 +1,73 @@ +// Copyright (c) 2017-present Mattermost, Inc. All Rights Reserved. +// See License.txt for license information. + +package ldapextras + +import ( + "fmt" + "net/http" + "sync/atomic" + + l4g "github.com/alecthomas/log4go" + "github.com/gorilla/mux" + + "github.com/mattermost/platform/app/plugin" + "github.com/mattermost/platform/model" + "github.com/mattermost/platform/utils" +) + +type Plugin struct { + plugin.Base + api plugin.API + configuration atomic.Value +} + +func (p *Plugin) Initialize(api plugin.API) { + p.api = api + p.OnConfigurationChange() + api.PluginRouter().HandleFunc("/users/{user_id:[A-Za-z0-9]+}/attributes", p.handleGetAttributes).Methods("GET") +} + +func (p *Plugin) config() *Configuration { + return p.configuration.Load().(*Configuration) +} + +func (p *Plugin) OnConfigurationChange() { + var configuration Configuration + if err := p.api.LoadPluginConfiguration(&configuration); err != nil { + l4g.Error(err.Error()) + } + p.configuration.Store(&configuration) +} + +func (p *Plugin) handleGetAttributes(w http.ResponseWriter, r *http.Request) { + config := p.config() + if !config.Enabled || len(config.Attributes) == 0 { + http.Error(w, "This plugin is not configured", http.StatusNotImplemented) + return + } + + session, err := p.api.GetSessionFromRequest(r) + + if session == nil || err != nil { + http.Error(w, "Invalid session", http.StatusUnauthorized) + return + } + + // Only requires a valid session, no other permission checks required + + params := mux.Vars(r) + id := params["user_id"] + + if len(id) != 26 { + http.Error(w, "Invalid user id", http.StatusUnauthorized) + } + + attributes, err := p.api.GetLdapUserAttributes(id, config.Attributes) + if err != nil { + err.Translate(utils.T) + http.Error(w, fmt.Sprintf("Errored getting attributes: %v", err.Error()), http.StatusInternalServerError) + } + + w.Write([]byte(model.MapToJson(attributes))) +} |