github.com/coincircle/mattermost-server@v4.8.1-0.20180321182714-9d701c704416+incompatible/app/plugin/ldapextras/plugin.go (about) 1 // Copyright (c) 2017-present Mattermost, Inc. All Rights Reserved. 2 // See License.txt for license information. 3 4 package ldapextras 5 6 import ( 7 "fmt" 8 "net/http" 9 "sync/atomic" 10 11 l4g "github.com/alecthomas/log4go" 12 "github.com/gorilla/mux" 13 14 "github.com/mattermost/mattermost-server/app/plugin" 15 "github.com/mattermost/mattermost-server/model" 16 ) 17 18 type Plugin struct { 19 plugin.Base 20 api plugin.API 21 configuration atomic.Value 22 } 23 24 func (p *Plugin) Initialize(api plugin.API) { 25 p.api = api 26 p.OnConfigurationChange() 27 api.PluginRouter().HandleFunc("/users/{user_id:[A-Za-z0-9]+}/attributes", p.handleGetAttributes).Methods("GET") 28 } 29 30 func (p *Plugin) config() *Configuration { 31 return p.configuration.Load().(*Configuration) 32 } 33 34 func (p *Plugin) OnConfigurationChange() { 35 var configuration Configuration 36 if err := p.api.LoadPluginConfiguration(&configuration); err != nil { 37 l4g.Error(err.Error()) 38 } 39 p.configuration.Store(&configuration) 40 } 41 42 func (p *Plugin) handleGetAttributes(w http.ResponseWriter, r *http.Request) { 43 config := p.config() 44 if !config.Enabled || len(config.Attributes) == 0 { 45 http.Error(w, "This plugin is not configured", http.StatusNotImplemented) 46 return 47 } 48 49 session, err := p.api.GetSessionFromRequest(r) 50 51 if session == nil || err != nil { 52 http.Error(w, "Invalid session", http.StatusUnauthorized) 53 return 54 } 55 56 // Only requires a valid session, no other permission checks required 57 58 params := mux.Vars(r) 59 id := params["user_id"] 60 61 if len(id) != 26 { 62 http.Error(w, "Invalid user id", http.StatusUnauthorized) 63 } 64 65 attributes, err := p.api.GetLdapUserAttributes(id, config.Attributes) 66 if err != nil { 67 http.Error(w, fmt.Sprintf("Errored getting attributes: %v", err.Error()), http.StatusInternalServerError) 68 } 69 70 w.Write([]byte(model.MapToJson(attributes))) 71 }