mirror of
https://github.com/semaphoreui/semaphore.git
synced 2024-11-23 12:30:41 +01:00
4996728daa
* feat: add feature flag * feat(runners): pro runners ui * feat(runner): api for project level * fix(ui): key of list * feat(be): add mocks for project runners * feat: pro alert * feat(pro): upgrade button * feat(pro): upgrade button * feat(pro): icon and color * feat(pro): change color
150 lines
3.0 KiB
Go
150 lines
3.0 KiB
Go
package api
|
|
|
|
import (
|
|
"github.com/semaphoreui/semaphore/api/helpers"
|
|
"github.com/semaphoreui/semaphore/db"
|
|
log "github.com/sirupsen/logrus"
|
|
"net/http"
|
|
|
|
"github.com/gorilla/context"
|
|
)
|
|
|
|
func getGlobalRunners(w http.ResponseWriter, r *http.Request) {
|
|
runners, err := helpers.Store(r).GetGlobalRunners(false)
|
|
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
var result = make([]db.Runner, 0)
|
|
|
|
for _, runner := range runners {
|
|
result = append(result, runner)
|
|
}
|
|
|
|
helpers.WriteJSON(w, http.StatusOK, result)
|
|
}
|
|
|
|
type runnerWithToken struct {
|
|
db.Runner
|
|
Token string `json:"token"`
|
|
}
|
|
|
|
func addGlobalRunner(w http.ResponseWriter, r *http.Request) {
|
|
var runner db.Runner
|
|
if !helpers.Bind(w, r, &runner) {
|
|
return
|
|
}
|
|
|
|
runner.ProjectID = nil
|
|
newRunner, err := helpers.Store(r).CreateRunner(runner)
|
|
|
|
if err != nil {
|
|
log.Warn("Runner is not created: " + err.Error())
|
|
w.WriteHeader(http.StatusBadRequest)
|
|
return
|
|
}
|
|
|
|
helpers.WriteJSON(w, http.StatusCreated, runnerWithToken{
|
|
Runner: newRunner,
|
|
Token: newRunner.Token,
|
|
})
|
|
}
|
|
|
|
func globalRunnerMiddleware(next http.Handler) http.Handler {
|
|
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
runnerID, err := helpers.GetIntParam("runner_id", w, r)
|
|
|
|
if err != nil {
|
|
helpers.WriteJSON(w, http.StatusBadRequest, map[string]string{
|
|
"error": "runner_id required",
|
|
})
|
|
return
|
|
}
|
|
|
|
store := helpers.Store(r)
|
|
|
|
runner, err := store.GetGlobalRunner(runnerID)
|
|
|
|
if err != nil {
|
|
helpers.WriteJSON(w, http.StatusNotFound, map[string]string{
|
|
"error": "Runner not found",
|
|
})
|
|
return
|
|
}
|
|
|
|
context.Set(r, "runner", &runner)
|
|
next.ServeHTTP(w, r)
|
|
})
|
|
}
|
|
|
|
func getGlobalRunner(w http.ResponseWriter, r *http.Request) {
|
|
runner := context.Get(r, "runner").(*db.Runner)
|
|
|
|
helpers.WriteJSON(w, http.StatusOK, runner)
|
|
}
|
|
|
|
func updateGlobalRunner(w http.ResponseWriter, r *http.Request) {
|
|
oldRunner := context.Get(r, "runner").(*db.Runner)
|
|
|
|
var runner db.Runner
|
|
if !helpers.Bind(w, r, &runner) {
|
|
return
|
|
}
|
|
|
|
store := helpers.Store(r)
|
|
|
|
runner.ID = oldRunner.ID
|
|
runner.ProjectID = nil
|
|
|
|
err := store.UpdateRunner(runner)
|
|
|
|
if err != nil {
|
|
helpers.WriteErrorStatus(w, err.Error(), http.StatusBadRequest)
|
|
return
|
|
}
|
|
|
|
w.WriteHeader(http.StatusNoContent)
|
|
}
|
|
|
|
func deleteGlobalRunner(w http.ResponseWriter, r *http.Request) {
|
|
runner := context.Get(r, "runner").(*db.Runner)
|
|
|
|
store := helpers.Store(r)
|
|
|
|
err := store.DeleteGlobalRunner(runner.ID)
|
|
|
|
if err != nil {
|
|
helpers.WriteErrorStatus(w, err.Error(), http.StatusBadRequest)
|
|
return
|
|
}
|
|
|
|
w.WriteHeader(http.StatusNoContent)
|
|
}
|
|
|
|
func setGlobalRunnerActive(w http.ResponseWriter, r *http.Request) {
|
|
runner := context.Get(r, "runner").(*db.Runner)
|
|
|
|
store := helpers.Store(r)
|
|
|
|
var body struct {
|
|
Active bool `json:"active"`
|
|
}
|
|
|
|
if !helpers.Bind(w, r, &body) {
|
|
helpers.WriteErrorStatus(w, "Invalid request body", http.StatusBadRequest)
|
|
return
|
|
}
|
|
|
|
runner.Active = body.Active
|
|
|
|
err := store.UpdateRunner(*runner)
|
|
|
|
if err != nil {
|
|
helpers.WriteErrorStatus(w, err.Error(), http.StatusBadRequest)
|
|
return
|
|
}
|
|
|
|
w.WriteHeader(http.StatusNoContent)
|
|
}
|