53 lines
1.4 KiB
Go
53 lines
1.4 KiB
Go
package user
|
|
|
|
import (
|
|
"RenewCMS/api/pkg/apperr"
|
|
"RenewCMS/api/pkg/payload"
|
|
"RenewCMS/internal/domain/role"
|
|
"RenewCMS/internal/infrastructure/useCases"
|
|
"encoding/json"
|
|
"errors"
|
|
"net/http"
|
|
)
|
|
|
|
func userListItemOf(entry useCases.DirectoryEntry) userListItem {
|
|
return userListItem{
|
|
ID: entry.ID,
|
|
Kind: entry.Kind,
|
|
Username: entry.Username,
|
|
DisplayName: entry.DisplayName,
|
|
Email: entry.Email,
|
|
Role: payload.RoleRefPtrOf(entry.Role),
|
|
RoleAssignedBy: payload.RoleAssignerPtrOf(entry.RoleAssignedBy),
|
|
Status: entry.Status,
|
|
CreatedAt: entry.CreatedAt,
|
|
}
|
|
}
|
|
|
|
func writeNoStoreJSON(w http.ResponseWriter, status int, payload any) {
|
|
body, err := json.Marshal(payload)
|
|
if err != nil {
|
|
http.Error(w, "Internal server error", http.StatusInternalServerError)
|
|
return
|
|
}
|
|
w.Header().Set("Cache-Control", "no-store")
|
|
w.WriteHeader(status)
|
|
_, _ = w.Write(body)
|
|
}
|
|
|
|
func writeRoleRefusal(w http.ResponseWriter, err error) bool {
|
|
var escalation role.EscalationError
|
|
switch {
|
|
case errors.As(err, &escalation):
|
|
w.Header().Set(apperr.EscalationHeader, escalation.Key)
|
|
http.Error(w, apperr.EscalationErrorMessage, http.StatusForbidden)
|
|
case errors.Is(err, role.ErrRoleLocked):
|
|
http.Error(w, apperr.RoleLockedErrorMessage, http.StatusForbidden)
|
|
case errors.Is(err, role.ErrUnknownRole):
|
|
http.Error(w, apperr.InvalidRoleErrorMessage, http.StatusBadRequest)
|
|
default:
|
|
return false
|
|
}
|
|
return true
|
|
}
|