Skip to content

Commit

Permalink
refactor user api (#351)
Browse files Browse the repository at this point in the history
Closes #307
  • Loading branch information
groob committed Dec 10, 2017
1 parent 45aaceb commit c5b1e8c
Show file tree
Hide file tree
Showing 22 changed files with 307 additions and 218 deletions.
2 changes: 1 addition & 1 deletion cmd/mdmctl/apply_user.go
Expand Up @@ -63,7 +63,7 @@ func (cmd *applyCommand) applyUser(args []string) error {
manifest.PasswordHash = hashPlist
}

usr, err := cmd.applysvc.ApplyUser(context.TODO(), manifest)
usr, err := cmd.usersvc.ApplyUser(context.TODO(), manifest)
if err != nil {
return errors.Wrap(err, "apply user with mdmctl")
}
Expand Down
5 changes: 2 additions & 3 deletions cmd/mdmctl/get_users.go
Expand Up @@ -7,9 +7,8 @@ import (
"os"
"text/tabwriter"

"github.com/micromdm/micromdm/platform/user"
"github.com/pkg/errors"

"github.com/micromdm/micromdm/platform/api/server/list"
)

type usersTableOutput struct{ w *tabwriter.Writer }
Expand All @@ -34,7 +33,7 @@ func (cmd *getCommand) getUsers(args []string) error {
out.BasicHeader()
defer out.BasicFooter()

users, err := cmd.list.ListUsers(context.TODO(), list.ListUsersOption{})
users, err := cmd.usersvc.ListUsers(context.TODO(), user.ListUsersOption{})
if err != nil {
return errors.Wrap(err, "list users")
}
Expand Down
10 changes: 10 additions & 0 deletions cmd/mdmctl/setup.go
Expand Up @@ -9,12 +9,14 @@ import (
"github.com/micromdm/micromdm/platform/blueprint"
"github.com/micromdm/micromdm/platform/profile"
"github.com/micromdm/micromdm/platform/remove"
"github.com/micromdm/micromdm/platform/user"
)

type remoteServices struct {
profilesvc profile.Service
blueprintsvc blueprint.Service
blocksvc remove.Service
usersvc user.Service
applysvc apply.Service
list list.Service
}
Expand Down Expand Up @@ -46,6 +48,13 @@ func setupClient(logger log.Logger) (*remoteServices, error) {
return nil, err
}

usersvc, err := user.NewHTTPClient(
cfg.ServerURL, cfg.APIToken, logger,
httptransport.SetClient(skipVerifyHTTPClient(cfg.SkipVerify)))
if err != nil {
return nil, err
}

applysvc, err := apply.NewClient(
cfg.ServerURL, logger, cfg.APIToken,
httptransport.SetClient(skipVerifyHTTPClient(cfg.SkipVerify)))
Expand All @@ -64,6 +73,7 @@ func setupClient(logger log.Logger) (*remoteServices, error) {
profilesvc: profilesvc,
blueprintsvc: blueprintsvc,
blocksvc: blocksvc,
usersvc: usersvc,
applysvc: applysvc,
list: listsvc,
}, nil
Expand Down
25 changes: 12 additions & 13 deletions cmd/micromdm/serve.go
Expand Up @@ -61,6 +61,7 @@ import (
block "github.com/micromdm/micromdm/platform/remove"
blockbuiltin "github.com/micromdm/micromdm/platform/remove/builtin"
"github.com/micromdm/micromdm/platform/user"
userbuiltin "github.com/micromdm/micromdm/platform/user/builtin"
"github.com/micromdm/micromdm/workflow/webhook"
)

Expand Down Expand Up @@ -172,7 +173,7 @@ func serve(args []string) error {
stdlog.Fatal(err)
}

userDB, err := user.NewDB(sm.db, sm.pubclient, log.With(logger, "component", "user db"))
userDB, err := userbuiltin.NewDB(sm.db, sm.pubclient, log.With(logger, "component", "user db"))
if err != nil {
stdlog.Fatal(err)
}
Expand Down Expand Up @@ -284,16 +285,22 @@ func serve(args []string) error {
}

blueprintEndpoints := blueprint.MakeServerEndpoints(blueprintsvc)

blockEndpoints := block.MakeServerEndpoints(removeService)

var usersvc user.Service
{
usersvc = user.New(userDB)
}

userEndpoints := user.MakeServerEndpoints(usersvc)

var listsvc list.Service
{
l := &list.ListService{
DEPClient: dc,
Devices: devDB,
Tokens: tokenDB,
Apps: appDB,
Users: userDB,
}
listsvc = l

Expand All @@ -313,7 +320,6 @@ func serve(args []string) error {
GetDEPProfileEndpoint: list.MakeGetDEPProfileEndpoint(listsvc),
GetDEPDeviceEndpoint: list.MakeGetDEPDeviceDetailsEndpoint(listsvc),
ListAppsEndpont: list.MakeListAppsEndpoint(listsvc),
ListUserEndpoint: list.MakeListUsersEndpoint(listsvc),
}

var applysvc apply.Service
Expand All @@ -322,7 +328,6 @@ func serve(args []string) error {
DEPClient: dc,
Tokens: tokenDB,
Apps: appDB,
Users: userDB,
}
applysvc = l
if err := l.WatchTokenUpdates(sm.pubclient); err != nil {
Expand All @@ -340,16 +345,10 @@ func serve(args []string) error {
appUploadEndpoint = apply.MakeUploadAppEndpiont(applysvc)
}

var applyUserEndpoint endpoint.Endpoint
{
applyUserEndpoint = apply.MakeApplyUserEndpoint(applysvc)
}

applyEndpoints := apply.Endpoints{
ApplyDEPTokensEndpoint: apply.MakeApplyDEPTokensEndpoint(applysvc),
DefineDEPProfileEndpoint: defineDEPProfileEndpoint,
AppUploadEndpoint: appUploadEndpoint,
ApplyUserEndpoint: applyUserEndpoint,
}

applyAPIHandlers := apply.MakeHTTPHandlers(ctx, applyEndpoints, connectOpts...)
Expand All @@ -375,11 +374,13 @@ func serve(args []string) error {
profilesHandler := profile.MakeHTTPHandler(profileEndpoints, logger)
blueprintsHandler := blueprint.MakeHTTPHandler(blueprintEndpoints, logger)
blockhandler := block.MakeHTTPHandler(blockEndpoints, logger)
userHandler := user.MakeHTTPHandler(userEndpoints, logger)

// API commands. Only handled if the user provides an api key.
if *flAPIKey != "" {
r.Handle("/v1/profiles", apiAuthMiddleware(*flAPIKey, profilesHandler))
r.Handle("/v1/blueprints", apiAuthMiddleware(*flAPIKey, blueprintsHandler))
r.Handle("/v1/users", apiAuthMiddleware(*flAPIKey, userHandler))
r.Handle("/v1/devices/{udid}/block", apiAuthMiddleware(*flAPIKey, blockhandler))
r.Handle("/v1/devices/{udid}/unblock", apiAuthMiddleware(*flAPIKey, blockhandler))
r.Handle("/push/{udid}", apiAuthMiddleware(*flAPIKey, pushHandlers.PushHandler))
Expand All @@ -393,8 +394,6 @@ func serve(args []string) error {
r.Handle("/v1/dep/profiles", apiAuthMiddleware(*flAPIKey, applyAPIHandlers.DefineDEPProfileHandler)).Methods("POST")
r.Handle("/v1/apps", apiAuthMiddleware(*flAPIKey, applyAPIHandlers.AppUploadHandler)).Methods("POST")
r.Handle("/v1/apps", apiAuthMiddleware(*flAPIKey, listAPIHandlers.ListAppsHandler)).Methods("GET")
r.Handle("/v1/users", apiAuthMiddleware(*flAPIKey, applyAPIHandlers.ApplyUserhandler)).Methods("PUT")
r.Handle("/v1/users", apiAuthMiddleware(*flAPIKey, listAPIHandlers.ListUsersHander)).Methods("GET")
r.Handle("/v1/config/certificate", apiAuthMiddleware(*flAPIKey, configHandlers.SavePushCertificateHandler)).Methods("PUT")
}

Expand Down
12 changes: 0 additions & 12 deletions platform/api/server/apply/client.go
Expand Up @@ -49,22 +49,10 @@ func NewClient(instance string, logger log.Logger, token string, opts ...httptra
).Endpoint()
}

var applyUserEndpoint endpoint.Endpoint
{
applyUserEndpoint = httptransport.NewClient(
"PUT",
copyURL(u, "/v1/users"),
encodeRequestWithToken(token, EncodeHTTPGenericRequest),
DecodeApplyUserResponse,
opts...,
).Endpoint()
}

return Endpoints{
ApplyDEPTokensEndpoint: applyDEPTokensEndpoint,
DefineDEPProfileEndpoint: defineDEPProfileEndpoint,
AppUploadEndpoint: uploadAppEndpoint,
ApplyUserEndpoint: applyUserEndpoint,
}, nil
}

Expand Down
37 changes: 0 additions & 37 deletions platform/api/server/apply/endpoint.go
Expand Up @@ -6,27 +6,12 @@ import (

"github.com/go-kit/kit/endpoint"
"github.com/micromdm/dep"

"github.com/micromdm/micromdm/platform/user"
)

type Endpoints struct {
ApplyDEPTokensEndpoint endpoint.Endpoint
DefineDEPProfileEndpoint endpoint.Endpoint
AppUploadEndpoint endpoint.Endpoint
ApplyUserEndpoint endpoint.Endpoint
}

func (e Endpoints) ApplyUser(ctx context.Context, u user.User) (*user.User, error) {
request := applyUserRequest{
User: u,
}
resp, err := e.ApplyUserEndpoint(ctx, request)
if err != nil {
return nil, err
}
usr := resp.(applyUserResponse).User
return &usr, resp.(applyUserResponse).Err
}

func (e Endpoints) UploadApp(ctx context.Context, manifestName string, manifest io.Reader, pkgName string, pkg io.Reader) error {
Expand Down Expand Up @@ -83,17 +68,6 @@ func MakeDefineDEPProfile(svc Service) endpoint.Endpoint {
}
}

func MakeApplyUserEndpoint(svc Service) endpoint.Endpoint {
return func(ctx context.Context, request interface{}) (response interface{}, err error) {
req := request.(applyUserRequest)
u, err := svc.ApplyUser(ctx, req.User)
return applyUserResponse{
User: *u,
Err: err,
}, nil
}
}

func MakeUploadAppEndpiont(svc Service) endpoint.Endpoint {
return func(ctx context.Context, request interface{}) (response interface{}, err error) {
req := request.(appUploadRequest)
Expand Down Expand Up @@ -135,14 +109,3 @@ type depProfileResponse struct {
}

func (r *depProfileResponse) error() error { return r.Err }

type applyUserRequest struct {
User user.User `json:"user"`
}

type applyUserResponse struct {
Err error `json:"err"`
User user.User `json:"user"`
}

func (r applyUserResponse) error() error { return r.Err }
17 changes: 0 additions & 17 deletions platform/api/server/apply/service.go
Expand Up @@ -14,18 +14,15 @@ import (

"github.com/fullsailor/pkcs7"
"github.com/micromdm/dep"
"github.com/pkg/errors"

"github.com/micromdm/micromdm/platform/appstore"
"github.com/micromdm/micromdm/platform/deptoken"
"github.com/micromdm/micromdm/platform/pubsub"
"github.com/micromdm/micromdm/platform/user"
)

type Service interface {
ApplyDEPToken(ctx context.Context, P7MContent []byte) error
UploadApp(ctx context.Context, manifestName string, manifest io.Reader, pkgName string, pkg io.Reader) error
ApplyUser(ctx context.Context, u user.User) (*user.User, error)
DEPService
}

Expand All @@ -35,20 +32,6 @@ type ApplyService struct {

Tokens *deptoken.DB
Apps appstore.AppStore
Users *user.DB
}

func (svc *ApplyService) ApplyUser(ctx context.Context, u user.User) (*user.User, error) {
toSave := &u
if u.UUID == "" { //newUser
usr, err := user.NewFromRequest(u)
if err != nil {
return nil, errors.Wrap(err, "create user from request")
}
toSave = usr
}
err := svc.Users.Save(toSave)
return toSave, errors.Wrap(err, "apply user")
}

func (svc *ApplyService) UploadApp(ctx context.Context, manifestName string, manifest io.Reader, pkgName string, pkg io.Reader) error {
Expand Down
25 changes: 0 additions & 25 deletions platform/api/server/apply/transport_http.go
Expand Up @@ -17,7 +17,6 @@ type HTTPHandlers struct {
DEPTokensHandler http.Handler
DefineDEPProfileHandler http.Handler
AppUploadHandler http.Handler
ApplyUserhandler http.Handler
}

func MakeHTTPHandlers(ctx context.Context, endpoints Endpoints, opts ...httptransport.ServerOption) HTTPHandlers {
Expand All @@ -40,12 +39,6 @@ func MakeHTTPHandlers(ctx context.Context, endpoints Endpoints, opts ...httptran
encodeResponse,
opts...,
),
ApplyUserhandler: httptransport.NewServer(
endpoints.ApplyUserEndpoint,
decodeUserRequest,
encodeResponse,
opts...,
),
}
return h
}
Expand Down Expand Up @@ -87,15 +80,6 @@ func decodeAppUploadRequest(ctx context.Context, r *http.Request) (interface{},
}, nil
}

func decodeUserRequest(ctx context.Context, r *http.Request) (interface{}, error) {
var req applyUserRequest
if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
return nil, errors.Wrap(err, "decode user request")
}
defer r.Body.Close()
return req, nil
}

func EncodeUploadAppRequest(_ context.Context, r *http.Request, request interface{}) error {
req := request.(appUploadRequest)
body := new(bytes.Buffer)
Expand Down Expand Up @@ -204,12 +188,3 @@ func DecodeUploadAppResponse(_ context.Context, r *http.Response) (interface{},
err := json.NewDecoder(r.Body).Decode(&resp)
return resp, err
}

func DecodeApplyUserResponse(_ context.Context, r *http.Response) (interface{}, error) {
if r.StatusCode != http.StatusOK {
return nil, errorDecoder(r)
}
var resp applyUserResponse
err := json.NewDecoder(r.Body).Decode(&resp)
return resp, err
}
12 changes: 0 additions & 12 deletions platform/api/server/list/client.go
Expand Up @@ -81,25 +81,13 @@ func NewClient(instance string, logger log.Logger, token string, opts ...httptra
).Endpoint()
}

var listUsersEndpoint endpoint.Endpoint
{
listUsersEndpoint = httptransport.NewClient(
"GET",
copyURL(u, "/v1/users"),
encodeRequestWithToken(token, EncodeHTTPGenericRequest),
DecodeListUsersResponse,
opts...,
).Endpoint()
}

return Endpoints{
ListDevicesEndpoint: listDevicesEndpoint,
GetDEPTokensEndpoint: getDEPTokensEndpoint,
GetDEPAccountInfoEndpoint: getDEPAccountInfoEndpoint,
GetDEPDeviceEndpoint: getDEPDeviceDetailsEndpoint,
GetDEPProfileEndpoint: getDEPProfilesEndpoint,
ListAppsEndpont: listAppsEndpoint,
ListUserEndpoint: listUsersEndpoint,
}, nil
}

Expand Down

0 comments on commit c5b1e8c

Please sign in to comment.