blob: 951f267cc6e2da33527682d7286d30bd8ef491c2 [file]
package controller
import (
"net/http"
"github.com/apache/airavata/internal/httpx"
dto "github.com/apache/airavata/api/credentials/dto"
"github.com/apache/airavata/api/credentials/service"
)
// SSHEndpointController serves /api/v1/ssh-endpoints.
type SSHEndpointController struct{ svc *service.SSHEndpointService }
// NewSSHEndpointController returns a handler delegating to svc.
func NewSSHEndpointController(svc *service.SSHEndpointService) *SSHEndpointController {
return &SSHEndpointController{svc: svc}
}
// Register mounts the SSH endpoint routes.
func (h *SSHEndpointController) Register(mux *http.ServeMux) {
mux.HandleFunc("GET /api/v1/ssh-endpoints", h.list)
mux.HandleFunc("POST /api/v1/ssh-endpoints", h.create)
mux.HandleFunc("GET /api/v1/ssh-endpoints/{sshEndpointId}", h.get)
mux.HandleFunc("PUT /api/v1/ssh-endpoints/{sshEndpointId}", h.update)
mux.HandleFunc("DELETE /api/v1/ssh-endpoints/{sshEndpointId}", h.delete)
}
func (h *SSHEndpointController) list(w http.ResponseWriter, r *http.Request) {
endpoints, err := h.svc.List(r.Context())
if err != nil {
httpx.WriteError(w, r, err)
return
}
httpx.WriteJSON(w, http.StatusOK, endpoints)
}
func (h *SSHEndpointController) get(w http.ResponseWriter, r *http.Request) {
endpoint, err := h.svc.Get(r.Context(), r.PathValue("sshEndpointId"))
if err != nil {
httpx.WriteError(w, r, err)
return
}
httpx.WriteJSON(w, http.StatusOK, endpoint)
}
func (h *SSHEndpointController) create(w http.ResponseWriter, r *http.Request) {
var req dto.SSHEndpointRequest
if err := httpx.Bind(r, &req); err != nil {
httpx.WriteError(w, r, err)
return
}
endpoint, err := h.svc.Create(r.Context(), &req)
if err != nil {
httpx.WriteError(w, r, err)
return
}
httpx.WriteJSON(w, http.StatusCreated, endpoint)
}
func (h *SSHEndpointController) update(w http.ResponseWriter, r *http.Request) {
var req dto.SSHEndpointRequest
if err := httpx.Bind(r, &req); err != nil {
httpx.WriteError(w, r, err)
return
}
endpoint, err := h.svc.Update(r.Context(), r.PathValue("sshEndpointId"), &req)
if err != nil {
httpx.WriteError(w, r, err)
return
}
httpx.WriteJSON(w, http.StatusOK, endpoint)
}
func (h *SSHEndpointController) delete(w http.ResponseWriter, r *http.Request) {
if err := h.svc.Delete(r.Context(), r.PathValue("sshEndpointId")); err != nil {
httpx.WriteError(w, r, err)
return
}
httpx.WriteJSON(w, http.StatusNoContent, nil)
}