84 строки
2.2 KiB
Go
84 строки
2.2 KiB
Go
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
|
// See License.txt for license information.
|
|
|
|
package app
|
|
|
|
import (
|
|
"html/template"
|
|
"net/http"
|
|
|
|
"github.com/mattermost/mattermost-server/model"
|
|
)
|
|
|
|
func (a *App) isExtensionSupportEnabled() bool {
|
|
return *a.Config().ExtensionSettings.EnableExperimentalExtensions
|
|
}
|
|
|
|
func (a *App) isExtensionValid(extensionId string) bool {
|
|
extensionIsValid := false
|
|
extensionIDs := a.Config().ExtensionSettings.AllowedExtensionsIDs
|
|
|
|
for _, id := range extensionIDs {
|
|
if extensionId == id {
|
|
extensionIsValid = true
|
|
}
|
|
}
|
|
|
|
return extensionIsValid
|
|
}
|
|
|
|
func (a *App) ValidateExtension(extensionId string) *model.AppError {
|
|
enabled := a.isExtensionSupportEnabled()
|
|
if !enabled {
|
|
return model.NewAppError("completeSaml", "api.user.saml.extension_unsupported", nil, "", http.StatusInternalServerError)
|
|
}
|
|
|
|
valid := a.isExtensionValid(extensionId)
|
|
if !valid {
|
|
params := map[string]interface{}{"ExtensionId": extensionId}
|
|
return model.NewAppError("completeSaml", "api.user.saml.invalid_extension", params, "", http.StatusInternalServerError)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (a *App) SendMessageToExtension(w http.ResponseWriter, extensionId string, token string) *model.AppError {
|
|
var err error
|
|
var t *template.Template
|
|
if len(extensionId) == 0 {
|
|
return model.NewAppError("completeSaml", "api.user.saml.extension_id.app_error", nil, "", http.StatusInternalServerError)
|
|
}
|
|
|
|
t = template.New("complete_saml_extension_body")
|
|
t, err = t.ParseFiles("templates/complete_saml_extension_body.html")
|
|
|
|
if err != nil {
|
|
return model.NewAppError("completeSaml", "api.user.saml.app_error", nil, "err="+err.Error(), http.StatusInternalServerError)
|
|
}
|
|
|
|
w.Header().Set("Content-Type", "text/html")
|
|
w.WriteHeader(http.StatusOK)
|
|
|
|
var errMessage string
|
|
if len(token) == 0 {
|
|
loginError := model.NewAppError("completeSaml", "api.user.saml.app_error", nil, "", http.StatusInternalServerError)
|
|
errMessage = loginError.Message
|
|
}
|
|
|
|
data := struct {
|
|
ExtensionId string
|
|
Token string
|
|
Error string
|
|
}{
|
|
extensionId,
|
|
token,
|
|
errMessage,
|
|
}
|
|
|
|
if err := t.Execute(w, data); err != nil {
|
|
return model.NewAppError("completeSaml", "api.user.saml.app_error", nil, "err="+err.Error(), http.StatusInternalServerError)
|
|
}
|
|
|
|
return nil
|
|
}
|