Files
MirageServer/controller/console_api_common.go
2023-03-25 15:49:58 +08:00

135 lines
3.0 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package controller
import (
"bytes"
_ "embed"
"encoding/json"
"html/template"
"net/http"
"github.com/rs/zerolog/log"
)
func (h *Mirage) ListIdps(
w http.ResponseWriter,
r *http.Request,
) {
h.doAPIResponse(w, "", h.cfg.IdpList)
}
// API调用的统一响应发报
// @msg 响应状态成功时data不为nil则忽略自动设置为success否则拼接error-{msg}
// @data 响应数据key值为data的json对象
func (h *Mirage) doAPIResponse(writer http.ResponseWriter, msg string, data interface{}) {
res := APIResponse{}
if msg == "" {
res.Status = "success"
res.Data = data
} else {
res.Status = "error-" + msg
}
writer.Header().Set("Content-Type", "application/json; charset=utf-8")
writer.WriteHeader(http.StatusOK)
err := json.NewEncoder(writer).Encode(&res)
if err != nil {
log.Error().
Caller().
Err(err).
Msg("Failed to write response")
}
}
//go:embed templates/BadCode.html
var errTemplate string
// cgao6: 用这个向前端返回错误页面
func (h *Mirage) ErrMessage(
w http.ResponseWriter,
r *http.Request,
code int,
msg string,
) {
errT := template.Must(template.New("err").Parse(errTemplate))
config := map[string]interface{}{
"ErrCode": code,
"ErrMsg": msg,
}
var payload bytes.Buffer
if err := errT.Execute(&payload, config); err != nil {
log.Error().
Str("handler", "ErrMessage").
Err(err).
Msg("Could not render Error template")
w.Header().Set("Content-Type", "text/plain; charset=utf-8")
w.WriteHeader(http.StatusInternalServerError)
_, err := w.Write([]byte("Could not render Error template"))
if err != nil {
log.Error().
Caller().
Err(err).
Msg("Failed to write response")
}
return
}
w.Header().Set("Content-Type", "text/html; charset=utf-8")
w.WriteHeader(code)
_, err := w.Write(payload.Bytes())
if err != nil {
log.Error().
Caller().
Err(err).
Msg("Failed to write response")
}
}
//go:embed templates/memberNoConsole.html
var noConsoleTemplate string
// cgao6: 用这个向前端返回普通用户无权登录控制台
func (h *Mirage) renderNoConsole(
w http.ResponseWriter,
r *http.Request,
userName string,
orgName string,
) {
noConsoleT := template.Must(template.New("noConsole").Parse(noConsoleTemplate))
config := map[string]interface{}{
"UserName": userName,
"OrgName": orgName,
}
var payload bytes.Buffer
if err := noConsoleT.Execute(&payload, config); err != nil {
log.Error().
Str("handler", "ErrMessage").
Err(err).
Msg("Could not render noConsole template")
w.Header().Set("Content-Type", "text/plain; charset=utf-8")
w.WriteHeader(http.StatusInternalServerError)
_, err := w.Write([]byte("Could not render noConsole template"))
if err != nil {
log.Error().
Caller().
Err(err).
Msg("Failed to write response")
}
return
}
w.Header().Set("Content-Type", "text/html; charset=utf-8")
w.WriteHeader(http.StatusOK)
_, err := w.Write(payload.Bytes())
if err != nil {
log.Error().
Caller().
Err(err).
Msg("Failed to write response")
}
}