shikigrid/api/unit_enroll.go

61 lines
1.4 KiB
Go

package api
import (
"encoding/json"
"github.com/evilsocket/islazy/log"
"github.com/andatoshiki/shikigrid/models"
"io/ioutil"
"net/http"
)
func (api *API) readEnrollment(w http.ResponseWriter, r *http.Request) (error, models.EnrollmentRequest) {
var enroll models.EnrollmentRequest
body, err := ioutil.ReadAll(r.Body)
if err != nil {
ERROR(w, http.StatusUnprocessableEntity, err)
return err, enroll
}
log.Debug("%s", body)
enroll.Address = clientIP(r)
enroll.Country = r.Header.Get("CF-IPCountry")
if err = json.Unmarshal(body, &enroll); err != nil {
log.Warning("error while reading enrollment request from %s: %v", enroll.Address, err)
log.Debug("%s", body)
ERROR(w, http.StatusUnprocessableEntity, err)
return err, enroll
}
if err = enroll.Validate(); err != nil {
log.Warning("error while validating enrollment request from %s: %v", enroll.Address, err)
log.Debug("%s", body)
ERROR(w, http.StatusUnprocessableEntity, ErrEmpty)
return err, enroll
}
return nil, enroll
}
func (api *API) UnitEnroll(w http.ResponseWriter, r *http.Request) {
err, enroll := api.readEnrollment(w, r)
if err != nil {
return
}
err, unit := models.EnrollUnit(enroll)
if err != nil {
log.Error("%v", err)
ERROR(w, http.StatusInternalServerError, ErrEmpty)
return
}
log.Debug("unit %s enrolled: id:%d address:%s", unit.Identity(), unit.ID, unit.Address)
JSON(w, http.StatusOK, map[string]string{
"token": unit.Token,
})
}