github.com/demisto/mattermost-server@v4.9.0-rc3+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  }