add common http functions to httputil pkg (#350)

This commit is contained in:
Victor Vrantchan
2017-12-09 21:14:42 -05:00
committed by GitHub
parent abe10a1b2c
commit 45aacebb02
15 changed files with 189 additions and 206 deletions

View File

@@ -2,12 +2,12 @@ package remove
import (
"context"
"encoding/json"
"net/http"
"net/url"
"github.com/go-kit/kit/endpoint"
"github.com/gorilla/mux"
"github.com/micromdm/micromdm/pkg/httputil"
"github.com/pkg/errors"
)
@@ -23,7 +23,7 @@ type blockDeviceResponse struct {
Err error `json:"err,omitempty"`
}
func (r blockDeviceResponse) error() error { return r.Err }
func (r blockDeviceResponse) Failed() error { return r.Err }
func decodeBlockDeviceRequest(ctx context.Context, r *http.Request) (interface{}, error) {
var errBadRoute = errors.New("bad route")
@@ -45,11 +45,8 @@ func encodeBlockDeviceRequest(_ context.Context, r *http.Request, request interf
}
func decodeBlockDeviceResponse(_ context.Context, r *http.Response) (interface{}, error) {
if r.StatusCode != http.StatusOK {
return nil, errorDecoder(r)
}
var resp blockDeviceResponse
err := json.NewDecoder(r.Body).Decode(&resp)
err := httputil.DecodeJSONResponse(r, &resp)
return resp, err
}

View File

@@ -1,13 +1,12 @@
package remove
import (
"context"
"net/http"
"net/url"
"github.com/go-kit/kit/endpoint"
"github.com/go-kit/kit/log"
httptransport "github.com/go-kit/kit/transport/http"
"github.com/micromdm/micromdm/pkg/httputil"
)
func NewHTTPClient(instance, token string, logger log.Logger, opts ...httptransport.ClientOption) (Service, error) {
@@ -20,8 +19,8 @@ func NewHTTPClient(instance, token string, logger log.Logger, opts ...httptransp
{
blockDeviceEndpoint = httptransport.NewClient(
"POST",
copyURL(u, ""), // empty path, modified by the encodeRequest func
encodeRequestWithToken(token, encodeBlockDeviceRequest),
httputil.CopyURL(u, ""), // empty path, modified by the encodeRequest func
httputil.EncodeRequestWithToken(token, encodeBlockDeviceRequest),
decodeBlockDeviceResponse,
opts...,
).Endpoint()
@@ -31,8 +30,8 @@ func NewHTTPClient(instance, token string, logger log.Logger, opts ...httptransp
{
unblockDeviceEndpoint = httptransport.NewClient(
"POST",
copyURL(u, ""), //modified by encodeRequestFunc
encodeRequestWithToken(token, encodeUnblockDeviceRequest),
httputil.CopyURL(u, ""), //modified by encodeRequestFunc
httputil.EncodeRequestWithToken(token, encodeUnblockDeviceRequest),
decodeUnblockDeviceResponse,
opts...,
).Endpoint()
@@ -43,16 +42,3 @@ func NewHTTPClient(instance, token string, logger log.Logger, opts ...httptransp
UnblockDeviceEndpoint: unblockDeviceEndpoint,
}, nil
}
func encodeRequestWithToken(token string, next httptransport.EncodeRequestFunc) httptransport.EncodeRequestFunc {
return func(ctx context.Context, r *http.Request, request interface{}) error {
r.SetBasicAuth("micromdm", token)
return next(ctx, r, request)
}
}
func copyURL(base *url.URL, path string) *url.URL {
next := *base
next.Path = path
return &next
}

View File

@@ -1,14 +1,12 @@
package remove
import (
"encoding/json"
"errors"
"net/http"
"github.com/go-kit/kit/endpoint"
"github.com/go-kit/kit/log"
httptransport "github.com/go-kit/kit/transport/http"
"github.com/gorilla/mux"
"github.com/micromdm/micromdm/pkg/httputil"
)
type Endpoints struct {
@@ -24,11 +22,7 @@ func MakeServerEndpoints(s Service) Endpoints {
}
func MakeHTTPHandler(e Endpoints, logger log.Logger) http.Handler {
options := []httptransport.ServerOption{
httptransport.ServerErrorLogger(logger),
}
r := mux.NewRouter()
r, options := httputil.NewRouter(logger)
// POST /v1/devices/:udid/block force a device to unenroll next time it connects
// POST /v1/devices/:udid/unblock allow a blocked device to enroll again
@@ -36,33 +30,17 @@ func MakeHTTPHandler(e Endpoints, logger log.Logger) http.Handler {
r.Methods("POST").Path("/v1/devices/{udid}/block").Handler(httptransport.NewServer(
e.BlockDeviceEndpoint,
decodeBlockDeviceRequest,
httptransport.EncodeJSONResponse,
httputil.EncodeJSONResponse,
options...,
))
r.Methods("POST").Path("/v1/devices/{udid}/unblock").Handler(httptransport.NewServer(
e.UnblockDeviceEndpoint,
decodeUnblockDeviceRequest,
httptransport.EncodeJSONResponse,
httputil.EncodeJSONResponse,
options...,
))
return r
}
type errorWrapper struct {
Error string `json:"error"`
}
type errorer interface {
error() error
}
func errorDecoder(r *http.Response) error {
var w errorWrapper
if err := json.NewDecoder(r.Body).Decode(&w); err != nil {
return err
}
return errors.New(w.Error)
}

View File

@@ -2,13 +2,13 @@ package remove
import (
"context"
"encoding/json"
"errors"
"net/http"
"net/url"
"github.com/go-kit/kit/endpoint"
"github.com/gorilla/mux"
"github.com/micromdm/micromdm/pkg/httputil"
)
func (svc *RemoveService) UnblockDevice(ctx context.Context, udid string) error {
@@ -23,7 +23,7 @@ type unblockDeviceResponse struct {
Err error `json:"err,omitempty"`
}
func (r unblockDeviceResponse) error() error { return r.Err }
func (r unblockDeviceResponse) Failed() error { return r.Err }
func decodeUnblockDeviceRequest(ctx context.Context, r *http.Request) (interface{}, error) {
var errBadRoute = errors.New("bad route")
@@ -45,11 +45,8 @@ func encodeUnblockDeviceRequest(_ context.Context, r *http.Request, request inte
}
func decodeUnblockDeviceResponse(_ context.Context, r *http.Response) (interface{}, error) {
if r.StatusCode != http.StatusOK {
return nil, errorDecoder(r)
}
var resp unblockDeviceResponse
err := json.NewDecoder(r.Body).Decode(&resp)
err := httputil.DecodeJSONResponse(r, &resp)
return resp, err
}