boskos/boskos.go
func handleAcquire(r *ranch.Ranch) http.HandlerFunc {
	return func(res http.ResponseWriter, req *http.Request) {
		logrus.WithField("handler", "handleStart").Infof("From %v", req.RemoteAddr)

		if req.Method != http.MethodPost {
			msg := fmt.Sprintf("Method %v, /acquire only accepts POST.", req.Method)
			logrus.Warning(msg)
			http.Error(res, msg, http.StatusMethodNotAllowed)
			return
		}

		// TODO(krzyzacy) - sanitize user input
		rtype := req.URL.Query().Get("type")
		state := req.URL.Query().Get("state")
		dest := req.URL.Query().Get("dest")
		owner := req.URL.Query().Get("owner")
		if rtype == "" || state == "" || dest == "" || owner == "" {
			msg := fmt.Sprintf("Type: %v, state: %v, dest: %v, owner: %v, all of them must be set in the request.", rtype, state, dest, owner)
			logrus.Warning(msg)
			http.Error(res, msg, http.StatusBadRequest)
			return
		}

		logrus.Infof("Request for a %v %v from %v, dest %v", state, rtype, owner, dest)

		resource, err := r.Acquire(rtype, state, dest, owner)

		if err != nil {
			logrus.WithError(err).Errorf("No available resource")
			http.Error(res, err.Error(), ErrorToStatus(err))
			return
		}

		resJSON, err := json.Marshal(resource)
		if err != nil {
			logrus.WithError(err).Errorf("json.Marshal failed: %v, resource will be released", resource)
			http.Error(res, err.Error(), ErrorToStatus(err))
			// release the resource, though this is not expected to happen.
			err = r.Release(resource.Name, state, owner)
			if err != nil {
				logrus.WithError(err).Warningf("unable to release resource %s", resource.Name)
			}
			return
		}
		logrus.Infof("Resource leased: %v", string(resJSON))
		fmt.Fprint(res, string(resJSON))
	}
}
func handleAcquire(r *ranch.Ranch) http.HandlerFunc {
	return func(res http.ResponseWriter, req *http.Request) {
		logrus.WithField("handler", "handleStart").Infof("From %v", req.RemoteAddr)

		if req.Method != http.MethodPost {
			msg := fmt.Sprintf("Method %v, /acquire only accepts POST.", req.Method)
			logrus.Warning(msg)
			http.Error(res, msg, http.StatusMethodNotAllowed)
			return
		}

		// TODO(krzyzacy) - sanitize user input
		rtype := req.URL.Query().Get("type")
		state := req.URL.Query().Get("state")
		dest := req.URL.Query().Get("dest")
		owner := req.URL.Query().Get("owner")
		if rtype == "" || state == "" || dest == "" || owner == "" {
			msg := fmt.Sprintf("Type: %v, state: %v, dest: %v, owner: %v, all of them must be set in the request.", rtype, state, dest, owner)
			logrus.Warning(msg)
			http.Error(res, msg, http.StatusBadRequest)
			return
		}

		logrus.Infof("Request for a %v %v from %v, dest %v", state, rtype, owner, dest)

		resource, err := r.Acquire(rtype, state, dest, owner)

		if err != nil {
			logrus.WithError(err).Errorf("No available resource")
			http.Error(res, err.Error(), ErrorToStatus(err))
			return
		}

		resJSON, err := json.Marshal(resource)
		if err != nil {
			logrus.WithError(err).Errorf("json.Marshal failed: %v, resource will be released", resource)
			http.Error(res, err.Error(), ErrorToStatus(err))
			// release the resource, though this is not expected to happen.
			err = r.Release(resource.Name, state, owner)
			if err != nil {
				logrus.WithError(err).Warningf("unable to release resource %s", resource.Name)
			}
			return
		}
		logrus.Infof("Resource leased: %v", string(resJSON))
		fmt.Fprint(res, string(resJSON))
	}
}
func handleAcquire ( r * ranch . Ranch ) http . HandlerFunc { return func ( res http . ResponseWriter , req * http . Request ) { logrus . WithField ( " " , " " ) . Infof ( " " , req . RemoteAddr ) if req . Method != http . MethodPost { msg := fmt . Sprintf ( " " , req . Method ) logrus . Warning ( msg ) http . Error ( res , msg , http . StatusMethodNotAllowed ) return } // TODO(krzyzacy) - sanitize user input rtype := req . URL . Query ( ) . Get ( " " ) state := req . URL . Query ( ) . Get ( " " ) dest := req . URL . Query ( ) . Get ( " " ) owner := req . URL . Query ( ) . Get ( " " ) if rtype == " " || state == " " || dest == " " || owner == " " { msg := fmt . Sprintf ( " " , rtype , state , dest , owner ) logrus . Warning ( msg ) http . Error ( res , msg , http . StatusBadRequest ) return } logrus . Infof ( " " , state , rtype , owner , dest ) resource , err := r . Acquire ( rtype , state , dest , owner ) if err != nil { logrus . WithError ( err ) . Errorf ( " " ) http . Error ( res , err . Error ( ) , ErrorToStatus ( err ) ) return } resJSON , err := json . Marshal ( resource ) if err != nil { logrus . WithError ( err ) . Errorf ( " " , resource ) http . Error ( res , err . Error ( ) , ErrorToStatus ( err ) ) // release the resource, though this is not expected to happen. err = r . Release ( resource . Name , state , owner ) if err != nil { logrus . WithError ( err ) . Warningf ( " " , resource . Name ) } return } logrus . Infof ( " " , string ( resJSON ) ) fmt . Fprint ( res , string ( resJSON ) ) } }
//  handleAcquire: Handler for /acquire
//  Method: POST
// 	URLParams:
//		Required: type=[string]  : type of requested resource
//		Required: state=[string] : current state of the requested resource
//		Required: dest=[string] : destination state of the requested resource
//		Required: owner=[string] : requester of the resource
handleAcquire : Handler for / acquire Method : POST URLParams : Required : type = [ string ] : type of requested resource Required : state = [ string ] : current state of the requested resource Required : dest = [ string ] : destination state of the requested resource Required : owner = [ string ] : requester of the resource