mirror of
https://github.com/MirageNetwork/MirageServer.git
synced 2026-04-22 23:57:23 +08:00
f43aed2be7
Signed-off-by: Chenyang Gao <gps949@outlook.com>
88 lines
1.9 KiB
Go
88 lines
1.9 KiB
Go
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")
|
|
}
|
|
}
|