func (srv *Server) newHandlerArgs(spec apihttp.HandlerConstraints) apihttp.NewHandlerArgs { ctxt := httpContext{ srv: srv, strictValidation: spec.StrictValidation, controllerModelOnly: spec.ControllerModelOnly, } var args apihttp.NewHandlerArgs switch spec.AuthKind { case names.UserTagKind: args.Connect = ctxt.stateForRequestAuthenticatedUser case names.UnitTagKind: args.Connect = ctxt.stateForRequestAuthenticatedAgent case "": logger.Tracef(`no access level specified; proceeding with "unauthenticated"`) args.Connect = func(req *http.Request) (*state.State, state.Entity, error) { st, err := ctxt.stateForRequestUnauthenticated(req) return st, nil, err } default: logger.Warningf(`unrecognized access level %q; proceeding with "unauthenticated"`, spec.AuthKind) args.Connect = func(req *http.Request) (*state.State, state.Entity, error) { st, err := ctxt.stateForRequestUnauthenticated(req) return st, nil, err } } return args }
// NewUploadHandler returns a new HTTP handler for the given args. func NewUploadHandler(args apihttp.NewHandlerArgs) http.Handler { return server.NewLegacyHTTPHandler( func(req *http.Request) (server.DataStore, names.Tag, error) { st, entity, err := args.Connect(req) if err != nil { return nil, nil, errors.Trace(err) } resources, err := st.Resources() if err != nil { return nil, nil, errors.Trace(err) } return resources, entity.Tag(), nil }, ) }