mirror of
https://github.com/simon987/task_tracker.git
synced 2025-04-10 05:56:42 +00:00
166 lines
2.9 KiB
Go
166 lines
2.9 KiB
Go
package api
|
|
|
|
import (
|
|
"encoding/json"
|
|
"github.com/simon987/task_tracker/storage"
|
|
"github.com/sirupsen/logrus"
|
|
"math/rand"
|
|
"strconv"
|
|
"time"
|
|
)
|
|
|
|
func (api *WebAPI) CreateWorker(r *Request) {
|
|
|
|
workerReq := &CreateWorkerRequest{}
|
|
err := json.Unmarshal(r.Ctx.Request.Body(), workerReq)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
if !workerReq.isValid() {
|
|
|
|
logrus.WithFields(logrus.Fields{
|
|
"createWorkerRequest": workerReq,
|
|
}).Warn("Failed CreateWorkerRequest")
|
|
|
|
r.Json(JsonResponse{
|
|
Ok: false,
|
|
Message: "You are now allowed to create a worker",
|
|
}, 403)
|
|
return
|
|
}
|
|
|
|
worker, err := api.workerCreate(workerReq)
|
|
if err != nil {
|
|
handleErr(err, r)
|
|
} else {
|
|
r.OkJson(JsonResponse{
|
|
Ok: true,
|
|
Content: CreateWorkerResponse{
|
|
Worker: worker,
|
|
},
|
|
})
|
|
}
|
|
}
|
|
|
|
func (api *WebAPI) GetWorker(r *Request) {
|
|
|
|
id, err := strconv.ParseInt(r.Ctx.UserValue("id").(string), 10, 64)
|
|
if err != nil {
|
|
logrus.WithError(err).WithFields(logrus.Fields{
|
|
"id": id,
|
|
}).Warn("Invalid worker id")
|
|
|
|
r.Json(JsonResponse{
|
|
Ok: false,
|
|
Message: err.Error(),
|
|
}, 400)
|
|
return
|
|
} else if id <= 0 {
|
|
logrus.WithFields(logrus.Fields{
|
|
"id": id,
|
|
}).Warn("Invalid worker id")
|
|
|
|
r.Json(JsonResponse{
|
|
Ok: false,
|
|
Message: "Invalid worker id",
|
|
}, 400)
|
|
return
|
|
}
|
|
|
|
worker := api.Database.GetWorker(id)
|
|
|
|
if worker != nil {
|
|
|
|
r.OkJson(JsonResponse{
|
|
Ok: true,
|
|
Content: GetWorkerResponse{
|
|
Worker: &storage.Worker{
|
|
Alias: worker.Alias,
|
|
Id: worker.Id,
|
|
Created: worker.Created,
|
|
},
|
|
},
|
|
})
|
|
} else {
|
|
r.Json(JsonResponse{
|
|
Ok: false,
|
|
Message: "Worker not found",
|
|
}, 404)
|
|
}
|
|
}
|
|
|
|
func (api *WebAPI) UpdateWorker(r *Request) {
|
|
|
|
worker, err := api.validateSignature(r)
|
|
if err != nil {
|
|
r.Json(JsonResponse{
|
|
Ok: false,
|
|
Message: err.Error(),
|
|
}, 401)
|
|
return
|
|
}
|
|
|
|
req := &UpdateWorkerRequest{}
|
|
err = json.Unmarshal(r.Ctx.Request.Body(), req)
|
|
if err != nil {
|
|
r.Json(JsonResponse{
|
|
Ok: false,
|
|
Message: "Could not parse request",
|
|
}, 400)
|
|
return
|
|
}
|
|
worker.Alias = req.Alias
|
|
|
|
ok := api.Database.UpdateWorker(worker)
|
|
|
|
if ok {
|
|
r.OkJson(JsonResponse{
|
|
Ok: true,
|
|
})
|
|
} else {
|
|
r.OkJson(JsonResponse{
|
|
Ok: false,
|
|
Message: "Could not update worker",
|
|
})
|
|
}
|
|
}
|
|
|
|
func (api *WebAPI) GetAllWorkerStats(r *Request) {
|
|
|
|
stats := api.Database.GetAllWorkerStats()
|
|
|
|
r.OkJson(JsonResponse{
|
|
Ok: true,
|
|
Content: GetAllWorkerStatsResponse{
|
|
Stats: stats,
|
|
},
|
|
})
|
|
}
|
|
|
|
func (api *WebAPI) workerCreate(request *CreateWorkerRequest) (*storage.Worker, error) {
|
|
|
|
if request.Alias == "" {
|
|
request.Alias = "default_alias"
|
|
}
|
|
|
|
worker := storage.Worker{
|
|
Created: time.Now().Unix(),
|
|
Secret: makeSecret(),
|
|
Alias: request.Alias,
|
|
}
|
|
|
|
api.Database.SaveWorker(&worker)
|
|
return &worker, nil
|
|
}
|
|
|
|
func makeSecret() []byte {
|
|
|
|
secret := make([]byte, 32)
|
|
for i := 0; i < 32; i++ {
|
|
secret[i] = byte(rand.Int31())
|
|
}
|
|
|
|
return secret
|
|
}
|