48 lines
1.5 KiB
Go
48 lines
1.5 KiB
Go
package api
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"browser.local/platform/dto"
|
|
)
|
|
|
|
// remoteAdapters godoc
|
|
// @Summary List or request scoped remote adapters
|
|
// @Description Lists declared safe adapters or queues an owner-authorized fenced adapter job.
|
|
// @Tags remote-adapters
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Success 200 {object} dto.RemoteAdapterDeclarationListResponse
|
|
// @Success 202 {object} dto.RemoteAdapterResponse
|
|
// @Failure 400 {object} dto.ErrorResponse
|
|
// @Failure 401 {object} dto.ErrorResponse
|
|
// @Failure 403 {object} dto.ErrorResponse
|
|
// @Router /api/v1/server-instances/{id}/remote-adapters [get]
|
|
// @Router /api/v1/server-instances/{id}/remote-adapters [post]
|
|
func (h *coreHandlers) remoteAdapters(w http.ResponseWriter, r *http.Request) {
|
|
serverInstanceID := r.PathValue("id")
|
|
switch r.Method {
|
|
case http.MethodGet:
|
|
declarations, err := h.core.ListRemoteAdapterDeclarationsForSession(bearerToken(r), serverInstanceID)
|
|
if err != nil {
|
|
writeServiceError(w, err)
|
|
return
|
|
}
|
|
writeJSON(w, http.StatusOK, dto.RemoteAdapterDeclarationsFromDomain(declarations))
|
|
case http.MethodPost:
|
|
request, err := decodeJSON[dto.RemoteAdapterRequestBody](r)
|
|
if err != nil {
|
|
writeDecodeError(w, err)
|
|
return
|
|
}
|
|
result, err := h.core.RequestRemoteAdapterForSession(bearerToken(r), request.ToDomain(serverInstanceID))
|
|
if err != nil {
|
|
writeServiceError(w, err)
|
|
return
|
|
}
|
|
writeJSON(w, http.StatusAccepted, dto.RemoteAdapterFromDomain(result))
|
|
default:
|
|
writeMethodNotAllowed(w, "GET, POST")
|
|
}
|
|
}
|