mirror of
https://github.com/hashicorp/vault.git
synced 2026-05-12 08:06:59 +02:00
88 lines
2.3 KiB
Go
88 lines
2.3 KiB
Go
// Copyright IBM Corp. 2026
|
|
// SPDX-License-Identifier: BUSL-1.1
|
|
|
|
package http
|
|
|
|
import (
|
|
"io"
|
|
"net/http"
|
|
|
|
"github.com/hashicorp/vault/vault"
|
|
)
|
|
|
|
func handleSysGenerateRootAttempt(core *vault.Core, generateStrategy vault.GenerateRootStrategy) http.Handler {
|
|
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
switch r.Method {
|
|
case "GET":
|
|
handleSysGenerateRootAttemptGet(core, w, r, "")
|
|
case "POST", "PUT":
|
|
handleSysGenerateRootAttemptPut(core, w, r, generateStrategy)
|
|
case "DELETE":
|
|
handleSysGenerateRootAttemptDelete(core, w, r)
|
|
default:
|
|
respondError(w, http.StatusMethodNotAllowed, nil)
|
|
}
|
|
})
|
|
}
|
|
|
|
func handleSysGenerateRootAttemptGet(core *vault.Core, w http.ResponseWriter, r *http.Request, otp string) {
|
|
ctx, cancel := core.GetContext()
|
|
defer cancel()
|
|
|
|
status, code, err := vault.HandleSysGenerateRootAttemptGet(ctx, core, otp, true)
|
|
if err != nil {
|
|
respondError(w, code, err)
|
|
return
|
|
}
|
|
|
|
respondOk(w, status)
|
|
}
|
|
|
|
func handleSysGenerateRootAttemptPut(core *vault.Core, w http.ResponseWriter, r *http.Request, generateStrategy vault.GenerateRootStrategy) {
|
|
// Parse the request
|
|
var req vault.GenerateRootInitRequest
|
|
if _, err := parseJSONRequest(core.PerfStandby(), r, w, &req); err != nil && err != io.EOF {
|
|
respondError(w, http.StatusBadRequest, err)
|
|
return
|
|
}
|
|
|
|
otp, code, err := vault.HandleSysGenerateRootAttemptPut(core, generateStrategy, &req, true)
|
|
if err != nil {
|
|
respondError(w, code, err)
|
|
return
|
|
}
|
|
|
|
handleSysGenerateRootAttemptGet(core, w, r, otp)
|
|
}
|
|
|
|
func handleSysGenerateRootAttemptDelete(core *vault.Core, w http.ResponseWriter, r *http.Request) {
|
|
code, err := vault.HandleSysGenerateRootAttemptDelete(core, true)
|
|
if err != nil {
|
|
respondError(w, code, err)
|
|
return
|
|
}
|
|
respondOk(w, nil)
|
|
}
|
|
|
|
func handleSysGenerateRootUpdate(core *vault.Core, generateStrategy vault.GenerateRootStrategy) http.Handler {
|
|
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
// Parse the request
|
|
var req vault.GenerateRootUpdateRequest
|
|
if _, err := parseJSONRequest(core.PerfStandby(), r, w, &req); err != nil {
|
|
respondError(w, http.StatusBadRequest, err)
|
|
return
|
|
}
|
|
|
|
ctx, cancel := core.GetContext()
|
|
defer cancel()
|
|
|
|
resp, code, err := vault.HandleSysGenerateRootUpdate(ctx, core, generateStrategy, &req, true)
|
|
if err != nil {
|
|
respondError(w, code, err)
|
|
return
|
|
}
|
|
|
|
respondOk(w, resp)
|
|
})
|
|
}
|