func DockerStop(w rest.ResponseWriter, r *rest.Request) { logit.Info.Println("DockerStop called") req := DockerStopRequest{} err := r.DecodeJsonPayload(&req) if err != nil { logit.Error.Println(err.Error()) rest.Error(w, err.Error(), http.StatusInternalServerError) return } docker, err3 := dockerapi.NewClient("unix://var/run/docker.sock") if err3 != nil { logit.Error.Println("can't get connection to docker socket") rest.Error(w, err3.Error(), http.StatusInternalServerError) return } err3 = docker.StopContainer(req.ContainerName, 10) if err3 != nil { logit.Error.Println("can't stop container " + req.ContainerName) rest.Error(w, err3.Error(), http.StatusInternalServerError) return } var response DockerStopResponse response.Output = "success" w.WriteJson(&response) }
func (u Util) FailedToAuthenticate(w rest.ResponseWriter) { w.WriteHeader(401) w.WriteJson(types.Json{ "response": "Failed to authenticate user request", "reason": "Missing, illegal or expired token", }) }
func handleCacheGet(w rest.ResponseWriter, r *rest.Request) { res := CacheResMulti{} lockStore.Lock() lockStats.Lock() for key, item := range store { if curCnt, ok := storeStats[key]; ok { curCnt++ if curCnt >= 100 { delete(store, key) delete(storeStats, key) item.DeleteLocal(key) } else { storeStats[key] = curCnt item.IncLocal(key, false) } } else { storeStats[key] = 1 } res.Items = append(res.Items, *item) } lockStore.Unlock() lockStats.Unlock() w.WriteJson(res) }
func (api *Api) PostUser(w rest.ResponseWriter, r *rest.Request) { user := User{} err := r.DecodeJsonPayload(&user) if err != nil { rest.Error(w, err.Error(), http.StatusInternalServerError) return } lastInsertId, err := api.DB.Query("INSERT INTO " + TABLENAME + "(" + COLNAME + ") OUTPUT Inserted.ID VALUES('" + user.Name + "')") if err != nil { fmt.Println(err) return } if lastInsertId.Next() { var id int if err := lastInsertId.Scan(&id); err != nil { log.Fatal(err) } user.Id = id } else { rest.NotFound(w, r) return } if err := lastInsertId.Err(); err != nil { log.Fatal(err) } w.WriteJson(&user) }
func Post(w rest.ResponseWriter, r *rest.Request) { host := Host{} err := r.DecodeJsonPayload(&host) if err != nil { rest.Error(w, err.Error(), http.StatusInternalServerError) return } if host.Id == "" { rest.Error(w, "id required", 400) return } if host.Address == "" { rest.Error(w, "address required", 400) return } ra, err := net.ResolveIPAddr("ip4:icmp", host.Address) if err != nil { rest.Error(w, err.Error(), 400) return } lock.Lock() q := make(chan bool, 1) // chan for stop ping store[host.Id] = &HostStore{ host, time.Now(), 0.0, 0.0, 0.0, 0.0, 0, ring.New(DefCircleLen), q} go ping(host.Id, ra, time.Second*DefRTT, q, &lock, store) lock.Unlock() w.WriteJson(&host) }
// StartCluster starts all nodes in a cluster func StartCluster(w rest.ResponseWriter, r *rest.Request) { dbConn, err := util.GetConnection(CLUSTERADMIN_DB) if err != nil { logit.Error.Println(err.Error()) rest.Error(w, err.Error(), 400) return } defer dbConn.Close() err = secimpl.Authorize(dbConn, r.PathParam("Token"), "perm-cluster") if err != nil { logit.Error.Println(err.Error()) rest.Error(w, err.Error(), http.StatusUnauthorized) return } ID := r.PathParam("ID") if ID == "" { logit.Error.Println("StartCluster: error cluster ID required") rest.Error(w, "cluster ID required", http.StatusBadRequest) return } cluster, err := admindb.GetCluster(dbConn, ID) if err != nil { logit.Error.Println(err.Error()) rest.Error(w, err.Error(), http.StatusBadRequest) } //start docker containers containers, err := admindb.GetAllContainersForCluster(dbConn, cluster.ID) if err != nil { logit.Error.Println(err.Error()) rest.Error(w, err.Error(), http.StatusBadRequest) } i := 0 i = 0 var response swarmapi.DockerStartResponse for i = range containers { req := &swarmapi.DockerStartRequest{} req.ContainerName = containers[i].Name logit.Info.Println("will attempt to start container " + req.ContainerName) response, err = swarmapi.DockerStart(req) if err != nil { logit.Error.Println("StartCluster: error when trying to start container" + err.Error()) } logit.Info.Println("StartCluster: started " + response.Output) i++ } status := types.SimpleStatus{} status.Status = "OK" w.WriteHeader(http.StatusOK) w.WriteJson(&status) }
// PostCluster updates or inserts a new cluster definition func PostCluster(w rest.ResponseWriter, r *rest.Request) { dbConn, err := util.GetConnection(CLUSTERADMIN_DB) if err != nil { logit.Error.Println(err.Error()) rest.Error(w, err.Error(), 400) return } defer dbConn.Close() //logit.Info.Println("PostCluster: in PostCluster") cluster := types.Cluster{} err = r.DecodeJsonPayload(&cluster) if err != nil { logit.Error.Println("error in decode" + err.Error()) rest.Error(w, err.Error(), http.StatusInternalServerError) return } err = secimpl.Authorize(dbConn, cluster.Token, "perm-cluster") if err != nil { logit.Error.Println(err.Error()) rest.Error(w, err.Error(), http.StatusUnauthorized) return } if cluster.Name == "" { logit.Error.Println("PostCluster: error in Name") rest.Error(w, "cluster name required", http.StatusBadRequest) return } //logit.Info.Println("PostCluster: have ID=" + cluster.ID + " Name=" + cluster.Name + " type=" + cluster.ClusterType + " status=" + cluster.Status) dbcluster := types.Cluster{} dbcluster.ID = cluster.ID dbcluster.ProjectID = cluster.ProjectID dbcluster.Name = cluster.Name dbcluster.ClusterType = cluster.ClusterType dbcluster.Status = cluster.Status dbcluster.Containers = cluster.Containers if cluster.ID == "" { strid, err := admindb.InsertCluster(dbConn, dbcluster) newid := strconv.Itoa(strid) if err != nil { logit.Error.Println(err.Error()) rest.Error(w, err.Error(), http.StatusBadRequest) return } cluster.ID = newid } else { //logit.Info.Println("PostCluster: about to call UpdateCluster") err2 := admindb.UpdateCluster(dbConn, dbcluster) if err2 != nil { logit.Error.Println(err.Error()) rest.Error(w, err.Error(), http.StatusBadRequest) return } } w.WriteJson(&cluster) }
// CreateCard creates a new card entry. func CreateCard(w rest.ResponseWriter, r *rest.Request) { var err error c, err := card.New() if err != nil { log.Printf("CreateCard: Failed to create card: %s", err) rest.Error(w, "Failed to create card", 500) return } decoder := json.NewDecoder(r.Body) err = decoder.Decode(&c) if err != nil { log.Printf("CreateCard: Failed to decode request body: %s", err) rest.Error(w, "Failed to decode request body", 500) return } if err := card.GetHandler().SaveCard(*c); err != nil { log.Printf("CreateCard: Failed to save card: %s", err) rest.Error(w, "Failed to create card", 500) return } log.Printf("CreateCard: Card save was successful (%s)", c.Cid) w.WriteJson(c) }
// GetChallenge Return with the next card to recal. func GetChallenge(w rest.ResponseWriter, r *rest.Request) { var challenge *learning.Challenge ls := r.PathParam("learning_service") service, err := learning.GetService(ls) if err != nil { log.Println("GetChallenge: Failed to load learning service", err) rest.Error(w, "Failed to get challenge", 404) } uid, err := uuid.NewV4() if err != nil { log.Printf("GetChallenge: Failed to generate new UUID: %s", err) rest.Error(w, "Failed to get challenge", 404) } challenge, err = service.WhatToLearn(uid.String()) if err != nil { log.Println("GetChallenge: Failed to load next challange", err) rest.Error(w, "Failed to get challenge", 404) } log.Printf("GetChallenge: challenge: +%v", challenge) w.WriteJson(challenge) }
func HandleImageList(w rest.ResponseWriter, r *rest.Request) { lock.Lock() cmd := exec.Command("zfs", "list", "-H", "-t", "volume") stdout, err := cmd.Output() lock.Unlock() if err != nil { return } lines := strings.Split(string(stdout), "\n") imas := make([]Images, 0) for _, line := range lines { if strings.Contains(line, "ima-") { ima := Images{} n := strings.Split(line, "\t")[0] n = strings.Split(n, "/")[1] ima.Imageid = n ima.Os = getImaOs(ima.Imageid) imas = append(imas, ima) } } w.WriteJson(imas) }
func AuthenticationAPI(w rest.ResponseWriter, req *rest.Request) { fmt.Println(":: AuthenticationAPI ::") ip, _ := net.LookupIP(req.PathParam("host")) // rest.Error(w, err.Error(), http.StatusInternalServerError) w.WriteJson(&ip) w.WriteJson(map[string]interface{}{"Body": ip}) }
func Translate(w rest.ResponseWriter, r *rest.Request) { request := &RequestObject{} r.DecodeJsonPayload(request) c := translator.Translate(request.Text, request.Lang) w.WriteJson(c) }
func KeysList(w rest.ResponseWriter, r *rest.Request) { user := r.Env["USER"].(*domain.User) user.Pass = "" w.WriteJson(user) }
func Register(w rest.ResponseWriter, r *rest.Request) { var form struct { Id string `json:"username"` Pass string `json:"password"` } r.DecodeJsonPayload(&form) if form.Pass == "" { rest.Error(w, "Invalid input", 400) return } res, err := userRepository.GetUserById(form.Id) if res != "" { rest.Error(w, "[username]exists", 400) return } user := &domain.User{Id: form.Id, Pass: domain.HashPassword(form.Pass)} bytes, _ := json.Marshal(user) userRepository.SaveUserById(form.Id, string(bytes)) res, err = userRepository.GetUserById(form.Id) log.Println(res, err) w.WriteJson(map[string]string{"Status": "OK"}) }
func appInfoHandler(w rest.ResponseWriter, r *rest.Request) { var marathonApps marathon.MarathonAppsGlobalInfoResponse fasthttp.JsonReqAndResHandler(goCore.MarathonAppsUrl, nil, &marathonApps, "GET") appsCnt := len(marathonApps.Apps) // should not code like this: appsGlobalInfos := [appsCnt]entity.AppsGlobalInfo{} appsGlobalInfos := make([]dto.AppsGlobalInfoResponse, appsCnt) for i, v := range marathonApps.Apps { var perApp dto.AppsGlobalInfoResponse if strings.LastIndex(v.Id, "/") == -1 { perApp.Id = v.Id } else { perApp.Id = v.Id[strings.LastIndex(v.Id, "/")+1:] } perApp.Cpus = strconv.FormatFloat(v.Cpus, 'f', 1, 64) perApp.CurrentInstances = strconv.Itoa(v.TasksRunning) fmt.Println(v) if strings.LastIndex(v.Id, "/") <= 0 { // exclude like /zk or zk perApp.Group = "No Groups" } else { perApp.Group = v.Id[0:strings.LastIndex(v.Id, "/")] } perApp.Instances = strconv.Itoa(v.Instances) perApp.Mem = strconv.FormatFloat(v.Mem, 'f', 1, 64) if v.TasksHealthy == 0 && v.TasksUnhealthy == 0 { // when no and healthy check perApp.Healthy = "100" } else { perApp.Healthy = strconv.FormatFloat(float64(v.TasksHealthy)/float64(v.TasksHealthy+v.TasksUnhealthy), 'f', 1, 64) } perApp.FormatStatus(v.TasksStaged) appsGlobalInfos[i] = perApp } w.WriteJson(appsGlobalInfos) }
func registerUser(w rest.ResponseWriter, r *rest.Request, db neutrino.DbService) { var u bson.M if err := r.DecodeJsonPayload(&u); err != nil { RestErrorInvalidBody(w) return } hashedPassword, err := bcrypt.GenerateFromPassword([]byte(u["password"].(string)), 10) if err != nil { RestError(w, err) return } doc := bson.M{ "_id": u["email"].(string), "password": hashedPassword, "createdAt": time.Now(), } if err := db.Insert(doc); err != nil { RestError(w, err) return } w.WriteHeader(http.StatusOK) }
func (routes *Routes) renewInstance(w rest.ResponseWriter, r *rest.Request) { iid := r.PathParam(RouteParamInstanceID) if iid == "" { routes.logger.WithFields(log.Fields{ "namespace": r.Env["REMOTE_USER"], "error": "instance id is required", }).Warn("Failed to renew instance") i18n.Error(r, w, http.StatusBadRequest, i18n.ErrorInstanceIdentifierMissing) return } catalog := routes.catalog(w, r) if catalog == nil { routes.logger.WithFields(log.Fields{ "namespace": r.Env["REMOTE_USER"], "error": "catalog is nil", }).Errorf("Failed to renew instance %s", iid) return } if err := catalog.Renew(iid); err != nil { routes.logger.WithFields(log.Fields{ "namespace": r.Env["REMOTE_USER"], "error": err, }).Warnf("Failed to renew instance %s", iid) i18n.Error(r, w, statusCodeFromError(err), i18n.ErrorInstanceHeartbeatFailed) return } w.WriteHeader(http.StatusOK) }
func loginUser(w rest.ResponseWriter, r *rest.Request, db neutrino.DbService) { var u bson.M if err := r.DecodeJsonPayload(&u); err != nil { RestError(w, err) return } existingUser, err := db.FindId(u["email"].(string), nil) if err != nil { RestError(w, err) return } err = bcrypt.CompareHashAndPassword(existingUser["password"].([]byte), []byte(u["password"].(string))) if err != nil { RestError(w, err) return } token := jwt.New(jwt.GetSigningMethod("HS256")) token.Claims["user"] = u["email"].(string) token.Claims["expiration"] = time.Now().Add(time.Minute + 60).Unix() tokenStr, err := token.SignedString([]byte("")) if err != nil { RestError(w, err) return } w.WriteJson(map[string]string{"token": tokenStr}) }
// GetCluster returns a given cluster definition func GetCluster(w rest.ResponseWriter, r *rest.Request) { dbConn, err := util.GetConnection(CLUSTERADMIN_DB) if err != nil { logit.Error.Println(err.Error()) rest.Error(w, err.Error(), 400) return } defer dbConn.Close() err = secimpl.Authorize(dbConn, r.PathParam("Token"), "perm-read") if err != nil { logit.Error.Println(err.Error()) rest.Error(w, err.Error(), http.StatusUnauthorized) return } ID := r.PathParam("ID") results, err := admindb.GetCluster(dbConn, ID) if err != nil { logit.Error.Println(err.Error()) rest.Error(w, err.Error(), http.StatusBadRequest) } cluster := types.Cluster{} cluster.ID = results.ID cluster.ProjectID = results.ProjectID cluster.Name = results.Name cluster.ClusterType = results.ClusterType cluster.Status = results.Status cluster.CreateDate = results.CreateDate cluster.Containers = results.Containers //logit.Info.Println("GetCluser:db call results=" + results.ID) w.WriteJson(&cluster) }
func PostTransportTraffic(w rest.ResponseWriter, r *rest.Request) { form := shared.TransportTraffic{} err := r.DecodeJsonPayload(&form) if err != nil { apiutils.WriteRestError(w, apierrors.NewInternalError(err)) return } transportTrafficMu.Lock() defer transportTrafficMu.Unlock() transportTraffic = form if lg.V(10) { if len(transportTrafficLog) == 6 { lg.Infof("transport traffic: %.0fkb/s %.0fkb/s %.0fkb/s %.0fkb/s %.0fkb/s %.0fkb/s", (transportTrafficLog[0].Throughput)/1024, (transportTrafficLog[1].Throughput)/1024, (transportTrafficLog[2].Throughput)/1024, (transportTrafficLog[3].Throughput)/1024, (transportTrafficLog[4].Throughput)/1024, (transportTrafficLog[5].Throughput)/1024, ) transportTrafficLog = make([]shared.TransportTraffic, 0) } if transportTraffic.Throughput > 1024 { transportTrafficLog = append(transportTrafficLog, form) } } response := true w.WriteJson(response) }
func (t *TypesController) DeleteType(w rest.ResponseWriter, r *rest.Request) { appId := r.PathParam("appId") typeName := r.PathParam("typeName") app, err := GetAppFromRequest(r) if err != nil { RestError(w, err) return } appsDb := neutrino.NewAppsDbService(r.Env["user"].(string)) appsDb.UpdateId(app["_id"], bson.M{ "$pull": bson.M{ "types": typeName, }, }, ) db := neutrino.NewTypeDbService(appId, typeName) session, collection := db.GetCollection() defer session.Close() dropError := collection.DropCollection() if dropError != nil { RestError(w, dropError) return } w.WriteHeader(http.StatusOK) }
func StopPgpool(w rest.ResponseWriter, r *rest.Request) { logit.Info.Println("StopPgpool called") response := StopPgpoolResponse{} req := StopPgpoolRequest{} err := r.DecodeJsonPayload(&req) if err != nil { logit.Error.Println(err.Error()) rest.Error(w, err.Error(), http.StatusInternalServerError) return } var cmd *exec.Cmd cmd = exec.Command("stop-pgpool.sh", req.Path) var out bytes.Buffer var stderr bytes.Buffer cmd.Stdout = &out cmd.Stderr = &stderr err = cmd.Run() if err != nil { logit.Error.Println(err.Error()) rest.Error(w, err.Error(), 400) return } response.Output = out.String() response.Status = "OK" w.WriteJson(&response) }
func (api *Api) GetUser(w rest.ResponseWriter, r *rest.Request) { id := r.PathParam("id") user := &User{} rows, err := api.DB.Query("SELECT * FROM " + TABLENAME + " WHERE ID = " + id) if err != nil { log.Fatal(err) } if rows.Next() { var id int var name string if err := rows.Scan(&id, &name); err != nil { log.Fatal(err) } user = &User{Id: id, Name: name} } else { rest.NotFound(w, r) return } if err := rows.Err(); err != nil { log.Fatal(err) } w.WriteJson(&user) }
// GetQueues ... func GetQueues(w rest.ResponseWriter, r *rest.Request) { accountID, applicationName, _, err := queueParams(r) if err != nil { rest.Error(w, err.Error(), http.StatusInternalServerError) return } b := GetBase(r) lp := parseListQuery(r) var queues []*models.Queue lr := &models.ListResult{ List: &queues, } if err := b.GetQueues(accountID, applicationName, lp, lr); err != nil { rest.Error(w, err.Error(), http.StatusInternalServerError) return } if lr.Count == 0 { rest.NotFound(w, r) return } rt := make([]*Queue, len(queues)) for idx, queue := range queues { rt[idx] = NewQueueFromModel(queue) } w.WriteJson(models.ListResult{ List: rt, HasMore: lr.HasMore, Total: lr.Total, Count: lr.Count, Page: lr.Page, Pages: lr.Pages, }) }
func (u Util) SimpleJsonValidationReason(w rest.ResponseWriter, code int, err []error) { errorMessage := decodeValidatorErrors(err) w.WriteHeader(code) w.WriteJson(types.Json{ "reason": errorMessage, }) }
// Require a write key. // Create a event. func HandleCreateEvent(w rest.ResponseWriter, req *rest.Request) { if err := RequireWriteKey(w, req); err != nil { rest.Error(w, err.Error(), err.(StatusError).Code) return } project := currentProject(req) event := req.PathParam("event_name") var data CreateSingleEventParams var err error if err = eventData(req, &data); err != nil { rest.Error(w, err.Error(), http.StatusBadRequest) return } events := make(map[string][]interface{}) events[event] = []interface{}{data} result, err := createEvent(project, event, data) if err != nil { rest.Error(w, err.Error(), http.StatusBadRequest) } else { w.WriteJson(result) } }
func DeleteOS(w rest.ResponseWriter, r *rest.Request) { Distribution := r.PathParam("Distribution") lock.Lock() delete(store, Distribution) lock.Unlock() w.WriteHeader(http.StatusOK) }
// RefreshHandler can be used to refresh a token. The token still needs to be valid on refresh. // Shall be put under an endpoint that is using the JWTMiddleware. // Reply will be of the form {"token": "TOKEN"}. func (mw *JWTMiddleware) RefreshHandler(writer rest.ResponseWriter, request *rest.Request) { token, err := mw.parseToken(request) // Token should be valid anyway as the RefreshHandler is authed if err != nil { mw.unauthorized(writer) return } origIat := int64(token.Claims["orig_iat"].(float64)) if origIat < time.Now().Add(-mw.MaxRefresh).Unix() { mw.unauthorized(writer) return } newToken := jwt.New(jwt.GetSigningMethod(mw.SigningAlgorithm)) for key := range token.Claims { newToken.Claims[key] = token.Claims[key] } newToken.Claims["id"] = token.Claims["id"] newToken.Claims["exp"] = time.Now().Add(mw.Timeout).Unix() newToken.Claims["orig_iat"] = origIat tokenString, err := newToken.SignedString(mw.Key) if err != nil { mw.unauthorized(writer) return } writer.WriteJson(resultToken{Token: tokenString}) }
// POST /releases.json func ReleasesPOST(w rest.ResponseWriter, r *rest.Request) { // Parse params from JSON val := new(struct { Method string `json:"method"` Params *simplejson.Json `json:"params"` }) decoder := json.NewDecoder(r.Body) err := decoder.Decode(&val) if err != nil { log.Println(err) } // Extract filters to apply to releases device, _ := val.Params.Get("device").String() channels, _ := val.Params.Get("channels").StringArray() // Prep JSON data data := map[string]interface{}{ "id": nil, "result": database.ReleasesListJSON(device, channels), "error": nil, } js, _ := json.Marshal(data) w.Header().Set("Content-Type", "application/json") w.WriteJson(js) }
func getApiVersion(w rest.ResponseWriter, r *rest.Request) { w.WriteJson( map[string]string{ "version": "1", }, ) }