mirror of
https://github.com/MirageNetwork/MirageServer.git
synced 2025-10-03 23:56:23 +08:00
135 lines
3.0 KiB
Go
135 lines
3.0 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")
|
||
}
|
||
}
|
||
|
||
//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")
|
||
}
|
||
}
|