Files
LitePan/internal/api/api_keys.go
T
2026-07-27 19:31:43 +08:00

144 lines
2.9 KiB
Go

package api
import (
"net/http"
"litepan/internal/apikey"
)
func (h *Handler) listApiKeys(w http.ResponseWriter, r *http.Request) {
if !ensureServiceReady(w, h.apiKeys != nil) {
return
}
data, err := h.apiKeys.List(r.Context())
if err != nil {
writeErr(w, err)
return
}
writeOK(w, data)
}
type apiKeyCreateDTO struct {
Name string `json:"name"`
KeyType string `json:"key_type"`
ExpiresDays *int `json:"expires_days"`
Status string `json:"status"`
Note string `json:"note"`
}
type apiKeyUpdateDTO struct {
Name *string `json:"name"`
KeyType *string `json:"key_type"`
ExpiresDays *int `json:"expires_days"`
Status *string `json:"status"`
Note *string `json:"note"`
}
type rotateStrmKeyDTO struct {
ApplyToExistingStrm bool `json:"apply_to_existing_strm"`
}
func (h *Handler) createApiKey(w http.ResponseWriter, r *http.Request) {
if !ensureServiceReady(w, h.apiKeys != nil) {
return
}
var in apiKeyCreateDTO
if err := decodeJSON(r, &in); err != nil {
writeErr(w, err)
return
}
data, err := h.apiKeys.Create(r.Context(), apikey.CreateInput{
Name: in.Name,
KeyType: in.KeyType,
ExpiresDays: in.ExpiresDays,
Status: in.Status,
Note: in.Note,
})
if err != nil {
writeErr(w, err)
return
}
writeOK(w, data)
}
func (h *Handler) updateApiKey(w http.ResponseWriter, r *http.Request) {
if !ensureServiceReady(w, h.apiKeys != nil) {
return
}
id, err := pathID(r)
if err != nil {
writeErr(w, err)
return
}
var in apiKeyUpdateDTO
if err := decodeJSON(r, &in); err != nil {
writeErr(w, err)
return
}
if in.ExpiresDays != nil && *in.ExpiresDays < 0 {
in.ExpiresDays = nil
}
data, err := h.apiKeys.Update(r.Context(), id, apikey.UpdateInput{
Name: in.Name,
KeyType: in.KeyType,
ExpiresDays: in.ExpiresDays,
Status: in.Status,
Note: in.Note,
})
if err != nil {
writeErr(w, err)
return
}
writeOK(w, data)
}
func (h *Handler) toggleApiKey(w http.ResponseWriter, r *http.Request) {
if !ensureServiceReady(w, h.apiKeys != nil) {
return
}
id, err := pathID(r)
if err != nil {
writeErr(w, err)
return
}
data, err := h.apiKeys.Toggle(r.Context(), id)
if err != nil {
writeErr(w, err)
return
}
writeOK(w, data)
}
func (h *Handler) deleteApiKey(w http.ResponseWriter, r *http.Request) {
if !ensureServiceReady(w, h.apiKeys != nil) {
return
}
id, err := pathID(r)
if err != nil {
writeErr(w, err)
return
}
if err := h.apiKeys.Delete(r.Context(), id); err != nil {
writeErr(w, err)
return
}
writeOK(w, map[string]any{"id": id})
}
func (h *Handler) rotateStrmKey(w http.ResponseWriter, r *http.Request) {
if !ensureServiceReady(w, h.apiKeys != nil) {
return
}
var in rotateStrmKeyDTO
if err := decodeJSON(r, &in); err != nil {
writeErr(w, err)
return
}
data, err := h.apiKeys.RotateStrmKey(r.Context(), in.ApplyToExistingStrm)
if err != nil {
writeErr(w, err)
return
}
writeOK(w, data)
}