From 44af7155db76a6065afdf4bec967728d61936ad5 Mon Sep 17 00:00:00 2001 From: Victor Lyuboslavsky Date: Mon, 3 Feb 2025 11:23:26 -0600 Subject: [PATCH] Refactoring service layer. Part 1 (#25945) Refactoring some functionality out of the service package so it can be reused by a different service package. - auth middleware - logging errors No functional changes. --- server/service/activities.go | 4 +- server/service/appconfig.go | 10 +-- server/service/apple_mdm.go | 88 +++++++++---------- server/service/base_client.go | 4 +- server/service/calendar.go | 2 +- server/service/campaigns.go | 2 +- server/service/carves.go | 10 +-- server/service/debug_handler.go | 3 +- server/service/devices.go | 20 ++--- server/service/endpoint_campaigns.go | 3 +- server/service/endpoint_middleware.go | 84 +----------------- server/service/endpoint_middleware_test.go | 3 +- server/service/endpoint_setup.go | 2 +- server/service/endpoint_utils.go | 5 +- server/service/endpoint_utils_test.go | 7 +- server/service/global_policies.go | 18 ++-- server/service/global_schedule.go | 8 +- server/service/handler.go | 3 +- server/service/hosts.go | 50 +++++------ server/service/installer.go | 4 +- .../service/integration_live_queries_test.go | 2 +- server/service/integration_mdm_test.go | 2 +- server/service/invites.go | 10 +-- server/service/labels.go | 20 ++--- server/service/live_queries.go | 10 +-- server/service/maintained_apps.go | 6 +- server/service/mdm.go | 44 +++++----- server/service/microsoft_mdm.go | 8 +- server/service/middleware/auth/auth.go | 69 +++++++++++++++ .../{ => middleware/auth}/http_auth.go | 9 +- server/service/middleware/log/log.go | 26 ++++++ server/service/orbit.go | 24 ++--- server/service/osquery.go | 12 +-- server/service/packs.go | 18 ++-- server/service/queries.go | 22 ++--- server/service/scheduled_queries.go | 10 +-- server/service/scripts.go | 28 +++--- server/service/secret_variables.go | 2 +- server/service/sessions.go | 16 ++-- server/service/sessions_test.go | 4 +- server/service/setup_experience.go | 10 +-- server/service/software.go | 8 +- server/service/software_installers.go | 22 ++--- server/service/software_titles.go | 4 +- server/service/status.go | 2 +- server/service/targets.go | 4 +- server/service/team_policies.go | 12 +-- server/service/team_schedule.go | 8 +- server/service/teams.go | 12 +-- server/service/testing_client.go | 4 +- server/service/translator.go | 2 +- server/service/transport.go | 8 +- server/service/transport_error.go | 2 +- server/service/trigger.go | 2 +- server/service/user_roles.go | 2 +- server/service/users.go | 26 +++--- server/service/vpp.go | 14 +-- server/service/vulnerabilities.go | 4 +- 58 files changed, 421 insertions(+), 397 deletions(-) create mode 100644 server/service/middleware/auth/auth.go rename server/service/{ => middleware/auth}/http_auth.go (77%) create mode 100644 server/service/middleware/log/log.go diff --git a/server/service/activities.go b/server/service/activities.go index d8d40f1d4f..a689ddf531 100644 --- a/server/service/activities.go +++ b/server/service/activities.go @@ -32,7 +32,7 @@ type listActivitiesResponse struct { Err error `json:"error,omitempty"` } -func (r listActivitiesResponse) error() error { return r.Err } +func (r listActivitiesResponse) Error() error { return r.Err } func listActivitiesEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*listActivitiesRequest) @@ -155,7 +155,7 @@ type listHostUpcomingActivitiesResponse struct { Err error `json:"error,omitempty"` } -func (r listHostUpcomingActivitiesResponse) error() error { return r.Err } +func (r listHostUpcomingActivitiesResponse) Error() error { return r.Err } func listHostUpcomingActivitiesEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*listHostUpcomingActivitiesRequest) diff --git a/server/service/appconfig.go b/server/service/appconfig.go index 8e604108b2..0ed2314f98 100644 --- a/server/service/appconfig.go +++ b/server/service/appconfig.go @@ -102,7 +102,7 @@ func (r appConfigResponse) MarshalJSON() ([]byte, error) { return rawjson.CombineRoots(responseData, appConfigData) } -func (r appConfigResponse) error() error { return r.Err } +func (r appConfigResponse) Error() error { return r.Err } func getAppConfigEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { vc, ok := viewer.FromContext(ctx) @@ -1418,7 +1418,7 @@ type applyEnrollSecretSpecResponse struct { Err error `json:"error,omitempty"` } -func (r applyEnrollSecretSpecResponse) error() error { return r.Err } +func (r applyEnrollSecretSpecResponse) Error() error { return r.Err } func applyEnrollSecretSpecEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*applyEnrollSecretSpecRequest) @@ -1476,7 +1476,7 @@ type getEnrollSecretSpecResponse struct { Err error `json:"error,omitempty"` } -func (r getEnrollSecretSpecResponse) error() error { return r.Err } +func (r getEnrollSecretSpecResponse) Error() error { return r.Err } func getEnrollSecretSpecEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { specs, err := svc.GetEnrollSecretSpec(ctx) @@ -1507,7 +1507,7 @@ type versionResponse struct { Err error `json:"error,omitempty"` } -func (r versionResponse) error() error { return r.Err } +func (r versionResponse) Error() error { return r.Err } func versionEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { info, err := svc.Version(ctx) @@ -1535,7 +1535,7 @@ type getCertificateResponse struct { Err error `json:"error,omitempty"` } -func (r getCertificateResponse) error() error { return r.Err } +func (r getCertificateResponse) Error() error { return r.Err } func getCertificateEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { chain, err := svc.CertificateChain(ctx) diff --git a/server/service/apple_mdm.go b/server/service/apple_mdm.go index 88ebcfbb03..993a6c5ffb 100644 --- a/server/service/apple_mdm.go +++ b/server/service/apple_mdm.go @@ -95,7 +95,7 @@ type getMDMAppleCommandResultsResponse struct { Err error `json:"error,omitempty"` } -func (r getMDMAppleCommandResultsResponse) error() error { return r.Err } +func (r getMDMAppleCommandResultsResponse) Error() error { return r.Err } func getMDMAppleCommandResultsEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*getMDMAppleCommandResultsRequest) @@ -197,7 +197,7 @@ type listMDMAppleCommandsResponse struct { Err error `json:"error,omitempty"` } -func (r listMDMAppleCommandsResponse) error() error { return r.Err } +func (r listMDMAppleCommandsResponse) Error() error { return r.Err } func listMDMAppleCommandsEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*listMDMAppleCommandsRequest) @@ -335,7 +335,7 @@ func (newMDMAppleConfigProfileRequest) DecodeRequest(ctx context.Context, r *htt return &decoded, nil } -func (r newMDMAppleConfigProfileResponse) error() error { return r.Err } +func (r newMDMAppleConfigProfileResponse) Error() error { return r.Err } func newMDMAppleConfigProfileEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*newMDMAppleConfigProfileRequest) @@ -643,7 +643,7 @@ type listMDMAppleConfigProfilesResponse struct { Err error `json:"error,omitempty"` } -func (r listMDMAppleConfigProfilesResponse) error() error { return r.Err } +func (r listMDMAppleConfigProfilesResponse) Error() error { return r.Err } func listMDMAppleConfigProfilesEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*listMDMAppleConfigProfilesRequest) @@ -693,7 +693,7 @@ type getMDMAppleConfigProfileResponse struct { fileName string } -func (r getMDMAppleConfigProfileResponse) error() error { return r.Err } +func (r getMDMAppleConfigProfileResponse) Error() error { return r.Err } func (r getMDMAppleConfigProfileResponse) hijackRender(ctx context.Context, w http.ResponseWriter) { w.Header().Set("Content-Length", strconv.FormatInt(r.fileLength, 10)) @@ -789,7 +789,7 @@ type deleteMDMAppleConfigProfileResponse struct { Err error `json:"error,omitempty"` } -func (r deleteMDMAppleConfigProfileResponse) error() error { return r.Err } +func (r deleteMDMAppleConfigProfileResponse) Error() error { return r.Err } func deleteMDMAppleConfigProfileEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*deleteMDMAppleConfigProfileRequest) @@ -987,7 +987,7 @@ type getMDMAppleFileVaultSummaryResponse struct { Err error `json:"error,omitempty"` } -func (r getMDMAppleFileVaultSummaryResponse) error() error { return r.Err } +func (r getMDMAppleFileVaultSummaryResponse) Error() error { return r.Err } func getMdmAppleFileVaultSummaryEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*getMDMAppleFileVaultSummaryRequest) @@ -1024,7 +1024,7 @@ type getMDMAppleProfilesSummaryResponse struct { Err error `json:"error,omitempty"` } -func (r getMDMAppleProfilesSummaryResponse) error() error { return r.Err } +func (r getMDMAppleProfilesSummaryResponse) Error() error { return r.Err } func getMDMAppleProfilesSummaryEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*getMDMAppleProfilesSummaryRequest) @@ -1085,7 +1085,7 @@ func (uploadAppleInstallerRequest) DecodeRequest(ctx context.Context, r *http.Re }, nil } -func (r uploadAppleInstallerResponse) error() error { return r.Err } +func (r uploadAppleInstallerResponse) Error() error { return r.Err } // Deprecated: Not in Use func uploadAppleInstallerEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { @@ -1174,7 +1174,7 @@ type getAppleInstallerDetailsResponse struct { Err error `json:"error,omitempty"` } -func (r getAppleInstallerDetailsResponse) error() error { return r.Err } +func (r getAppleInstallerDetailsResponse) Error() error { return r.Err } func getAppleInstallerEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*getAppleInstallerDetailsRequest) @@ -1207,7 +1207,7 @@ type deleteAppleInstallerDetailsResponse struct { Err error `json:"error,omitempty"` } -func (r deleteAppleInstallerDetailsResponse) error() error { return r.Err } +func (r deleteAppleInstallerDetailsResponse) Error() error { return r.Err } func deleteAppleInstallerEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*deleteAppleInstallerDetailsRequest) @@ -1235,7 +1235,7 @@ type listMDMAppleDevicesResponse struct { Err error `json:"error,omitempty"` } -func (r listMDMAppleDevicesResponse) error() error { return r.Err } +func (r listMDMAppleDevicesResponse) Error() error { return r.Err } func listMDMAppleDevicesEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { devices, err := svc.ListMDMAppleDevices(ctx) @@ -1261,7 +1261,7 @@ type newMDMAppleDEPKeyPairResponse struct { Err error `json:"error,omitempty"` } -func (r newMDMAppleDEPKeyPairResponse) error() error { return r.Err } +func (r newMDMAppleDEPKeyPairResponse) Error() error { return r.Err } func newMDMAppleDEPKeyPairEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { keyPair, err := svc.NewMDMAppleDEPKeyPair(ctx) @@ -1303,7 +1303,7 @@ type enqueueMDMAppleCommandResponse struct { Err error `json:"error,omitempty"` } -func (r enqueueMDMAppleCommandResponse) error() error { return r.Err } +func (r enqueueMDMAppleCommandResponse) Error() error { return r.Err } // Deprecated: enqueueMDMAppleCommandEndpoint is now deprecated, replaced by // the platform-agnostic runMDMCommandEndpoint. It is still supported @@ -1383,7 +1383,7 @@ func (mdmAppleEnrollRequest) DecodeRequest(ctx context.Context, r *http.Request) return &decoded, nil } -func (r mdmAppleEnrollResponse) error() error { return r.Err } +func (r mdmAppleEnrollResponse) Error() error { return r.Err } type mdmAppleEnrollResponse struct { Err error `json:"error,omitempty"` @@ -1614,7 +1614,7 @@ type mdmAppleCommandRemoveEnrollmentProfileResponse struct { Err error `json:"error,omitempty"` } -func (r mdmAppleCommandRemoveEnrollmentProfileResponse) error() error { return r.Err } +func (r mdmAppleCommandRemoveEnrollmentProfileResponse) Error() error { return r.Err } func mdmAppleCommandRemoveEnrollmentProfileEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*mdmAppleCommandRemoveEnrollmentProfileRequest) @@ -1702,7 +1702,7 @@ type mdmAppleGetInstallerRequest struct { Token string `query:"token"` } -func (r mdmAppleGetInstallerResponse) error() error { return r.Err } +func (r mdmAppleGetInstallerResponse) Error() error { return r.Err } type mdmAppleGetInstallerResponse struct { Err error `json:"error,omitempty"` @@ -1796,7 +1796,7 @@ type listMDMAppleInstallersResponse struct { Err error `json:"error,omitempty"` } -func (r listMDMAppleInstallersResponse) error() error { return r.Err } +func (r listMDMAppleInstallersResponse) Error() error { return r.Err } func listMDMAppleInstallersEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { installers, err := svc.ListMDMAppleInstallers(ctx) @@ -1842,7 +1842,7 @@ type deviceLockResponse struct { Err error `json:"error,omitempty"` } -func (r deviceLockResponse) error() error { return r.Err } +func (r deviceLockResponse) Error() error { return r.Err } func (r deviceLockResponse) Status() int { return http.StatusNoContent } @@ -1875,7 +1875,7 @@ type deviceWipeResponse struct { Err error `json:"error,omitempty"` } -func (r deviceWipeResponse) error() error { return r.Err } +func (r deviceWipeResponse) Error() error { return r.Err } func (r deviceWipeResponse) Status() int { return http.StatusNoContent } @@ -1910,7 +1910,7 @@ type getHostProfilesResponse struct { Err error `json:"error,omitempty"` } -func (r getHostProfilesResponse) error() error { return r.Err } +func (r getHostProfilesResponse) Error() error { return r.Err } func getHostProfilesEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*getHostProfilesRequest) @@ -1948,7 +1948,7 @@ type batchSetMDMAppleProfilesResponse struct { Err error `json:"error,omitempty"` } -func (r batchSetMDMAppleProfilesResponse) error() error { return r.Err } +func (r batchSetMDMAppleProfilesResponse) Error() error { return r.Err } func (r batchSetMDMAppleProfilesResponse) Status() int { return http.StatusNoContent } @@ -2101,7 +2101,7 @@ type preassignMDMAppleProfileResponse struct { Err error `json:"error,omitempty"` } -func (r preassignMDMAppleProfileResponse) error() error { return r.Err } +func (r preassignMDMAppleProfileResponse) Error() error { return r.Err } func (r preassignMDMAppleProfileResponse) Status() int { return http.StatusNoContent } @@ -2133,7 +2133,7 @@ type matchMDMApplePreassignmentResponse struct { Err error `json:"error,omitempty"` } -func (r matchMDMApplePreassignmentResponse) error() error { return r.Err } +func (r matchMDMApplePreassignmentResponse) Error() error { return r.Err } func (r matchMDMApplePreassignmentResponse) Status() int { return http.StatusNoContent } @@ -2165,7 +2165,7 @@ type updateMDMAppleSettingsResponse struct { Err error `json:"error,omitempty"` } -func (r updateMDMAppleSettingsResponse) error() error { return r.Err } +func (r updateMDMAppleSettingsResponse) Error() error { return r.Err } func (r updateMDMAppleSettingsResponse) Status() int { return http.StatusNoContent } @@ -2280,7 +2280,7 @@ func (uploadBootstrapPackageRequest) DecodeRequest(ctx context.Context, r *http. return &decoded, nil } -func (r uploadBootstrapPackageResponse) error() error { return r.Err } +func (r uploadBootstrapPackageResponse) Error() error { return r.Err } func uploadBootstrapPackageEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*uploadBootstrapPackageRequest) @@ -2319,7 +2319,7 @@ type downloadBootstrapPackageResponse struct { pkg *fleet.MDMAppleBootstrapPackage } -func (r downloadBootstrapPackageResponse) error() error { return r.Err } +func (r downloadBootstrapPackageResponse) Error() error { return r.Err } func (r downloadBootstrapPackageResponse) hijackRender(ctx context.Context, w http.ResponseWriter) { w.Header().Set("Content-Length", strconv.Itoa(len(r.pkg.Bytes))) @@ -2375,7 +2375,7 @@ type bootstrapPackageMetadataResponse struct { *fleet.MDMAppleBootstrapPackage `json:",omitempty"` } -func (r bootstrapPackageMetadataResponse) error() error { return r.Err } +func (r bootstrapPackageMetadataResponse) Error() error { return r.Err } func bootstrapPackageMetadataEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*bootstrapPackageMetadataRequest) @@ -2410,7 +2410,7 @@ type deleteBootstrapPackageResponse struct { Err error `json:"error,omitempty"` } -func (r deleteBootstrapPackageResponse) error() error { return r.Err } +func (r deleteBootstrapPackageResponse) Error() error { return r.Err } func deleteBootstrapPackageEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*deleteBootstrapPackageRequest) @@ -2441,7 +2441,7 @@ type getMDMAppleBootstrapPackageSummaryResponse struct { Err error `json:"error,omitempty"` } -func (r getMDMAppleBootstrapPackageSummaryResponse) error() error { return r.Err } +func (r getMDMAppleBootstrapPackageSummaryResponse) Error() error { return r.Err } func getMDMAppleBootstrapPackageSummaryEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*getMDMAppleBootstrapPackageSummaryRequest) @@ -2475,7 +2475,7 @@ type createMDMAppleSetupAssistantResponse struct { Err error `json:"error,omitempty"` } -func (r createMDMAppleSetupAssistantResponse) error() error { return r.Err } +func (r createMDMAppleSetupAssistantResponse) Error() error { return r.Err } func createMDMAppleSetupAssistantEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*createMDMAppleSetupAssistantRequest) @@ -2511,7 +2511,7 @@ type getMDMAppleSetupAssistantResponse struct { Err error `json:"error,omitempty"` } -func (r getMDMAppleSetupAssistantResponse) error() error { return r.Err } +func (r getMDMAppleSetupAssistantResponse) Error() error { return r.Err } func getMDMAppleSetupAssistantEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*getMDMAppleSetupAssistantRequest) @@ -2542,7 +2542,7 @@ type deleteMDMAppleSetupAssistantResponse struct { Err error `json:"error,omitempty"` } -func (r deleteMDMAppleSetupAssistantResponse) error() error { return r.Err } +func (r deleteMDMAppleSetupAssistantResponse) Error() error { return r.Err } func (r deleteMDMAppleSetupAssistantResponse) Status() int { return http.StatusNoContent } func deleteMDMAppleSetupAssistantEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { @@ -2573,7 +2573,7 @@ type updateMDMAppleSetupResponse struct { Err error `json:"error,omitempty"` } -func (r updateMDMAppleSetupResponse) error() error { return r.Err } +func (r updateMDMAppleSetupResponse) Error() error { return r.Err } func (r updateMDMAppleSetupResponse) Status() int { return http.StatusNoContent } @@ -2607,7 +2607,7 @@ type initiateMDMAppleSSOResponse struct { Err error `json:"error,omitempty"` } -func (r initiateMDMAppleSSOResponse) error() error { return r.Err } +func (r initiateMDMAppleSSOResponse) Error() error { return r.Err } func initiateMDMAppleSSOEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { idpProviderURL, err := svc.InitiateMDMAppleSSO(ctx) @@ -2666,7 +2666,7 @@ func (r callbackMDMAppleSSOResponse) hijackRender(ctx context.Context, w http.Re // Error will always be nil because errors are handled by sending a query // parameter in the URL response, this way the UI is able to display an erorr // message. -func (r callbackMDMAppleSSOResponse) error() error { return nil } +func (r callbackMDMAppleSSOResponse) Error() error { return nil } func callbackMDMAppleSSOEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { auth := request.(fleet.Auth) @@ -4388,7 +4388,7 @@ type generateABMKeyPairResponse struct { Err error `json:"error,omitempty"` } -func (r generateABMKeyPairResponse) error() error { return r.Err } +func (r generateABMKeyPairResponse) Error() error { return r.Err } func generateABMKeyPairEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { keyPair, err := svc.GenerateABMKeyPair(ctx) @@ -4490,7 +4490,7 @@ type uploadABMTokenResponse struct { Err error `json:"error,omitempty"` } -func (r uploadABMTokenResponse) error() error { return r.Err } +func (r uploadABMTokenResponse) Error() error { return r.Err } func uploadABMTokenEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*uploadABMTokenRequest) @@ -4530,7 +4530,7 @@ type deleteABMTokenResponse struct { Err error `json:"error,omitempty"` } -func (r deleteABMTokenResponse) error() error { return r.Err } +func (r deleteABMTokenResponse) Error() error { return r.Err } func (r deleteABMTokenResponse) Status() int { return http.StatusNoContent } func deleteABMTokenEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { @@ -4559,7 +4559,7 @@ type listABMTokensResponse struct { Tokens []*fleet.ABMToken `json:"abm_tokens"` } -func (r listABMTokensResponse) error() error { return r.Err } +func (r listABMTokensResponse) Error() error { return r.Err } func listABMTokensEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { tokens, err := svc.ListABMTokens(ctx) @@ -4591,7 +4591,7 @@ type countABMTokensResponse struct { Count int `json:"count"` } -func (r countABMTokensResponse) error() error { return r.Err } +func (r countABMTokensResponse) Error() error { return r.Err } func countABMTokensEndpoint(ctx context.Context, _ interface{}, svc fleet.Service) (errorer, error) { tokenCount, err := svc.CountABMTokens(ctx) @@ -4627,7 +4627,7 @@ type updateABMTokenTeamsResponse struct { Err error `json:"error,omitempty"` } -func (r updateABMTokenTeamsResponse) error() error { return r.Err } +func (r updateABMTokenTeamsResponse) Error() error { return r.Err } func updateABMTokenTeamsEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*updateABMTokenTeamsRequest) @@ -4690,7 +4690,7 @@ type renewABMTokenResponse struct { Err error `json:"error,omitempty"` } -func (r renewABMTokenResponse) error() error { return r.Err } +func (r renewABMTokenResponse) Error() error { return r.Err } func renewABMTokenEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*renewABMTokenRequest) @@ -4816,7 +4816,7 @@ type mdmAppleOTAResponse struct { xml []byte } -func (r mdmAppleOTAResponse) error() error { return r.Err } +func (r mdmAppleOTAResponse) Error() error { return r.Err } func (r mdmAppleOTAResponse) hijackRender(ctx context.Context, w http.ResponseWriter) { w.Header().Set("Content-Length", fmt.Sprintf("%d", len(r.xml))) diff --git a/server/service/base_client.go b/server/service/base_client.go index bb33559e92..a3bfbcaf85 100644 --- a/server/service/base_client.go +++ b/server/service/base_client.go @@ -80,8 +80,8 @@ func (bc *baseClient) parseResponse(verb, path string, response *http.Response, return fmt.Errorf("decode %s %s response: %w, body: %s", verb, path, err, b) } if e, ok := responseDest.(errorer); ok { - if e.error() != nil { - return fmt.Errorf("%s %s error: %w", verb, path, e.error()) + if e.Error() != nil { + return fmt.Errorf("%s %s error: %w", verb, path, e.Error()) } } } diff --git a/server/service/calendar.go b/server/service/calendar.go index 6f7ff6b26e..d5a74bd35b 100644 --- a/server/service/calendar.go +++ b/server/service/calendar.go @@ -39,7 +39,7 @@ type calendarWebhookResponse struct { Err error `json:"error,omitempty"` } -func (r calendarWebhookResponse) error() error { return r.Err } +func (r calendarWebhookResponse) Error() error { return r.Err } func calendarWebhookEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*calendarWebhookRequest) diff --git a/server/service/campaigns.go b/server/service/campaigns.go index e02406fe04..5066aa5966 100644 --- a/server/service/campaigns.go +++ b/server/service/campaigns.go @@ -28,7 +28,7 @@ type createDistributedQueryCampaignResponse struct { Err error `json:"error,omitempty"` } -func (r createDistributedQueryCampaignResponse) error() error { return r.Err } +func (r createDistributedQueryCampaignResponse) Error() error { return r.Err } func createDistributedQueryCampaignEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*createDistributedQueryCampaignRequest) diff --git a/server/service/carves.go b/server/service/carves.go index 216a18065a..ca7d71dd9f 100644 --- a/server/service/carves.go +++ b/server/service/carves.go @@ -27,7 +27,7 @@ type listCarvesResponse struct { Err error `json:"error,omitempty"` } -func (r listCarvesResponse) error() error { return r.Err } +func (r listCarvesResponse) Error() error { return r.Err } func listCarvesEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*listCarvesRequest) @@ -64,7 +64,7 @@ type getCarveResponse struct { Err error `json:"error,omitempty"` } -func (r getCarveResponse) error() error { return r.Err } +func (r getCarveResponse) Error() error { return r.Err } func getCarveEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*getCarveRequest) @@ -98,7 +98,7 @@ type getCarveBlockResponse struct { Err error `json:"error,omitempty"` } -func (r getCarveBlockResponse) error() error { return r.Err } +func (r getCarveBlockResponse) Error() error { return r.Err } func getCarveBlockEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*getCarveBlockRequest) @@ -159,7 +159,7 @@ type carveBeginResponse struct { Err error `json:"error,omitempty"` } -func (r carveBeginResponse) error() error { return r.Err } +func (r carveBeginResponse) Error() error { return r.Err } func carveBeginEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*carveBeginRequest) @@ -254,7 +254,7 @@ type carveBlockResponse struct { Err error `json:"error,omitempty"` } -func (r carveBlockResponse) error() error { return r.Err } +func (r carveBlockResponse) Error() error { return r.Err } func carveBlockEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*carveBlockRequest) diff --git a/server/service/debug_handler.go b/server/service/debug_handler.go index 15800ff9e4..016f233bb2 100644 --- a/server/service/debug_handler.go +++ b/server/service/debug_handler.go @@ -12,6 +12,7 @@ import ( "github.com/fleetdm/fleet/v4/server/contexts/token" "github.com/fleetdm/fleet/v4/server/errorstore" "github.com/fleetdm/fleet/v4/server/fleet" + "github.com/fleetdm/fleet/v4/server/service/middleware/auth" kithttp "github.com/go-kit/kit/transport/http" kitlog "github.com/go-kit/log" @@ -32,7 +33,7 @@ func (m *debugAuthenticationMiddleware) Middleware(next http.Handler) http.Handl return } ctx := token.NewContext(context.Background(), bearer) - v, err := authViewer(ctx, string(bearer), m.service) + v, err := auth.AuthViewer(ctx, string(bearer), m.service) if err != nil { http.Error(w, "Invalid authentication", http.StatusUnauthorized) return diff --git a/server/service/devices.go b/server/service/devices.go index 187e168bf4..f445322366 100644 --- a/server/service/devices.go +++ b/server/service/devices.go @@ -39,7 +39,7 @@ func (r *deviceAuthPingRequest) deviceAuthToken() string { type devicePingResponse struct{} -func (r devicePingResponse) error() error { return nil } +func (r devicePingResponse) Error() error { return nil } func (r devicePingResponse) hijackRender(ctx context.Context, w http.ResponseWriter) { writeCapabilitiesHeader(w, fleet.GetServerDeviceCapabilities()) @@ -69,7 +69,7 @@ type fleetDesktopResponse struct { fleet.DesktopSummary } -func (r fleetDesktopResponse) error() error { return r.Err } +func (r fleetDesktopResponse) Error() error { return r.Err } type getFleetDesktopRequest struct { Token string `url:"token"` @@ -121,7 +121,7 @@ type getDeviceHostResponse struct { GlobalConfig fleet.DeviceGlobalConfig `json:"global_config"` } -func (r getDeviceHostResponse) error() error { return r.Err } +func (r getDeviceHostResponse) Error() error { return r.Err } func getDeviceHostEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*getDeviceHostRequest) @@ -341,7 +341,7 @@ type listDevicePoliciesResponse struct { Policies []*fleet.HostPolicy `json:"policies"` } -func (r listDevicePoliciesResponse) error() error { return r.Err } +func (r listDevicePoliciesResponse) Error() error { return r.Err } func listDevicePoliciesEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { host, ok := hostctx.FromContext(ctx) @@ -388,7 +388,7 @@ func (r transparencyURLResponse) hijackRender(ctx context.Context, w http.Respon w.WriteHeader(http.StatusTemporaryRedirect) } -func (r transparencyURLResponse) error() error { return r.Err } +func (r transparencyURLResponse) Error() error { return r.Err } func transparencyURL(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { config, err := svc.AppConfigObfuscated(ctx) @@ -447,7 +447,7 @@ func (f *fleetdErrorRequest) DecodeBody(ctx context.Context, r io.Reader, u url. type fleetdErrorResponse struct{} -func (r fleetdErrorResponse) error() error { return nil } +func (r fleetdErrorResponse) Error() error { return nil } func fleetdError(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*fleetdErrorRequest) @@ -511,7 +511,7 @@ func (r getDeviceMDMManualEnrollProfileResponse) hijackRender(ctx context.Contex } } -func (r getDeviceMDMManualEnrollProfileResponse) error() error { return r.Err } +func (r getDeviceMDMManualEnrollProfileResponse) Error() error { return r.Err } func getDeviceMDMManualEnrollProfileEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { // this call ensures that the authentication was done, no need to actually @@ -588,7 +588,7 @@ type deviceMigrateMDMResponse struct { Err error `json:"error,omitempty"` } -func (r deviceMigrateMDMResponse) error() error { return r.Err } +func (r deviceMigrateMDMResponse) Error() error { return r.Err } func (r deviceMigrateMDMResponse) Status() int { return http.StatusNoContent } @@ -625,7 +625,7 @@ type triggerLinuxDiskEncryptionEscrowResponse struct { Err error `json:"error,omitempty"` } -func (r triggerLinuxDiskEncryptionEscrowResponse) error() error { return r.Err } +func (r triggerLinuxDiskEncryptionEscrowResponse) Error() error { return r.Err } func (r triggerLinuxDiskEncryptionEscrowResponse) Status() int { return http.StatusNoContent } @@ -666,7 +666,7 @@ type getDeviceSoftwareResponse struct { Err error `json:"error,omitempty"` } -func (r getDeviceSoftwareResponse) error() error { return r.Err } +func (r getDeviceSoftwareResponse) Error() error { return r.Err } func getDeviceSoftwareEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { host, ok := hostctx.FromContext(ctx) diff --git a/server/service/endpoint_campaigns.go b/server/service/endpoint_campaigns.go index bad6d9e270..28ab5a81ad 100644 --- a/server/service/endpoint_campaigns.go +++ b/server/service/endpoint_campaigns.go @@ -8,6 +8,7 @@ import ( "strings" "github.com/fleetdm/fleet/v4/server/config" + "github.com/fleetdm/fleet/v4/server/service/middleware/auth" "github.com/fleetdm/fleet/v4/server/contexts/viewer" "github.com/fleetdm/fleet/v4/server/fleet" @@ -74,7 +75,7 @@ func makeStreamDistributedQueryCampaignResultsHandler(config config.ServerConfig } // Authenticate with the token - vc, err := authViewer(context.Background(), string(token), svc) + vc, err := auth.AuthViewer(context.Background(), string(token), svc) if err != nil || !vc.CanPerformActions() { logger.Log("err", err, "msg", "unauthorized viewer") conn.WriteJSONError("unauthorized") //nolint:errcheck diff --git a/server/service/endpoint_middleware.go b/server/service/endpoint_middleware.go index bf2f7c49b4..c9d4718e31 100644 --- a/server/service/endpoint_middleware.go +++ b/server/service/endpoint_middleware.go @@ -8,14 +8,13 @@ import ( "github.com/fleetdm/fleet/v4/server/contexts/logging" "github.com/fleetdm/fleet/v4/server/fleet" + middleware_log "github.com/fleetdm/fleet/v4/server/service/middleware/log" kithttp "github.com/go-kit/kit/transport/http" "github.com/go-kit/log" "github.com/go-kit/log/level" authz_ctx "github.com/fleetdm/fleet/v4/server/contexts/authz" hostctx "github.com/fleetdm/fleet/v4/server/contexts/host" - "github.com/fleetdm/fleet/v4/server/contexts/token" - "github.com/fleetdm/fleet/v4/server/contexts/viewer" "github.com/go-kit/kit/endpoint" ) @@ -76,7 +75,7 @@ func authenticatedDevice(svc fleet.Service, logger log.Logger, next endpoint.End } return resp, nil } - return logged(authDeviceFunc) + return middleware_log.Logged(authDeviceFunc) } func getDeviceAuthToken(r interface{}) (string, error) { @@ -123,7 +122,7 @@ func authenticatedHost(svc fleet.Service, logger log.Logger, next endpoint.Endpo } return resp, nil } - return logged(authHostFunc) + return middleware_log.Logged(authHostFunc) } func authenticatedOrbitHost(svc fleet.Service, logger log.Logger, next endpoint.Endpoint) endpoint.Endpoint { @@ -160,7 +159,7 @@ func authenticatedOrbitHost(svc fleet.Service, logger log.Logger, next endpoint. } return resp, nil } - return logged(authHostFunc) + return middleware_log.Logged(authHostFunc) } func getOrbitNodeKey(r interface{}) (string, error) { @@ -176,78 +175,3 @@ func getNodeKey(r interface{}) (string, error) { } return "", newOsqueryError("request type does not implement hostNodeKey method. This is likely a Fleet programmer error.") } - -// authenticatedUser wraps an endpoint, requires that the Fleet user is -// authenticated, and populates the context with a Viewer struct for that user. -// -// If auth fails or the user must reset their password, an error is returned. -func authenticatedUser(svc fleet.Service, next endpoint.Endpoint) endpoint.Endpoint { - authUserFunc := func(ctx context.Context, request interface{}) (interface{}, error) { - // first check if already successfully set - if v, ok := viewer.FromContext(ctx); ok { - if v.User.IsAdminForcedPasswordReset() { - return nil, fleet.ErrPasswordResetRequired - } - - return next(ctx, request) - } - - // if not succesful, try again this time with errors - sessionKey, ok := token.FromContext(ctx) - if !ok { - return nil, fleet.NewAuthHeaderRequiredError("no auth token") - } - - v, err := authViewer(ctx, string(sessionKey), svc) - if err != nil { - return nil, err - } - - if v.User.IsAdminForcedPasswordReset() { - return nil, fleet.ErrPasswordResetRequired - } - - ctx = viewer.NewContext(ctx, *v) - if ac, ok := authz_ctx.FromContext(ctx); ok { - ac.SetAuthnMethod(authz_ctx.AuthnUserToken) - } - return next(ctx, request) - } - - return logged(authUserFunc) -} - -func unauthenticatedRequest(svc fleet.Service, next endpoint.Endpoint) endpoint.Endpoint { - return logged(next) -} - -// logged wraps an endpoint and adds the error if the context supports it -func logged(next endpoint.Endpoint) endpoint.Endpoint { - return func(ctx context.Context, request interface{}) (response interface{}, err error) { - res, err := next(ctx, request) - if err != nil { - logging.WithErr(ctx, err) - return nil, err - } - if errResp, ok := res.(errorer); ok { - err = errResp.error() - if err != nil { - logging.WithErr(ctx, err) - } - } - return res, nil - } -} - -// authViewer creates an authenticated viewer by validating the session key. -func authViewer(ctx context.Context, sessionKey string, svc fleet.Service) (*viewer.Viewer, error) { - session, err := svc.GetSessionByKey(ctx, sessionKey) - if err != nil { - return nil, fleet.NewAuthRequiredError(err.Error()) - } - user, err := svc.UserUnauthorized(ctx, session.UserID) - if err != nil { - return nil, fleet.NewAuthRequiredError(err.Error()) - } - return &viewer.Viewer{User: user, Session: session}, nil -} diff --git a/server/service/endpoint_middleware_test.go b/server/service/endpoint_middleware_test.go index c4d7891b1c..8c988208be 100644 --- a/server/service/endpoint_middleware_test.go +++ b/server/service/endpoint_middleware_test.go @@ -9,6 +9,7 @@ import ( "github.com/fleetdm/fleet/v4/server/contexts/viewer" "github.com/fleetdm/fleet/v4/server/fleet" "github.com/fleetdm/fleet/v4/server/mock" + "github.com/fleetdm/fleet/v4/server/service/middleware/auth" kitlog "github.com/go-kit/log" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -228,7 +229,7 @@ func TestAuthenticatedUserMW(t *testing.T) { ctx := viewer.NewContext(ctx, viewer.Viewer{User: tt.user}) nextCalled := false - endpoint := authenticatedUser(svc, func(ctx context.Context, request interface{}) (response interface{}, err error) { + endpoint := auth.AuthenticatedUser(svc, func(ctx context.Context, request interface{}) (response interface{}, err error) { nextCalled = true return nil, nil }) diff --git a/server/service/endpoint_setup.go b/server/service/endpoint_setup.go index d8777a53d3..0e950d5d1e 100644 --- a/server/service/endpoint_setup.go +++ b/server/service/endpoint_setup.go @@ -27,7 +27,7 @@ type setupResponse struct { Err error `json:"error,omitempty"` } -func (r setupResponse) error() error { return r.Err } +func (r setupResponse) Error() error { return r.Err } func makeSetupEndpoint(svc fleet.Service, logger kitlog.Logger) endpoint.Endpoint { return func(ctx context.Context, request interface{}) (interface{}, error) { diff --git a/server/service/endpoint_utils.go b/server/service/endpoint_utils.go index d4914b1ac3..b19363c0fb 100644 --- a/server/service/endpoint_utils.go +++ b/server/service/endpoint_utils.go @@ -19,6 +19,7 @@ import ( "github.com/fleetdm/fleet/v4/server/contexts/capabilities" "github.com/fleetdm/fleet/v4/server/contexts/license" "github.com/fleetdm/fleet/v4/server/fleet" + "github.com/fleetdm/fleet/v4/server/service/middleware/auth" "github.com/go-kit/kit/endpoint" kithttp "github.com/go-kit/kit/transport/http" "github.com/go-kit/log" @@ -395,7 +396,7 @@ func newUserAuthenticatedEndpointer(svc fleet.Service, opts []kithttp.ServerOpti svc: svc, opts: opts, r: r, - authFunc: authenticatedUser, + authFunc: auth.AuthenticatedUser, versions: versions, } } @@ -437,7 +438,7 @@ func newNoAuthEndpointer(svc fleet.Service, opts []kithttp.ServerOption, r *mux. svc: svc, opts: opts, r: r, - authFunc: unauthenticatedRequest, + authFunc: auth.UnauthenticatedRequest, versions: versions, } } diff --git a/server/service/endpoint_utils_test.go b/server/service/endpoint_utils_test.go index 95307747bc..994d43194a 100644 --- a/server/service/endpoint_utils_test.go +++ b/server/service/endpoint_utils_test.go @@ -14,6 +14,7 @@ import ( "github.com/fleetdm/fleet/v4/server/fleet" "github.com/fleetdm/fleet/v4/server/mock" "github.com/fleetdm/fleet/v4/server/ptr" + "github.com/fleetdm/fleet/v4/server/service/middleware/auth" "github.com/go-kit/kit/endpoint" kithttp "github.com/go-kit/kit/transport/http" kitlog "github.com/go-kit/log" @@ -253,7 +254,7 @@ func TestUniversalDecoderQueryAndListPlayNice(t *testing.T) { type stringErrorer string -func (s stringErrorer) error() error { return nil } +func (s stringErrorer) Error() error { return nil } func TestEndpointer(t *testing.T) { r := mux.NewRouter() @@ -284,7 +285,7 @@ func TestEndpointer(t *testing.T) { fleetAPIOptions := []kithttp.ServerOption{ kithttp.ServerBefore( kithttp.PopulateRequestContext, // populate the request context with common fields - setRequestsContexts(svc), + auth.SetRequestsContexts(svc), ), kithttp.ServerErrorHandler(&errorHandler{kitlog.NewNopLogger()}), kithttp.ServerErrorEncoder(encodeError), @@ -404,7 +405,7 @@ func TestEndpointerCustomMiddleware(t *testing.T) { fleetAPIOptions := []kithttp.ServerOption{ kithttp.ServerBefore( kithttp.PopulateRequestContext, - setRequestsContexts(svc), + auth.SetRequestsContexts(svc), ), kithttp.ServerErrorHandler(&errorHandler{kitlog.NewNopLogger()}), kithttp.ServerErrorEncoder(encodeError), diff --git a/server/service/global_policies.go b/server/service/global_policies.go index f7ef700367..4946d509fb 100644 --- a/server/service/global_policies.go +++ b/server/service/global_policies.go @@ -39,7 +39,7 @@ type globalPolicyResponse struct { Err error `json:"error,omitempty"` } -func (r globalPolicyResponse) error() error { return r.Err } +func (r globalPolicyResponse) Error() error { return r.Err } func globalPolicyEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*globalPolicyRequest) @@ -103,7 +103,7 @@ type listGlobalPoliciesResponse struct { Err error `json:"error,omitempty"` } -func (r listGlobalPoliciesResponse) error() error { return r.Err } +func (r listGlobalPoliciesResponse) Error() error { return r.Err } func listGlobalPoliciesEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*listGlobalPoliciesRequest) @@ -135,7 +135,7 @@ type getPolicyByIDResponse struct { Err error `json:"error,omitempty"` } -func (r getPolicyByIDResponse) error() error { return r.Err } +func (r getPolicyByIDResponse) Error() error { return r.Err } func getPolicyByIDEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*getPolicyByIDRequest) @@ -177,7 +177,7 @@ type countGlobalPoliciesResponse struct { Err error `json:"error,omitempty"` } -func (r countGlobalPoliciesResponse) error() error { return r.Err } +func (r countGlobalPoliciesResponse) Error() error { return r.Err } func countGlobalPoliciesEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*countGlobalPoliciesRequest) @@ -214,7 +214,7 @@ type deleteGlobalPoliciesResponse struct { Err error `json:"error,omitempty"` } -func (r deleteGlobalPoliciesResponse) error() error { return r.Err } +func (r deleteGlobalPoliciesResponse) Error() error { return r.Err } func deleteGlobalPoliciesEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*deleteGlobalPoliciesRequest) @@ -315,7 +315,7 @@ type modifyGlobalPolicyResponse struct { Err error `json:"error,omitempty"` } -func (r modifyGlobalPolicyResponse) error() error { return r.Err } +func (r modifyGlobalPolicyResponse) Error() error { return r.Err } func modifyGlobalPolicyEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*modifyGlobalPolicyRequest) @@ -343,7 +343,7 @@ type resetAutomationResponse struct { Err error `json:"error,omitempty"` } -func (r resetAutomationResponse) error() error { return r.Err } +func (r resetAutomationResponse) Error() error { return r.Err } func resetAutomationEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*resetAutomationRequest) @@ -474,7 +474,7 @@ type applyPolicySpecsResponse struct { Err error `json:"error,omitempty"` } -func (r applyPolicySpecsResponse) error() error { return r.Err } +func (r applyPolicySpecsResponse) Error() error { return r.Err } func applyPolicySpecsEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*applyPolicySpecsRequest) @@ -578,7 +578,7 @@ type autofillPoliciesResponse struct { Err error `json:"error,omitempty"` } -func (a autofillPoliciesResponse) error() error { +func (a autofillPoliciesResponse) Error() error { return a.Err } diff --git a/server/service/global_schedule.go b/server/service/global_schedule.go index b2a01d813d..8840f86261 100644 --- a/server/service/global_schedule.go +++ b/server/service/global_schedule.go @@ -21,7 +21,7 @@ type getGlobalScheduleResponse struct { Err error `json:"error,omitempty"` } -func (r getGlobalScheduleResponse) error() error { return r.Err } +func (r getGlobalScheduleResponse) Error() error { return r.Err } func getGlobalScheduleEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*getGlobalScheduleRequest) @@ -67,7 +67,7 @@ type globalScheduleQueryResponse struct { Err error `json:"error,omitempty"` } -func (r globalScheduleQueryResponse) error() error { return r.Err } +func (r globalScheduleQueryResponse) Error() error { return r.Err } func globalScheduleQueryEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*globalScheduleQueryRequest) @@ -119,7 +119,7 @@ type modifyGlobalScheduleResponse struct { Err error `json:"error,omitempty"` } -func (r modifyGlobalScheduleResponse) error() error { return r.Err } +func (r modifyGlobalScheduleResponse) Error() error { return r.Err } func modifyGlobalScheduleEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*modifyGlobalScheduleRequest) @@ -154,7 +154,7 @@ type deleteGlobalScheduleResponse struct { Err error `json:"error,omitempty"` } -func (r deleteGlobalScheduleResponse) error() error { return r.Err } +func (r deleteGlobalScheduleResponse) Error() error { return r.Err } func deleteGlobalScheduleEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*deleteGlobalScheduleRequest) diff --git a/server/service/handler.go b/server/service/handler.go index 7990369cb8..74b8528e71 100644 --- a/server/service/handler.go +++ b/server/service/handler.go @@ -25,6 +25,7 @@ import ( "github.com/fleetdm/fleet/v4/server/mdm/nanomdm/service/nanomdm" scep_depot "github.com/fleetdm/fleet/v4/server/mdm/scep/depot" scepserver "github.com/fleetdm/fleet/v4/server/mdm/scep/server" + "github.com/fleetdm/fleet/v4/server/service/middleware/auth" "github.com/fleetdm/fleet/v4/server/service/middleware/authzcheck" "github.com/fleetdm/fleet/v4/server/service/middleware/mdmconfigured" "github.com/fleetdm/fleet/v4/server/service/middleware/ratelimit" @@ -130,7 +131,7 @@ func MakeHandler( fleetAPIOptions := []kithttp.ServerOption{ kithttp.ServerBefore( kithttp.PopulateRequestContext, // populate the request context with common fields - setRequestsContexts(svc), + auth.SetRequestsContexts(svc), ), kithttp.ServerErrorHandler(&errorHandler{logger}), kithttp.ServerErrorEncoder(encodeError), diff --git a/server/service/hosts.go b/server/service/hosts.go index 023c616086..006df7434f 100644 --- a/server/service/hosts.go +++ b/server/service/hosts.go @@ -87,7 +87,7 @@ type listHostsResponse struct { Err error `json:"error,omitempty"` } -func (r listHostsResponse) error() error { return r.Err } +func (r listHostsResponse) Error() error { return r.Err } func listHostsEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*listHostsRequest) @@ -271,7 +271,7 @@ type deleteHostsResponse struct { StatusCode int `json:"-"` } -func (r deleteHostsResponse) error() error { return r.Err } +func (r deleteHostsResponse) Error() error { return r.Err } // Status implements statuser interface to send out custom HTTP success codes. func (r deleteHostsResponse) Status() int { return r.StatusCode } @@ -393,7 +393,7 @@ type countHostsResponse struct { Err error `json:"error,omitempty"` } -func (r countHostsResponse) error() error { return r.Err } +func (r countHostsResponse) Error() error { return r.Err } func countHostsEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*countHostsRequest) @@ -458,7 +458,7 @@ type searchHostsResponse struct { Err error `json:"error,omitempty"` } -func (r searchHostsResponse) error() error { return r.Err } +func (r searchHostsResponse) Error() error { return r.Err } func searchHostsEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*searchHostsRequest) @@ -526,7 +526,7 @@ type getHostResponse struct { Err error `json:"error,omitempty"` } -func (r getHostResponse) error() error { return r.Err } +func (r getHostResponse) Error() error { return r.Err } func getHostEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*getHostRequest) @@ -631,7 +631,7 @@ type getHostSummaryResponse struct { Err error `json:"error,omitempty"` } -func (r getHostSummaryResponse) error() error { return r.Err } +func (r getHostSummaryResponse) Error() error { return r.Err } func getHostSummaryEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*getHostSummaryRequest) @@ -765,7 +765,7 @@ type deleteHostResponse struct { Err error `json:"error,omitempty"` } -func (r deleteHostResponse) error() error { return r.Err } +func (r deleteHostResponse) Error() error { return r.Err } func deleteHostEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*deleteHostRequest) @@ -822,7 +822,7 @@ type addHostsToTeamResponse struct { Err error `json:"error,omitempty"` } -func (r addHostsToTeamResponse) error() error { return r.Err } +func (r addHostsToTeamResponse) Error() error { return r.Err } func addHostsToTeamEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*addHostsToTeamRequest) @@ -941,7 +941,7 @@ type addHostsToTeamByFilterResponse struct { Err error `json:"error,omitempty"` } -func (r addHostsToTeamByFilterResponse) error() error { return r.Err } +func (r addHostsToTeamByFilterResponse) Error() error { return r.Err } func addHostsToTeamByFilterEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*addHostsToTeamByFilterRequest) @@ -1017,7 +1017,7 @@ type refetchHostResponse struct { Err error `json:"error,omitempty"` } -func (r refetchHostResponse) error() error { +func (r refetchHostResponse) Error() error { return r.Err } @@ -1334,7 +1334,7 @@ type getHostQueryReportResponse struct { Err error `json:"error,omitempty"` } -func (r getHostQueryReportResponse) error() error { return r.Err } +func (r getHostQueryReportResponse) Error() error { return r.Err } func getHostQueryReportEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*getHostQueryReportRequest) @@ -1454,7 +1454,7 @@ type listHostDeviceMappingResponse struct { Err error `json:"error,omitempty"` } -func (r listHostDeviceMappingResponse) error() error { return r.Err } +func (r listHostDeviceMappingResponse) Error() error { return r.Err } func listHostDeviceMappingEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*listHostDeviceMappingRequest) @@ -1500,7 +1500,7 @@ type putHostDeviceMappingResponse struct { Err error `json:"error,omitempty"` } -func (r putHostDeviceMappingResponse) error() error { return r.Err } +func (r putHostDeviceMappingResponse) Error() error { return r.Err } func putHostDeviceMappingEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*putHostDeviceMappingRequest) @@ -1549,7 +1549,7 @@ type getHostMDMResponse struct { Err error `json:"error,omitempty"` } -func (r getHostMDMResponse) error() error { return r.Err } +func (r getHostMDMResponse) Error() error { return r.Err } func getHostMDM(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*getHostMDMRequest) @@ -1570,7 +1570,7 @@ type getHostMDMSummaryRequest struct { Platform string `query:"platform,optional"` } -func (r getHostMDMSummaryResponse) error() error { return r.Err } +func (r getHostMDMSummaryResponse) Error() error { return r.Err } func getHostMDMSummary(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*getHostMDMSummaryRequest) @@ -1597,7 +1597,7 @@ type getMacadminsDataResponse struct { Macadmins *fleet.MacadminsData `json:"macadmins"` } -func (r getMacadminsDataResponse) error() error { return r.Err } +func (r getMacadminsDataResponse) Error() error { return r.Err } func getMacadminsDataEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*getMacadminsDataRequest) @@ -1674,7 +1674,7 @@ type getAggregatedMacadminsDataResponse struct { Macadmins *fleet.AggregatedMacadminsData `json:"macadmins"` } -func (r getAggregatedMacadminsDataResponse) error() error { return r.Err } +func (r getAggregatedMacadminsDataResponse) Error() error { return r.Err } func getAggregatedMacadminsDataEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*getAggregatedMacadminsDataRequest) @@ -1802,7 +1802,7 @@ type hostsReportResponse struct { Err error `json:"error,omitempty"` } -func (r hostsReportResponse) error() error { return r.Err } +func (r hostsReportResponse) Error() error { return r.Err } func (r hostsReportResponse) hijackRender(ctx context.Context, w http.ResponseWriter) { // post-process the Device Mappings for CSV rendering @@ -1971,7 +1971,7 @@ type osVersionsResponse struct { Err error `json:"error,omitempty"` } -func (r osVersionsResponse) error() error { return r.Err } +func (r osVersionsResponse) Error() error { return r.Err } func osVersionsEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*osVersionsRequest) @@ -2101,7 +2101,7 @@ type getOSVersionResponse struct { Err error `json:"error,omitempty"` } -func (r getOSVersionResponse) error() error { return r.Err } +func (r getOSVersionResponse) Error() error { return r.Err } func getOSVersionEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*getOSVersionRequest) @@ -2203,7 +2203,7 @@ type getHostEncryptionKeyResponse struct { HostID uint `json:"host_id,omitempty"` } -func (r getHostEncryptionKeyResponse) error() error { return r.Err } +func (r getHostEncryptionKeyResponse) Error() error { return r.Err } func getHostEncryptionKey(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*getHostEncryptionKeyRequest) @@ -2329,7 +2329,7 @@ type getHostHealthResponse struct { HostHealth *fleet.HostHealth `json:"health,omitempty"` } -func (r getHostHealthResponse) error() error { return r.Err } +func (r getHostHealthResponse) Error() error { return r.Err } func getHostHealthEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*getHostHealthRequest) @@ -2461,7 +2461,7 @@ type addLabelsToHostResponse struct { Err error `json:"error,omitempty"` } -func (r addLabelsToHostResponse) error() error { return r.Err } +func (r addLabelsToHostResponse) Error() error { return r.Err } func addLabelsToHostEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*addLabelsToHostRequest) @@ -2506,7 +2506,7 @@ type removeLabelsFromHostResponse struct { Err error `json:"error,omitempty"` } -func (r removeLabelsFromHostResponse) error() error { return r.Err } +func (r removeLabelsFromHostResponse) Error() error { return r.Err } func removeLabelsFromHostEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*removeLabelsFromHostRequest) @@ -2638,7 +2638,7 @@ type getHostSoftwareResponse struct { Err error `json:"error,omitempty"` } -func (r getHostSoftwareResponse) error() error { return r.Err } +func (r getHostSoftwareResponse) Error() error { return r.Err } func getHostSoftwareEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*getHostSoftwareRequest) diff --git a/server/service/installer.go b/server/service/installer.go index 5b110f8ec3..cebb5c73f6 100644 --- a/server/service/installer.go +++ b/server/service/installer.go @@ -46,7 +46,7 @@ type getInstallerResponse struct { fileExt string } -func (r getInstallerResponse) error() error { return r.Err } +func (r getInstallerResponse) Error() error { return r.Err } func (r getInstallerResponse) hijackRender(ctx context.Context, w http.ResponseWriter) { w.Header().Set("Content-Length", strconv.FormatInt(r.fileLength, 10)) @@ -121,7 +121,7 @@ type checkInstallerResponse struct { Err error `json:"error,omitempty"` } -func (r checkInstallerResponse) error() error { return r.Err } +func (r checkInstallerResponse) Error() error { return r.Err } func checkInstallerEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*checkInstallerRequest) diff --git a/server/service/integration_live_queries_test.go b/server/service/integration_live_queries_test.go index 8ecd65fb7b..bdad7f49e9 100644 --- a/server/service/integration_live_queries_test.go +++ b/server/service/integration_live_queries_test.go @@ -251,7 +251,7 @@ func (s *liveQueriesTestSuite) TestLiveQueriesRestOneHostOneQuery() { require.Len(t, liveQueryResp.Results[0].Results, 1) result = liveQueryResp.Results[0].Results[0] } else { // customQueryOneHostId(.*)Endpoint - assert.Empty(t, liveQueryOnHostResp.Error) + assert.Empty(t, liveQueryOnHostResp.Err) assert.Equal(t, host.ID, liveQueryOnHostResp.HostID) assert.Equal(t, fleet.StatusOnline, liveQueryOnHostResp.Status) assert.Equal(t, query, liveQueryOnHostResp.Query) diff --git a/server/service/integration_mdm_test.go b/server/service/integration_mdm_test.go index c511d55130..3c3f6c47e1 100644 --- a/server/service/integration_mdm_test.go +++ b/server/service/integration_mdm_test.go @@ -13126,7 +13126,7 @@ func (s *integrationMDMTestSuite) TestSetupExperience() { var respPutSetupExperience putSetupExperienceSoftwareResponse s.DoJSON("PUT", "/api/latest/fleet/setup_experience/software", putSetupExperienceSoftwareRequest{TeamID: team1.ID, TitleIDs: []uint{respListTitles.SoftwareTitles[0].ID, respListTitles.SoftwareTitles[1].ID}}, http.StatusOK, &respPutSetupExperience) - require.Nil(t, respPutSetupExperience.error()) + require.Nil(t, respPutSetupExperience.Error()) s.DoJSON("GET", "/api/latest/fleet/setup_experience/software", getSetupExperienceSoftwareRequest{}, http.StatusOK, &respGetSetupExperience, "team_id", fmt.Sprint(team1.ID)) require.Len(t, respGetSetupExperience.SoftwareTitles, 2) diff --git a/server/service/invites.go b/server/service/invites.go index d03cd73364..2aac9f6c5d 100644 --- a/server/service/invites.go +++ b/server/service/invites.go @@ -28,7 +28,7 @@ type createInviteResponse struct { Err error `json:"error,omitempty"` } -func (r createInviteResponse) error() error { return r.Err } +func (r createInviteResponse) Error() error { return r.Err } func createInviteEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*createInviteRequest) @@ -168,7 +168,7 @@ type listInvitesResponse struct { Err error `json:"error,omitempty"` } -func (r listInvitesResponse) error() error { return r.Err } +func (r listInvitesResponse) Error() error { return r.Err } func listInvitesEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*listInvitesRequest) @@ -205,7 +205,7 @@ type updateInviteResponse struct { Err error `json:"error,omitempty"` } -func (r updateInviteResponse) error() error { return r.Err } +func (r updateInviteResponse) Error() error { return r.Err } func updateInviteEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*updateInviteRequest) @@ -288,7 +288,7 @@ type deleteInviteResponse struct { Err error `json:"error,omitempty"` } -func (r deleteInviteResponse) error() error { return r.Err } +func (r deleteInviteResponse) Error() error { return r.Err } func deleteInviteEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*deleteInviteRequest) @@ -319,7 +319,7 @@ type verifyInviteResponse struct { Err error `json:"error,omitempty"` } -func (r verifyInviteResponse) error() error { return r.Err } +func (r verifyInviteResponse) Error() error { return r.Err } func verifyInviteEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*verifyInviteRequest) diff --git a/server/service/labels.go b/server/service/labels.go index 8424471c82..09e8c73aa3 100644 --- a/server/service/labels.go +++ b/server/service/labels.go @@ -26,7 +26,7 @@ type createLabelResponse struct { Err error `json:"error,omitempty"` } -func (r createLabelResponse) error() error { return r.Err } +func (r createLabelResponse) Error() error { return r.Err } func createLabelEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*createLabelRequest) @@ -113,7 +113,7 @@ type modifyLabelResponse struct { Err error `json:"error,omitempty"` } -func (r modifyLabelResponse) error() error { return r.Err } +func (r modifyLabelResponse) Error() error { return r.Err } func modifyLabelEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*modifyLabelRequest) @@ -201,7 +201,7 @@ type getLabelResponse struct { Err error `json:"error,omitempty"` } -func (r getLabelResponse) error() error { return r.Err } +func (r getLabelResponse) Error() error { return r.Err } func getLabelEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*getLabelRequest) @@ -242,7 +242,7 @@ type listLabelsResponse struct { Err error `json:"error,omitempty"` } -func (r listLabelsResponse) error() error { return r.Err } +func (r listLabelsResponse) Error() error { return r.Err } func listLabelsEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*listLabelsRequest) @@ -300,7 +300,7 @@ type getLabelsSummaryResponse struct { Err error `json:"error,omitempty"` } -func (r getLabelsSummaryResponse) error() error { return r.Err } +func (r getLabelsSummaryResponse) Error() error { return r.Err } func getLabelsSummaryEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { labels, err := svc.LabelsSummary(ctx) @@ -395,7 +395,7 @@ type deleteLabelResponse struct { Err error `json:"error,omitempty"` } -func (r deleteLabelResponse) error() error { return r.Err } +func (r deleteLabelResponse) Error() error { return r.Err } func deleteLabelEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*deleteLabelRequest) @@ -433,7 +433,7 @@ type deleteLabelByIDResponse struct { Err error `json:"error,omitempty"` } -func (r deleteLabelByIDResponse) error() error { return r.Err } +func (r deleteLabelByIDResponse) Error() error { return r.Err } func deleteLabelByIDEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*deleteLabelByIDRequest) @@ -482,7 +482,7 @@ type applyLabelSpecsResponse struct { Err error `json:"error,omitempty"` } -func (r applyLabelSpecsResponse) error() error { return r.Err } +func (r applyLabelSpecsResponse) Error() error { return r.Err } func applyLabelSpecsEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*applyLabelSpecsRequest) @@ -566,7 +566,7 @@ type getLabelSpecsResponse struct { Err error `json:"error,omitempty"` } -func (r getLabelSpecsResponse) error() error { return r.Err } +func (r getLabelSpecsResponse) Error() error { return r.Err } func getLabelSpecsEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { specs, err := svc.GetLabelSpecs(ctx) @@ -593,7 +593,7 @@ type getLabelSpecResponse struct { Err error `json:"error,omitempty"` } -func (r getLabelSpecResponse) error() error { return r.Err } +func (r getLabelSpecResponse) Error() error { return r.Err } func getLabelSpecEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*getGenericSpecRequest) diff --git a/server/service/live_queries.go b/server/service/live_queries.go index 5f1327c0a1..8c49c70804 100644 --- a/server/service/live_queries.go +++ b/server/service/live_queries.go @@ -50,7 +50,7 @@ type runLiveQueryResponse struct { Results []fleet.QueryCampaignResult `json:"live_query_results"` } -func (r runLiveQueryResponse) error() error { return r.Err } +func (r runLiveQueryResponse) Error() error { return r.Err } type runOneLiveQueryResponse struct { QueryID uint `json:"query_id"` @@ -60,17 +60,17 @@ type runOneLiveQueryResponse struct { Err error `json:"error,omitempty"` } -func (r runOneLiveQueryResponse) error() error { return r.Err } +func (r runOneLiveQueryResponse) Error() error { return r.Err } type runLiveQueryOnHostResponse struct { HostID uint `json:"host_id"` Rows []map[string]string `json:"rows"` Query string `json:"query"` Status fleet.HostStatus `json:"status"` - Error string `json:"error,omitempty"` + Err string `json:"error,omitempty"` } -func (r runLiveQueryOnHostResponse) error() error { return nil } +func (r runLiveQueryOnHostResponse) Error() error { return nil } func runOneLiveQueryEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*runOneLiveQueryRequest) @@ -193,7 +193,7 @@ func runLiveQueryOnHost(svc fleet.Service, ctx context.Context, host *fleet.Host err = errors.New("timeout waiting for results") } if err != nil { - res.Error = err.Error() + res.Err = err.Error() } } return res, nil diff --git a/server/service/maintained_apps.go b/server/service/maintained_apps.go index f9a267cf70..2a028c827b 100644 --- a/server/service/maintained_apps.go +++ b/server/service/maintained_apps.go @@ -26,7 +26,7 @@ type addFleetMaintainedAppResponse struct { Err error `json:"error,omitempty"` } -func (r addFleetMaintainedAppResponse) error() error { return r.Err } +func (r addFleetMaintainedAppResponse) Error() error { return r.Err } func addFleetMaintainedAppEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*addFleetMaintainedAppRequest) @@ -93,7 +93,7 @@ type listFleetMaintainedAppsResponse struct { Err error `json:"error,omitempty"` } -func (r listFleetMaintainedAppsResponse) error() error { return r.Err } +func (r listFleetMaintainedAppsResponse) Error() error { return r.Err } func listFleetMaintainedAppsEndpoint(ctx context.Context, request any, svc fleet.Service) (errorer, error) { req := request.(*listFleetMaintainedAppsRequest) @@ -141,7 +141,7 @@ type getFleetMaintainedAppResponse struct { Err error `json:"error,omitempty"` } -func (r getFleetMaintainedAppResponse) error() error { return r.Err } +func (r getFleetMaintainedAppResponse) Error() error { return r.Err } func getFleetMaintainedApp(ctx context.Context, request any, svc fleet.Service) (errorer, error) { req := request.(*getFleetMaintainedAppRequest) diff --git a/server/service/mdm.go b/server/service/mdm.go index 22026f7f86..8578bdfd80 100644 --- a/server/service/mdm.go +++ b/server/service/mdm.go @@ -46,7 +46,7 @@ type getAppleMDMResponse struct { Err error `json:"error,omitempty"` } -func (r getAppleMDMResponse) error() error { return r.Err } +func (r getAppleMDMResponse) Error() error { return r.Err } func getAppleMDMEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { appleMDM, err := svc.GetAppleMDM(ctx) @@ -88,7 +88,7 @@ type getAppleBMResponse struct { Err error `json:"error,omitempty"` } -func (r getAppleBMResponse) error() error { return r.Err } +func (r getAppleBMResponse) Error() error { return r.Err } func getAppleBMEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { appleBM, err := svc.GetAppleBM(ctx) @@ -121,7 +121,7 @@ type requestMDMAppleCSRResponse struct { Err error `json:"error,omitempty"` } -func (r requestMDMAppleCSRResponse) error() error { return r.Err } +func (r requestMDMAppleCSRResponse) Error() error { return r.Err } func requestMDMAppleCSREndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*requestMDMAppleCSRRequest) @@ -262,7 +262,7 @@ type createMDMEULAResponse struct { Err error `json:"error,omitempty"` } -func (r createMDMEULAResponse) error() error { return r.Err } +func (r createMDMEULAResponse) Error() error { return r.Err } func createMDMEULAEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*createMDMEULARequest) @@ -302,7 +302,7 @@ type getMDMEULAResponse struct { eula *fleet.MDMEULA } -func (r getMDMEULAResponse) error() error { return r.Err } +func (r getMDMEULAResponse) Error() error { return r.Err } func (r getMDMEULAResponse) hijackRender(ctx context.Context, w http.ResponseWriter) { w.Header().Set("Content-Length", strconv.Itoa(len(r.eula.Bytes))) @@ -348,7 +348,7 @@ type getMDMEULAMetadataResponse struct { Err error `json:"error,omitempty"` } -func (r getMDMEULAMetadataResponse) error() error { return r.Err } +func (r getMDMEULAMetadataResponse) Error() error { return r.Err } func getMDMEULAMetadataEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { eula, err := svc.MDMGetEULAMetadata(ctx) @@ -379,7 +379,7 @@ type deleteMDMEULAResponse struct { Err error `json:"error,omitempty"` } -func (r deleteMDMEULAResponse) error() error { return r.Err } +func (r deleteMDMEULAResponse) Error() error { return r.Err } func deleteMDMEULAEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*deleteMDMEULARequest) @@ -455,7 +455,7 @@ type runMDMCommandResponse struct { Err error `json:"error,omitempty"` } -func (r runMDMCommandResponse) error() error { return r.Err } +func (r runMDMCommandResponse) Error() error { return r.Err } func runMDMCommandEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*runMDMCommandRequest) @@ -650,7 +650,7 @@ type getMDMCommandResultsResponse struct { Err error `json:"error,omitempty"` } -func (r getMDMCommandResultsResponse) error() error { return r.Err } +func (r getMDMCommandResultsResponse) Error() error { return r.Err } func getMDMCommandResultsEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*getMDMCommandResultsRequest) @@ -767,7 +767,7 @@ type listMDMCommandsResponse struct { Err error `json:"error,omitempty"` } -func (r listMDMCommandsResponse) error() error { return r.Err } +func (r listMDMCommandsResponse) Error() error { return r.Err } func listMDMCommandsEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*listMDMCommandsRequest) @@ -883,7 +883,7 @@ type getMDMDiskEncryptionSummaryResponse struct { Err error `json:"error,omitempty"` } -func (r getMDMDiskEncryptionSummaryResponse) error() error { return r.Err } +func (r getMDMDiskEncryptionSummaryResponse) Error() error { return r.Err } func getMDMDiskEncryptionSummaryEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*getMDMDiskEncryptionSummaryRequest) @@ -920,7 +920,7 @@ type getMDMProfilesSummaryResponse struct { Err error `json:"error,omitempty"` } -func (r getMDMProfilesSummaryResponse) error() error { return r.Err } +func (r getMDMProfilesSummaryResponse) Error() error { return r.Err } func getMDMProfilesSummaryEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*getMDMProfilesSummaryRequest) @@ -1016,7 +1016,7 @@ type getMDMConfigProfileResponse struct { Err error `json:"error,omitempty"` } -func (r getMDMConfigProfileResponse) error() error { return r.Err } +func (r getMDMConfigProfileResponse) Error() error { return r.Err } func getMDMConfigProfileEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*getMDMConfigProfileRequest) @@ -1111,7 +1111,7 @@ type deleteMDMConfigProfileResponse struct { Err error `json:"error,omitempty"` } -func (r deleteMDMConfigProfileResponse) error() error { return r.Err } +func (r deleteMDMConfigProfileResponse) Error() error { return r.Err } func deleteMDMConfigProfileEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*deleteMDMConfigProfileRequest) @@ -1284,7 +1284,7 @@ type newMDMConfigProfileResponse struct { Err error `json:"error,omitempty"` } -func (r newMDMConfigProfileResponse) error() error { return r.Err } +func (r newMDMConfigProfileResponse) Error() error { return r.Err } func newMDMConfigProfileEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*newMDMConfigProfileRequest) @@ -1565,7 +1565,7 @@ type batchSetMDMProfilesResponse struct { Err error `json:"error,omitempty"` } -func (r batchSetMDMProfilesResponse) error() error { return r.Err } +func (r batchSetMDMProfilesResponse) Error() error { return r.Err } func (r batchSetMDMProfilesResponse) Status() int { return http.StatusNoContent } @@ -2148,7 +2148,7 @@ type listMDMConfigProfilesResponse struct { Err error `json:"error,omitempty"` } -func (r listMDMConfigProfilesResponse) error() error { return r.Err } +func (r listMDMConfigProfilesResponse) Error() error { return r.Err } func listMDMConfigProfilesEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*listMDMConfigProfilesRequest) @@ -2204,7 +2204,7 @@ type updateMDMDiskEncryptionResponse struct { Err error `json:"error,omitempty"` } -func (r updateMDMDiskEncryptionResponse) error() error { return r.Err } +func (r updateMDMDiskEncryptionResponse) Error() error { return r.Err } func (r updateMDMDiskEncryptionResponse) Status() int { return http.StatusNoContent } @@ -2257,7 +2257,7 @@ type resendHostMDMProfileResponse struct { Err error `json:"error,omitempty"` } -func (r resendHostMDMProfileResponse) error() error { return r.Err } +func (r resendHostMDMProfileResponse) Error() error { return r.Err } func (r resendHostMDMProfileResponse) Status() int { return http.StatusAccepted } @@ -2386,7 +2386,7 @@ type getMDMAppleCSRResponse struct { Err error `json:"error,omitempty"` } -func (r getMDMAppleCSRResponse) error() error { return r.Err } +func (r getMDMAppleCSRResponse) Error() error { return r.Err } func getMDMAppleCSREndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { signedCSRB64, err := svc.GetMDMAppleCSR(ctx) @@ -2546,7 +2546,7 @@ type uploadMDMAppleAPNSCertResponse struct { Err error `json:"error,omitempty"` } -func (r uploadMDMAppleAPNSCertResponse) error() error { +func (r uploadMDMAppleAPNSCertResponse) Error() error { return r.Err } @@ -2694,7 +2694,7 @@ type deleteMDMAppleAPNSCertResponse struct { Err error `json:"error,omitempty"` } -func (r deleteMDMAppleAPNSCertResponse) error() error { +func (r deleteMDMAppleAPNSCertResponse) Error() error { return r.Err } diff --git a/server/service/microsoft_mdm.go b/server/service/microsoft_mdm.go index f2c6b7e8ad..ce283cefcb 100644 --- a/server/service/microsoft_mdm.go +++ b/server/service/microsoft_mdm.go @@ -72,7 +72,7 @@ type SoapResponseContainer struct { Err error } -func (r SoapResponseContainer) error() error { return r.Err } +func (r SoapResponseContainer) Error() error { return r.Err } // hijackRender writes the response header and the RAW HTML output func (r SoapResponseContainer) hijackRender(ctx context.Context, w http.ResponseWriter) { @@ -133,7 +133,7 @@ type SyncMLResponseMsgContainer struct { Err error } -func (r SyncMLResponseMsgContainer) error() error { return r.Err } +func (r SyncMLResponseMsgContainer) Error() error { return r.Err } // hijackRender writes the response header and the RAW HTML output func (r SyncMLResponseMsgContainer) hijackRender(ctx context.Context, w http.ResponseWriter) { @@ -177,7 +177,7 @@ func (req *MDMWebContainer) DecodeBody(ctx context.Context, r io.Reader, u url.V return nil } -func (req MDMWebContainer) error() error { return req.Err } +func (req MDMWebContainer) Error() error { return req.Err } // hijackRender writes the response header and the RAW HTML output func (req MDMWebContainer) hijackRender(ctx context.Context, w http.ResponseWriter) { @@ -196,7 +196,7 @@ type MDMAuthContainer struct { Err error } -func (r MDMAuthContainer) error() error { return r.Err } +func (r MDMAuthContainer) Error() error { return r.Err } // hijackRender writes the response header and the RAW XML output func (r MDMAuthContainer) hijackRender(ctx context.Context, w http.ResponseWriter) { diff --git a/server/service/middleware/auth/auth.go b/server/service/middleware/auth/auth.go new file mode 100644 index 0000000000..8cc33df35a --- /dev/null +++ b/server/service/middleware/auth/auth.go @@ -0,0 +1,69 @@ +package auth + +import ( + "context" + + "github.com/fleetdm/fleet/v4/server/contexts/authz" + "github.com/fleetdm/fleet/v4/server/contexts/token" + "github.com/fleetdm/fleet/v4/server/contexts/viewer" + "github.com/fleetdm/fleet/v4/server/fleet" + "github.com/fleetdm/fleet/v4/server/service/middleware/log" + "github.com/go-kit/kit/endpoint" +) + +// AuthViewer creates an authenticated viewer by validating the session key. +func AuthViewer(ctx context.Context, sessionKey string, svc fleet.Service) (*viewer.Viewer, error) { + session, err := svc.GetSessionByKey(ctx, sessionKey) + if err != nil { + return nil, fleet.NewAuthRequiredError(err.Error()) + } + user, err := svc.UserUnauthorized(ctx, session.UserID) + if err != nil { + return nil, fleet.NewAuthRequiredError(err.Error()) + } + return &viewer.Viewer{User: user, Session: session}, nil +} + +// AuthenticatedUser wraps an endpoint, requires that the Fleet user is +// authenticated, and populates the context with a Viewer struct for that user. +// +// If auth fails or the user must reset their password, an error is returned. +func AuthenticatedUser(svc fleet.Service, next endpoint.Endpoint) endpoint.Endpoint { + authUserFunc := func(ctx context.Context, request interface{}) (interface{}, error) { + // first check if already successfully set + if v, ok := viewer.FromContext(ctx); ok { + if v.User.IsAdminForcedPasswordReset() { + return nil, fleet.ErrPasswordResetRequired + } + + return next(ctx, request) + } + + // if not succesful, try again this time with errors + sessionKey, ok := token.FromContext(ctx) + if !ok { + return nil, fleet.NewAuthHeaderRequiredError("no auth token") + } + + v, err := AuthViewer(ctx, string(sessionKey), svc) + if err != nil { + return nil, err + } + + if v.User.IsAdminForcedPasswordReset() { + return nil, fleet.ErrPasswordResetRequired + } + + ctx = viewer.NewContext(ctx, *v) + if ac, ok := authz.FromContext(ctx); ok { + ac.SetAuthnMethod(authz.AuthnUserToken) + } + return next(ctx, request) + } + + return log.Logged(authUserFunc) +} + +func UnauthenticatedRequest(_ fleet.Service, next endpoint.Endpoint) endpoint.Endpoint { + return log.Logged(next) +} diff --git a/server/service/http_auth.go b/server/service/middleware/auth/http_auth.go similarity index 77% rename from server/service/http_auth.go rename to server/service/middleware/auth/http_auth.go index c2f8e291c8..568f434632 100644 --- a/server/service/http_auth.go +++ b/server/service/middleware/auth/http_auth.go @@ -1,4 +1,4 @@ -package service +package auth import ( "context" @@ -8,17 +8,16 @@ import ( "github.com/fleetdm/fleet/v4/server/contexts/token" "github.com/fleetdm/fleet/v4/server/contexts/viewer" "github.com/fleetdm/fleet/v4/server/fleet" - kithttp "github.com/go-kit/kit/transport/http" ) -// setRequestsContexts updates the request with necessary context values for a request -func setRequestsContexts(svc fleet.Service) kithttp.RequestFunc { +// SetRequestsContexts updates the request with necessary context values for a request +func SetRequestsContexts(svc fleet.Service) kithttp.RequestFunc { return func(ctx context.Context, r *http.Request) context.Context { bearer := token.FromHTTPRequest(r) ctx = token.NewContext(ctx, bearer) if bearer != "" { - v, err := authViewer(ctx, string(bearer), svc) + v, err := AuthViewer(ctx, string(bearer), svc) if err == nil { ctx = viewer.NewContext(ctx, *v) } diff --git a/server/service/middleware/log/log.go b/server/service/middleware/log/log.go new file mode 100644 index 0000000000..f1c7e5c1e5 --- /dev/null +++ b/server/service/middleware/log/log.go @@ -0,0 +1,26 @@ +package log + +import ( + "context" + + "github.com/fleetdm/fleet/v4/server/contexts/logging" + "github.com/go-kit/kit/endpoint" +) + +// Logged wraps an endpoint and adds the error if the context supports it +func Logged(next endpoint.Endpoint) endpoint.Endpoint { + return func(ctx context.Context, request interface{}) (response interface{}, err error) { + res, err := next(ctx, request) + if err != nil { + logging.WithErr(ctx, err) + return nil, err + } + if errResp, ok := res.(interface{ Error() error }); ok { + err = errResp.Error() + if err != nil { + logging.WithErr(ctx, err) + } + } + return res, nil + } +} diff --git a/server/service/orbit.go b/server/service/orbit.go index 21502285cb..f0bacbd444 100644 --- a/server/service/orbit.go +++ b/server/service/orbit.go @@ -70,9 +70,9 @@ type orbitGetConfigResponse struct { Err error `json:"error,omitempty"` } -func (r orbitGetConfigResponse) error() error { return r.Err } +func (r orbitGetConfigResponse) Error() error { return r.Err } -func (r EnrollOrbitResponse) error() error { return r.Err } +func (r EnrollOrbitResponse) Error() error { return r.Err } // hijackRender so we can add a header with the server capabilities in the // response, allowing Orbit to know what features are available without the @@ -652,7 +652,7 @@ func (r orbitPingResponse) hijackRender(ctx context.Context, w http.ResponseWrit writeCapabilitiesHeader(w, fleet.GetServerOrbitCapabilities()) } -func (r orbitPingResponse) error() error { return nil } +func (r orbitPingResponse) Error() error { return nil } // NOTE: we're intentionally not reading the capabilities header in this // endpoint as is unauthenticated and we don't want to trust whatever comes in @@ -683,7 +683,7 @@ type setOrUpdateDeviceTokenResponse struct { Err error `json:"error,omitempty"` } -func (r setOrUpdateDeviceTokenResponse) error() error { return r.Err } +func (r setOrUpdateDeviceTokenResponse) Error() error { return r.Err } func setOrUpdateDeviceTokenEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*setOrUpdateDeviceTokenRequest) @@ -744,7 +744,7 @@ type orbitGetScriptResponse struct { *fleet.HostScriptResult } -func (r orbitGetScriptResponse) error() error { return r.Err } +func (r orbitGetScriptResponse) Error() error { return r.Err } func getOrbitScriptEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*orbitGetScriptRequest) @@ -807,7 +807,7 @@ type orbitPostScriptResultResponse struct { Err error `json:"error,omitempty"` } -func (r orbitPostScriptResultResponse) error() error { return r.Err } +func (r orbitPostScriptResultResponse) Error() error { return r.Err } func postOrbitScriptResultEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*orbitPostScriptResultRequest) @@ -958,7 +958,7 @@ type orbitPutDeviceMappingResponse struct { Err error `json:"error,omitempty"` } -func (r orbitPutDeviceMappingResponse) error() error { return r.Err } +func (r orbitPutDeviceMappingResponse) Error() error { return r.Err } func putOrbitDeviceMappingEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*orbitPutDeviceMappingRequest) @@ -997,7 +997,7 @@ type orbitPostDiskEncryptionKeyResponse struct { Err error `json:"error,omitempty"` } -func (r orbitPostDiskEncryptionKeyResponse) error() error { return r.Err } +func (r orbitPostDiskEncryptionKeyResponse) Error() error { return r.Err } func (r orbitPostDiskEncryptionKeyResponse) Status() int { return http.StatusNoContent } func postOrbitDiskEncryptionKeyEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { @@ -1080,7 +1080,7 @@ type orbitPostLUKSResponse struct { Err error `json:"error,omitempty"` } -func (r orbitPostLUKSResponse) error() error { return r.Err } +func (r orbitPostLUKSResponse) Error() error { return r.Err } func (r orbitPostLUKSResponse) Status() int { return http.StatusNoContent } func postOrbitLUKSEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { @@ -1161,7 +1161,7 @@ type orbitGetSoftwareInstallResponse struct { *fleet.SoftwareInstallDetails } -func (r orbitGetSoftwareInstallResponse) error() error { return r.Err } +func (r orbitGetSoftwareInstallResponse) Error() error { return r.Err } func getOrbitSoftwareInstallDetails(ctx context.Context, request any, svc fleet.Service) (errorer, error) { req := request.(*orbitGetSoftwareInstallRequest) @@ -1259,7 +1259,7 @@ type orbitPostSoftwareInstallResultResponse struct { Err error `json:"error,omitempty"` } -func (r orbitPostSoftwareInstallResultResponse) error() error { return r.Err } +func (r orbitPostSoftwareInstallResultResponse) Error() error { return r.Err } func (r orbitPostSoftwareInstallResultResponse) Status() int { return http.StatusNoContent } func postOrbitSoftwareInstallResultEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { @@ -1364,7 +1364,7 @@ type getOrbitSetupExperienceStatusResponse struct { Err error `json:"error,omitempty"` } -func (r getOrbitSetupExperienceStatusResponse) error() error { return r.Err } +func (r getOrbitSetupExperienceStatusResponse) Error() error { return r.Err } func getOrbitSetupExperienceStatusEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*getOrbitSetupExperienceStatusRequest) diff --git a/server/service/osquery.go b/server/service/osquery.go index 19f5e86a67..0f3d2d8eca 100644 --- a/server/service/osquery.go +++ b/server/service/osquery.go @@ -116,7 +116,7 @@ type enrollAgentResponse struct { Err error `json:"error,omitempty"` } -func (r enrollAgentResponse) error() error { return r.Err } +func (r enrollAgentResponse) Error() error { return r.Err } func enrollAgentEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*enrollAgentRequest) @@ -334,7 +334,7 @@ type getClientConfigResponse struct { Err error `json:"error,omitempty"` } -func (r getClientConfigResponse) error() error { return r.Err } +func (r getClientConfigResponse) Error() error { return r.Err } // MarshalJSON implements json.Marshaler. // @@ -580,7 +580,7 @@ type getDistributedQueriesResponse struct { Err error `json:"error,omitempty"` } -func (r getDistributedQueriesResponse) error() error { return r.Err } +func (r getDistributedQueriesResponse) Error() error { return r.Err } func getDistributedQueriesEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { queries, discovery, accelerate, err := svc.GetDistributedQueries(ctx) @@ -884,7 +884,7 @@ type submitDistributedQueryResultsResponse struct { Err error `json:"error,omitempty"` } -func (r submitDistributedQueryResultsResponse) error() error { return r.Err } +func (r submitDistributedQueryResultsResponse) Error() error { return r.Err } func submitDistributedQueryResultsEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { shim := request.(*submitDistributedQueryResultsRequestShim) @@ -2218,7 +2218,7 @@ type submitLogsResponse struct { Err error `json:"error,omitempty"` } -func (r submitLogsResponse) error() error { return r.Err } +func (r submitLogsResponse) Error() error { return r.Err } func submitLogsEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*submitLogsRequest) @@ -2824,7 +2824,7 @@ type getYaraResponse struct { Content string } -func (r getYaraResponse) error() error { return r.Err } +func (r getYaraResponse) Error() error { return r.Err } func (r getYaraResponse) hijackRender(ctx context.Context, w http.ResponseWriter) { w.Header().Set("Content-Type", "text/plain; charset=utf-8") diff --git a/server/service/packs.go b/server/service/packs.go index 8533a2f366..d79211d75e 100644 --- a/server/service/packs.go +++ b/server/service/packs.go @@ -109,7 +109,7 @@ type getPackResponse struct { Err error `json:"error,omitempty"` } -func (r getPackResponse) error() error { return r.Err } +func (r getPackResponse) Error() error { return r.Err } func getPackEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*getPackRequest) @@ -149,7 +149,7 @@ type createPackResponse struct { Err error `json:"error,omitempty"` } -func (r createPackResponse) error() error { return r.Err } +func (r createPackResponse) Error() error { return r.Err } func createPackEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*createPackRequest) @@ -242,7 +242,7 @@ type modifyPackResponse struct { Err error `json:"error,omitempty"` } -func (r modifyPackResponse) error() error { return r.Err } +func (r modifyPackResponse) Error() error { return r.Err } func modifyPackEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*modifyPackRequest) @@ -337,7 +337,7 @@ type listPacksResponse struct { Err error `json:"error,omitempty"` } -func (r listPacksResponse) error() error { return r.Err } +func (r listPacksResponse) Error() error { return r.Err } func listPacksEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*listPacksRequest) @@ -377,7 +377,7 @@ type deletePackResponse struct { Err error `json:"error,omitempty"` } -func (r deletePackResponse) error() error { return r.Err } +func (r deletePackResponse) Error() error { return r.Err } func deletePackEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*deletePackRequest) @@ -430,7 +430,7 @@ type deletePackByIDResponse struct { Err error `json:"error,omitempty"` } -func (r deletePackByIDResponse) error() error { return r.Err } +func (r deletePackByIDResponse) Error() error { return r.Err } func deletePackByIDEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*deletePackByIDRequest) @@ -481,7 +481,7 @@ type applyPackSpecsResponse struct { Err error `json:"error,omitempty"` } -func (r applyPackSpecsResponse) error() error { return r.Err } +func (r applyPackSpecsResponse) Error() error { return r.Err } func applyPackSpecsEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*applyPackSpecsRequest) @@ -555,7 +555,7 @@ type getPackSpecsResponse struct { Err error `json:"error,omitempty"` } -func (r getPackSpecsResponse) error() error { return r.Err } +func (r getPackSpecsResponse) Error() error { return r.Err } func getPackSpecsEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { specs, err := svc.GetPackSpecs(ctx) @@ -582,7 +582,7 @@ type getPackSpecResponse struct { Err error `json:"error,omitempty"` } -func (r getPackSpecResponse) error() error { return r.Err } +func (r getPackSpecResponse) Error() error { return r.Err } func getPackSpecEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*getGenericSpecRequest) diff --git a/server/service/queries.go b/server/service/queries.go index 2d015843a6..1c44472b3a 100644 --- a/server/service/queries.go +++ b/server/service/queries.go @@ -27,7 +27,7 @@ type getQueryResponse struct { Err error `json:"error,omitempty"` } -func (r getQueryResponse) error() error { return r.Err } +func (r getQueryResponse) Error() error { return r.Err } func getQueryEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*getQueryRequest) @@ -71,7 +71,7 @@ type listQueriesResponse struct { Err error `json:"error,omitempty"` } -func (r listQueriesResponse) error() error { return r.Err } +func (r listQueriesResponse) Error() error { return r.Err } func listQueriesEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*listQueriesRequest) @@ -162,7 +162,7 @@ type getQueryReportResponse struct { Err error `json:"error,omitempty"` } -func (r getQueryReportResponse) error() error { return r.Err } +func (r getQueryReportResponse) Error() error { return r.Err } func getQueryReportEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*getQueryReportRequest) @@ -252,7 +252,7 @@ type createQueryResponse struct { Err error `json:"error,omitempty"` } -func (r createQueryResponse) error() error { return r.Err } +func (r createQueryResponse) Error() error { return r.Err } func createQueryEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*createQueryRequest) @@ -360,7 +360,7 @@ type modifyQueryResponse struct { Err error `json:"error,omitempty"` } -func (r modifyQueryResponse) error() error { return r.Err } +func (r modifyQueryResponse) Error() error { return r.Err } func modifyQueryEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*modifyQueryRequest) @@ -486,7 +486,7 @@ type deleteQueryResponse struct { Err error `json:"error,omitempty"` } -func (r deleteQueryResponse) error() error { return r.Err } +func (r deleteQueryResponse) Error() error { return r.Err } func deleteQueryEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*deleteQueryRequest) @@ -540,7 +540,7 @@ type deleteQueryByIDResponse struct { Err error `json:"error,omitempty"` } -func (r deleteQueryByIDResponse) error() error { return r.Err } +func (r deleteQueryByIDResponse) Error() error { return r.Err } func deleteQueryByIDEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*deleteQueryByIDRequest) @@ -591,7 +591,7 @@ type deleteQueriesResponse struct { Err error `json:"error,omitempty"` } -func (r deleteQueriesResponse) error() error { return r.Err } +func (r deleteQueriesResponse) Error() error { return r.Err } func deleteQueriesEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*deleteQueriesRequest) @@ -644,7 +644,7 @@ type applyQuerySpecsResponse struct { Err error `json:"error,omitempty"` } -func (r applyQuerySpecsResponse) error() error { return r.Err } +func (r applyQuerySpecsResponse) Error() error { return r.Err } func applyQuerySpecsEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*applyQuerySpecsRequest) @@ -764,7 +764,7 @@ type getQuerySpecsRequest struct { TeamID uint `url:"team_id,optional"` } -func (r getQuerySpecsResponse) error() error { return r.Err } +func (r getQuerySpecsResponse) Error() error { return r.Err } func getQuerySpecsEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*getQuerySpecsRequest) @@ -836,7 +836,7 @@ type getQuerySpecRequest struct { TeamID uint `query:"team_id,optional"` } -func (r getQuerySpecResponse) error() error { return r.Err } +func (r getQuerySpecResponse) Error() error { return r.Err } func getQuerySpecEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*getQuerySpecRequest) diff --git a/server/service/scheduled_queries.go b/server/service/scheduled_queries.go index 3e54f84c26..ef5f91d80a 100644 --- a/server/service/scheduled_queries.go +++ b/server/service/scheduled_queries.go @@ -31,7 +31,7 @@ type getScheduledQueriesInPackResponse struct { Err error `json:"error,omitempty"` } -func (r getScheduledQueriesInPackResponse) error() error { return r.Err } +func (r getScheduledQueriesInPackResponse) Error() error { return r.Err } func getScheduledQueriesInPackEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*getScheduledQueriesInPackRequest) @@ -79,7 +79,7 @@ type scheduleQueryResponse struct { Err error `json:"error,omitempty"` } -func (r scheduleQueryResponse) error() error { return r.Err } +func (r scheduleQueryResponse) Error() error { return r.Err } func scheduleQueryEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*scheduleQueryRequest) @@ -167,7 +167,7 @@ type getScheduledQueryResponse struct { Err error `json:"error,omitempty"` } -func (r getScheduledQueryResponse) error() error { return r.Err } +func (r getScheduledQueryResponse) Error() error { return r.Err } func getScheduledQueryEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*getScheduledQueryRequest) @@ -207,7 +207,7 @@ type modifyScheduledQueryResponse struct { Err error `json:"error,omitempty"` } -func (r modifyScheduledQueryResponse) error() error { return r.Err } +func (r modifyScheduledQueryResponse) Error() error { return r.Err } func modifyScheduledQueryEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*modifyScheduledQueryRequest) @@ -297,7 +297,7 @@ type deleteScheduledQueryResponse struct { Err error `json:"error,omitempty"` } -func (r deleteScheduledQueryResponse) error() error { return r.Err } +func (r deleteScheduledQueryResponse) Error() error { return r.Err } func deleteScheduledQueryEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*deleteScheduledQueryRequest) diff --git a/server/service/scripts.go b/server/service/scripts.go index 299390cf3e..535f6740d1 100644 --- a/server/service/scripts.go +++ b/server/service/scripts.go @@ -41,7 +41,7 @@ type runScriptResponse struct { ExecutionID string `json:"execution_id,omitempty"` } -func (r runScriptResponse) error() error { return r.Err } +func (r runScriptResponse) Error() error { return r.Err } func (r runScriptResponse) Status() int { return http.StatusAccepted } func runScriptEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { @@ -79,7 +79,7 @@ type runScriptSyncResponse struct { HostTimeout bool `json:"host_timeout"` } -func (r runScriptSyncResponse) error() error { return r.Err } +func (r runScriptSyncResponse) Error() error { return r.Err } func (r runScriptSyncResponse) Status() int { if r.HostTimeout { // The more proper response for a timeout on the server would be: StatusGatewayTimeout = 504 @@ -373,7 +373,7 @@ type getScriptResultResponse struct { Err error `json:"error,omitempty"` } -func (r getScriptResultResponse) error() error { return r.Err } +func (r getScriptResultResponse) Error() error { return r.Err } func getScriptResultEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*getScriptResultRequest) @@ -485,7 +485,7 @@ type createScriptResponse struct { ScriptID uint `json:"script_id,omitempty"` } -func (r createScriptResponse) error() error { return r.Err } +func (r createScriptResponse) Error() error { return r.Err } func createScriptEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*createScriptRequest) @@ -577,7 +577,7 @@ type deleteScriptResponse struct { Err error `json:"error,omitempty"` } -func (r deleteScriptResponse) error() error { return r.Err } +func (r deleteScriptResponse) Error() error { return r.Err } func (r deleteScriptResponse) Status() int { return http.StatusNoContent } func deleteScriptEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { @@ -638,7 +638,7 @@ type listScriptsResponse struct { Err error `json:"error,omitempty"` } -func (r listScriptsResponse) error() error { return r.Err } +func (r listScriptsResponse) Error() error { return r.Err } func listScriptsEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*listScriptsRequest) @@ -684,7 +684,7 @@ type getScriptResponse struct { Err error `json:"error,omitempty"` } -func (r getScriptResponse) error() error { return r.Err } +func (r getScriptResponse) Error() error { return r.Err } type downloadFileResponse struct { Err error `json:"error,omitempty"` @@ -693,7 +693,7 @@ type downloadFileResponse struct { contentType string // optional, defaults to application/octet-stream } -func (r downloadFileResponse) error() error { return r.Err } +func (r downloadFileResponse) Error() error { return r.Err } func (r downloadFileResponse) hijackRender(ctx context.Context, w http.ResponseWriter) { w.Header().Set("Content-Length", strconv.Itoa(len(r.content))) @@ -797,7 +797,7 @@ type updateScriptResponse struct { ScriptID uint `json:"script_id,omitempty"` } -func (r updateScriptResponse) error() error { return r.Err } +func (r updateScriptResponse) Error() error { return r.Err } func updateScriptEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*updateScriptRequest) @@ -886,7 +886,7 @@ type getHostScriptDetailsResponse struct { Err error `json:"error,omitempty"` } -func (r getHostScriptDetailsResponse) error() error { return r.Err } +func (r getHostScriptDetailsResponse) Error() error { return r.Err } func getHostScriptDetailsEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*getHostScriptDetailsRequest) @@ -946,7 +946,7 @@ type batchSetScriptsResponse struct { Err error `json:"error,omitempty"` } -func (r batchSetScriptsResponse) error() error { return r.Err } +func (r batchSetScriptsResponse) Error() error { return r.Err } func batchSetScriptsEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*batchSetScriptsRequest) @@ -1072,7 +1072,7 @@ type lockHostResponse struct { UnlockPIN string `json:"unlock_pin,omitempty"` } -func (r lockHostResponse) error() error { return r.Err } +func (r lockHostResponse) Error() error { return r.Err } func lockHostEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*lockHostRequest) @@ -1113,7 +1113,7 @@ type unlockHostResponse struct { Err error `json:"error,omitempty"` } -func (r unlockHostResponse) error() error { return r.Err } +func (r unlockHostResponse) Error() error { return r.Err } func unlockHostEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*unlockHostRequest) @@ -1154,7 +1154,7 @@ type wipeHostResponse struct { PendingAction fleet.PendingDeviceAction `json:"pending_action,omitempty"` } -func (r wipeHostResponse) error() error { return r.Err } +func (r wipeHostResponse) Error() error { return r.Err } func wipeHostEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*wipeHostRequest) diff --git a/server/service/secret_variables.go b/server/service/secret_variables.go index a0a035bc34..8c00d05ab0 100644 --- a/server/service/secret_variables.go +++ b/server/service/secret_variables.go @@ -27,7 +27,7 @@ type secretVariablesResponse struct { Err error `json:"error,omitempty"` } -func (r secretVariablesResponse) error() error { return r.Err } +func (r secretVariablesResponse) Error() error { return r.Err } func secretVariablesEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*secretVariablesRequest) diff --git a/server/service/sessions.go b/server/service/sessions.go index 6ae7a28203..477ce92ecc 100644 --- a/server/service/sessions.go +++ b/server/service/sessions.go @@ -35,7 +35,7 @@ type getInfoAboutSessionResponse struct { Err error `json:"error,omitempty"` } -func (r getInfoAboutSessionResponse) error() error { return r.Err } +func (r getInfoAboutSessionResponse) Error() error { return r.Err } func getInfoAboutSessionEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*getInfoAboutSessionRequest) @@ -82,7 +82,7 @@ type deleteSessionResponse struct { Err error `json:"error,omitempty"` } -func (r deleteSessionResponse) error() error { return r.Err } +func (r deleteSessionResponse) Error() error { return r.Err } func deleteSessionEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*deleteSessionRequest) @@ -128,7 +128,7 @@ type loginResponse struct { Err error `json:"error,omitempty"` } -func (r loginResponse) error() error { return r.Err } +func (r loginResponse) Error() error { return r.Err } type loginMfaResponse struct { Message string `json:"message"` @@ -137,7 +137,7 @@ type loginMfaResponse struct { func (r loginMfaResponse) Status() int { return http.StatusAccepted } -func (r loginMfaResponse) error() error { return r.Err } +func (r loginMfaResponse) Error() error { return r.Err } func loginEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*loginRequest) @@ -312,7 +312,7 @@ type logoutResponse struct { Err error `json:"error,omitempty"` } -func (r logoutResponse) error() error { return r.Err } +func (r logoutResponse) Error() error { return r.Err } func logoutEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { err := svc.Logout(ctx) @@ -364,7 +364,7 @@ type initiateSSOResponse struct { Err error `json:"error,omitempty"` } -func (r initiateSSOResponse) error() error { return r.Err } +func (r initiateSSOResponse) Error() error { return r.Err } func initiateSSOEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*initiateSSORequest) @@ -461,7 +461,7 @@ type callbackSSOResponse struct { Err error `json:"error,omitempty"` } -func (r callbackSSOResponse) error() error { return r.Err } +func (r callbackSSOResponse) Error() error { return r.Err } // If html is present we return a web page func (r callbackSSOResponse) html() string { return r.content } @@ -636,7 +636,7 @@ type ssoSettingsResponse struct { Err error `json:"error,omitempty"` } -func (r ssoSettingsResponse) error() error { return r.Err } +func (r ssoSettingsResponse) Error() error { return r.Err } func settingsSSOEndpoint(ctx context.Context, _ interface{}, svc fleet.Service) (errorer, error) { settings, err := svc.SSOSettings(ctx) diff --git a/server/service/sessions_test.go b/server/service/sessions_test.go index 9c420c043d..c3a81ffdc6 100644 --- a/server/service/sessions_test.go +++ b/server/service/sessions_test.go @@ -178,7 +178,7 @@ func TestMFA(t *testing.T) { } resp, err := sessionCreateEndpoint(ctx, &sessionCreateRequest{Token: "foo"}, svc) require.NoError(t, err) - require.NotNil(t, resp.error()) + require.NotNil(t, resp.Error()) session = &fleet.Session{} mfaUser = user @@ -189,7 +189,7 @@ func TestMFA(t *testing.T) { } resp, err = sessionCreateEndpoint(ctx, &sessionCreateRequest{Token: mfaToken}, svc) require.NoError(t, err) - require.Nil(t, resp.error()) + require.Nil(t, resp.Error()) require.True(t, ds.NewActivityFuncInvoked) } diff --git a/server/service/setup_experience.go b/server/service/setup_experience.go index 96e6e3b381..29c88297b2 100644 --- a/server/service/setup_experience.go +++ b/server/service/setup_experience.go @@ -24,7 +24,7 @@ type putSetupExperienceSoftwareResponse struct { Err error `json:"error,omitempty"` } -func (r putSetupExperienceSoftwareResponse) error() error { return r.Err } +func (r putSetupExperienceSoftwareResponse) Error() error { return r.Err } func putSetupExperienceSoftware(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*putSetupExperienceSoftwareRequest) @@ -57,7 +57,7 @@ type getSetupExperienceSoftwareResponse struct { Err error `json:"error,omitempty"` } -func (r getSetupExperienceSoftwareResponse) error() error { return r.Err } +func (r getSetupExperienceSoftwareResponse) Error() error { return r.Err } func getSetupExperienceSoftware(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*getSetupExperienceSoftwareRequest) @@ -88,7 +88,7 @@ type getSetupExperienceScriptResponse struct { Err error `json:"error,omitempty"` } -func (r getSetupExperienceScriptResponse) error() error { return r.Err } +func (r getSetupExperienceScriptResponse) Error() error { return r.Err } func getSetupExperienceScriptEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*getSetupExperienceScriptRequest) @@ -158,7 +158,7 @@ type setSetupExperienceScriptResponse struct { Err error `json:"error,omitempty"` } -func (r setSetupExperienceScriptResponse) error() error { return r.Err } +func (r setSetupExperienceScriptResponse) Error() error { return r.Err } func setSetupExperienceScriptEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*setSetupExperienceScriptRequest) @@ -192,7 +192,7 @@ type deleteSetupExperienceScriptResponse struct { Err error `json:"error,omitempty"` } -func (r deleteSetupExperienceScriptResponse) error() error { return r.Err } +func (r deleteSetupExperienceScriptResponse) Error() error { return r.Err } // func (r deleteSetupExperienceScriptResponse) Status() int { return http.StatusNoContent } diff --git a/server/service/software.go b/server/service/software.go index ef7828a1b5..1dab75804c 100644 --- a/server/service/software.go +++ b/server/service/software.go @@ -30,7 +30,7 @@ type listSoftwareResponse struct { Err error `json:"error,omitempty"` } -func (r listSoftwareResponse) error() error { return r.Err } +func (r listSoftwareResponse) Error() error { return r.Err } // Deprecated: use listSoftwareVersionsEndpoint instead func listSoftwareEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { @@ -63,7 +63,7 @@ type listSoftwareVersionsResponse struct { Err error `json:"error,omitempty"` } -func (r listSoftwareVersionsResponse) error() error { return r.Err } +func (r listSoftwareVersionsResponse) Error() error { return r.Err } func listSoftwareVersionsEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*listSoftwareRequest) @@ -143,7 +143,7 @@ type getSoftwareResponse struct { Err error `json:"error,omitempty"` } -func (r getSoftwareResponse) error() error { return r.Err } +func (r getSoftwareResponse) Error() error { return r.Err } func getSoftwareEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*getSoftwareRequest) @@ -215,7 +215,7 @@ type countSoftwareResponse struct { Err error `json:"error,omitempty"` } -func (r countSoftwareResponse) error() error { return r.Err } +func (r countSoftwareResponse) Error() error { return r.Err } // Deprecated: counts are now included directly in the listSoftwareVersionsResponse. This // endpoint is retained for backwards compatibility. diff --git a/server/service/software_installers.go b/server/service/software_installers.go index 5d7a1ffe58..383b33fc02 100644 --- a/server/service/software_installers.go +++ b/server/service/software_installers.go @@ -328,7 +328,7 @@ func (uploadSoftwareInstallerRequest) DecodeRequest(ctx context.Context, r *http return &decoded, nil } -func (r uploadSoftwareInstallerResponse) error() error { return r.Err } +func (r uploadSoftwareInstallerResponse) Error() error { return r.Err } func uploadSoftwareInstallerEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*uploadSoftwareInstallerRequest) @@ -381,7 +381,7 @@ type deleteSoftwareInstallerResponse struct { Err error `json:"error,omitempty"` } -func (r deleteSoftwareInstallerResponse) error() error { return r.Err } +func (r deleteSoftwareInstallerResponse) Error() error { return r.Err } func (r deleteSoftwareInstallerResponse) Status() int { return http.StatusNoContent } func deleteSoftwareInstallerEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { @@ -480,14 +480,14 @@ type getSoftwareInstallerResponse struct { Err error `json:"error,omitempty"` } -func (r getSoftwareInstallerResponse) error() error { return r.Err } +func (r getSoftwareInstallerResponse) Error() error { return r.Err } type getSoftwareInstallerTokenResponse struct { Err error `json:"error,omitempty"` Token string `json:"token"` } -func (r getSoftwareInstallerTokenResponse) error() error { return r.Err } +func (r getSoftwareInstallerTokenResponse) Error() error { return r.Err } type orbitDownloadSoftwareInstallerResponse struct { Err error `json:"error,omitempty"` @@ -495,7 +495,7 @@ type orbitDownloadSoftwareInstallerResponse struct { payload *fleet.DownloadSoftwareInstallerPayload } -func (r orbitDownloadSoftwareInstallerResponse) error() error { return r.Err } +func (r orbitDownloadSoftwareInstallerResponse) Error() error { return r.Err } func (r orbitDownloadSoftwareInstallerResponse) hijackRender(ctx context.Context, w http.ResponseWriter) { w.Header().Set("Content-Length", strconv.Itoa(int(r.payload.Size))) @@ -536,7 +536,7 @@ type installSoftwareResponse struct { Err error `json:"error,omitempty"` } -func (r installSoftwareResponse) error() error { return r.Err } +func (r installSoftwareResponse) Error() error { return r.Err } func (r installSoftwareResponse) Status() int { return http.StatusAccepted } @@ -598,7 +598,7 @@ type getSoftwareInstallResultsResponse struct { Results *fleet.HostSoftwareInstallerResult `json:"results,omitempty"` } -func (r getSoftwareInstallResultsResponse) error() error { return r.Err } +func (r getSoftwareInstallResultsResponse) Error() error { return r.Err } func getSoftwareInstallResultsEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*getSoftwareInstallResultsRequest) @@ -634,7 +634,7 @@ type batchSetSoftwareInstallersResponse struct { Err error `json:"error,omitempty"` } -func (r batchSetSoftwareInstallersResponse) error() error { return r.Err } +func (r batchSetSoftwareInstallersResponse) Error() error { return r.Err } func (r batchSetSoftwareInstallersResponse) Status() int { return http.StatusAccepted } func batchSetSoftwareInstallersEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { @@ -668,7 +668,7 @@ type batchSetSoftwareInstallersResultResponse struct { Err error `json:"error,omitempty"` } -func (r batchSetSoftwareInstallersResultResponse) error() error { return r.Err } +func (r batchSetSoftwareInstallersResultResponse) Error() error { return r.Err } func batchSetSoftwareInstallersResultEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*batchSetSoftwareInstallersResultRequest) @@ -708,7 +708,7 @@ type submitSelfServiceSoftwareInstallResponse struct { Err error `json:"error,omitempty"` } -func (r submitSelfServiceSoftwareInstallResponse) error() error { return r.Err } +func (r submitSelfServiceSoftwareInstallResponse) Error() error { return r.Err } func (r submitSelfServiceSoftwareInstallResponse) Status() int { return http.StatusAccepted } func submitSelfServiceSoftwareInstall(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { @@ -771,7 +771,7 @@ type batchAssociateAppStoreAppsResponse struct { Err error `json:"error,omitempty"` } -func (r batchAssociateAppStoreAppsResponse) error() error { return r.Err } +func (r batchAssociateAppStoreAppsResponse) Error() error { return r.Err } func batchAssociateAppStoreAppsEndpoint(ctx context.Context, request any, svc fleet.Service) (errorer, error) { req := request.(*batchAssociateAppStoreAppsRequest) diff --git a/server/service/software_titles.go b/server/service/software_titles.go index fef34c9a6c..7e970bef46 100644 --- a/server/service/software_titles.go +++ b/server/service/software_titles.go @@ -28,7 +28,7 @@ type listSoftwareTitlesResponse struct { Err error `json:"error,omitempty"` } -func (r listSoftwareTitlesResponse) error() error { return r.Err } +func (r listSoftwareTitlesResponse) Error() error { return r.Err } func listSoftwareTitlesEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*listSoftwareTitlesRequest) @@ -124,7 +124,7 @@ type getSoftwareTitleResponse struct { Err error `json:"error,omitempty"` } -func (r getSoftwareTitleResponse) error() error { return r.Err } +func (r getSoftwareTitleResponse) Error() error { return r.Err } func getSoftwareTitleEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*getSoftwareTitleRequest) diff --git a/server/service/status.go b/server/service/status.go index 5fe36a2c3b..ac2ab467be 100644 --- a/server/service/status.go +++ b/server/service/status.go @@ -15,7 +15,7 @@ type statusResponse struct { Err error `json:"error,omitempty"` } -func (m statusResponse) error() error { return m.Err } +func (m statusResponse) Error() error { return m.Err } func statusResultStoreEndpoint(ctx context.Context, req interface{}, svc fleet.Service) (errorer, error) { var resp statusResponse diff --git a/server/service/targets.go b/server/service/targets.go index 083dc87da6..36f508109c 100644 --- a/server/service/targets.go +++ b/server/service/targets.go @@ -124,7 +124,7 @@ type searchTargetsResponse struct { Err error `json:"error,omitempty"` } -func (r searchTargetsResponse) error() error { return r.Err } +func (r searchTargetsResponse) Error() error { return r.Err } func searchTargetsEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*searchTargetsRequest) @@ -264,7 +264,7 @@ type countTargetsResponse struct { Err error `json:"error,omitempty"` } -func (r countTargetsResponse) error() error { return r.Err } +func (r countTargetsResponse) Error() error { return r.Err } func countTargetsEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*countTargetsRequest) diff --git a/server/service/team_policies.go b/server/service/team_policies.go index 9661b32ee3..d0f4a1684a 100644 --- a/server/service/team_policies.go +++ b/server/service/team_policies.go @@ -38,7 +38,7 @@ type teamPolicyResponse struct { Err error `json:"error,omitempty"` } -func (r teamPolicyResponse) error() error { return r.Err } +func (r teamPolicyResponse) Error() error { return r.Err } func teamPolicyEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*teamPolicyRequest) @@ -185,7 +185,7 @@ type listTeamPoliciesResponse struct { Err error `json:"error,omitempty"` } -func (r listTeamPoliciesResponse) error() error { return r.Err } +func (r listTeamPoliciesResponse) Error() error { return r.Err } func listTeamPoliciesEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*listTeamPoliciesRequest) @@ -264,7 +264,7 @@ type countTeamPoliciesResponse struct { Err error `json:"error,omitempty"` } -func (r countTeamPoliciesResponse) error() error { return r.Err } +func (r countTeamPoliciesResponse) Error() error { return r.Err } func countTeamPoliciesEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*countTeamPoliciesRequest) @@ -311,7 +311,7 @@ type getTeamPolicyByIDResponse struct { Err error `json:"error,omitempty"` } -func (r getTeamPolicyByIDResponse) error() error { return r.Err } +func (r getTeamPolicyByIDResponse) Error() error { return r.Err } func getTeamPolicyByIDEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*getTeamPolicyByIDRequest) @@ -360,7 +360,7 @@ type deleteTeamPoliciesResponse struct { Err error `json:"error,omitempty"` } -func (r deleteTeamPoliciesResponse) error() error { return r.Err } +func (r deleteTeamPoliciesResponse) Error() error { return r.Err } func deleteTeamPoliciesEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*deleteTeamPoliciesRequest) @@ -443,7 +443,7 @@ type modifyTeamPolicyResponse struct { Err error `json:"error,omitempty"` } -func (r modifyTeamPolicyResponse) error() error { return r.Err } +func (r modifyTeamPolicyResponse) Error() error { return r.Err } func modifyTeamPolicyEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*modifyTeamPolicyRequest) diff --git a/server/service/team_schedule.go b/server/service/team_schedule.go index 0c1d60e5a5..7222ab55bb 100644 --- a/server/service/team_schedule.go +++ b/server/service/team_schedule.go @@ -25,7 +25,7 @@ type getTeamScheduleResponse struct { Err error `json:"error,omitempty"` } -func (r getTeamScheduleResponse) error() error { return r.Err } +func (r getTeamScheduleResponse) Error() error { return r.Err } func getTeamScheduleEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*getTeamScheduleRequest) @@ -72,7 +72,7 @@ type teamScheduleQueryResponse struct { Err error `json:"error,omitempty"` } -func (r teamScheduleQueryResponse) error() error { return r.Err } +func (r teamScheduleQueryResponse) Error() error { return r.Err } func uintValueOrZero(v *uint) uint { if v == nil { @@ -145,7 +145,7 @@ type modifyTeamScheduleResponse struct { Err error `json:"error,omitempty"` } -func (r modifyTeamScheduleResponse) error() error { return r.Err } +func (r modifyTeamScheduleResponse) Error() error { return r.Err } func modifyTeamScheduleEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*modifyTeamScheduleRequest) @@ -184,7 +184,7 @@ type deleteTeamScheduleResponse struct { Err error `json:"error,omitempty"` } -func (r deleteTeamScheduleResponse) error() error { return r.Err } +func (r deleteTeamScheduleResponse) Error() error { return r.Err } func deleteTeamScheduleEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*deleteTeamScheduleRequest) diff --git a/server/service/teams.go b/server/service/teams.go index d2bcf6a994..9d611f542e 100644 --- a/server/service/teams.go +++ b/server/service/teams.go @@ -28,7 +28,7 @@ type listTeamsResponse struct { Err error `json:"error,omitempty"` } -func (r listTeamsResponse) error() error { return r.Err } +func (r listTeamsResponse) Error() error { return r.Err } func listTeamsEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*listTeamsRequest) @@ -65,7 +65,7 @@ type getTeamResponse struct { Err error `json:"error,omitempty"` } -func (r getTeamResponse) error() error { return r.Err } +func (r getTeamResponse) Error() error { return r.Err } func getTeamEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*getTeamRequest) @@ -97,7 +97,7 @@ type teamResponse struct { Err error `json:"error,omitempty"` } -func (r teamResponse) error() error { return r.Err } +func (r teamResponse) Error() error { return r.Err } func createTeamEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*createTeamRequest) @@ -155,7 +155,7 @@ type deleteTeamResponse struct { Err error `json:"error,omitempty"` } -func (r deleteTeamResponse) error() error { return r.Err } +func (r deleteTeamResponse) Error() error { return r.Err } func deleteTeamEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*deleteTeamRequest) @@ -222,7 +222,7 @@ type applyTeamSpecsResponse struct { TeamIDsByName map[string]uint `json:"team_ids_by_name,omitempty"` } -func (r applyTeamSpecsResponse) error() error { return r.Err } +func (r applyTeamSpecsResponse) Error() error { return r.Err } func applyTeamSpecsEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*applyTeamSpecsRequest) @@ -384,7 +384,7 @@ type teamEnrollSecretsResponse struct { Err error `json:"error,omitempty"` } -func (r teamEnrollSecretsResponse) error() error { return r.Err } +func (r teamEnrollSecretsResponse) Error() error { return r.Err } func teamEnrollSecretsEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*teamEnrollSecretsRequest) diff --git a/server/service/testing_client.go b/server/service/testing_client.go index 6734c06128..be11857873 100644 --- a/server/service/testing_client.go +++ b/server/service/testing_client.go @@ -301,7 +301,7 @@ func (ts *withServer) DoJSON(verb, path string, params interface{}, expectedStat err := json.NewDecoder(resp.Body).Decode(v) require.NoError(ts.s.T(), err) if e, ok := v.(errorer); ok { - require.NoError(ts.s.T(), e.error()) + require.NoError(ts.s.T(), e.Error()) } } @@ -316,7 +316,7 @@ func (ts *withServer) DoJSONWithoutAuth(verb, path string, params interface{}, e err = json.NewDecoder(resp.Body).Decode(v) require.NoError(ts.s.T(), err) if e, ok := v.(errorer); ok { - require.NoError(ts.s.T(), e.error()) + require.NoError(ts.s.T(), e.Error()) } } diff --git a/server/service/translator.go b/server/service/translator.go index f81177e6b4..a805648e7a 100644 --- a/server/service/translator.go +++ b/server/service/translator.go @@ -16,7 +16,7 @@ type translatorResponse struct { Err error `json:"error,omitempty"` } -func (r translatorResponse) error() error { return r.Err } +func (r translatorResponse) Error() error { return r.Err } func translatorEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*translatorRequest) diff --git a/server/service/transport.go b/server/service/transport.go index 536750e4bc..e7dbbe3f67 100644 --- a/server/service/transport.go +++ b/server/service/transport.go @@ -27,15 +27,15 @@ func encodeResponse(ctx context.Context, w http.ResponseWriter, response interfa if page, ok := response.(htmlPage); ok { w.Header().Set("Content-Type", "text/html; charset=UTF-8") writeBrowserSecurityHeaders(w) - if coder, ok := page.error().(kithttp.StatusCoder); ok { + if coder, ok := page.Error().(kithttp.StatusCoder); ok { w.WriteHeader(coder.StatusCode()) } _, err := io.WriteString(w, page.html()) return err } - if e, ok := response.(errorer); ok && e.error() != nil { - encodeError(ctx, e.error(), w) + if e, ok := response.(errorer); ok && e.Error() != nil { + encodeError(ctx, e.Error(), w) return nil } @@ -65,7 +65,7 @@ type statuser interface { // loads a html page type htmlPage interface { html() string - error() error + Error() error } // renderHijacker can be implemented by response values to take control of diff --git a/server/service/transport_error.go b/server/service/transport_error.go index f59a349e4f..14edadaaab 100644 --- a/server/service/transport_error.go +++ b/server/service/transport_error.go @@ -16,7 +16,7 @@ import ( // errorer interface is implemented by response structs to encode business logic errors type errorer interface { - error() error + Error() error } type jsonError struct { diff --git a/server/service/trigger.go b/server/service/trigger.go index 2995572545..89faaabfe3 100644 --- a/server/service/trigger.go +++ b/server/service/trigger.go @@ -14,7 +14,7 @@ type triggerResponse struct { Err error `json:"error,omitempty"` } -func (r triggerResponse) error() error { return r.Err } +func (r triggerResponse) Error() error { return r.Err } func triggerEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { _, err := svc.AuthenticatedUser(ctx) diff --git a/server/service/user_roles.go b/server/service/user_roles.go index cce51264bb..6083b5b169 100644 --- a/server/service/user_roles.go +++ b/server/service/user_roles.go @@ -15,7 +15,7 @@ type applyUserRoleSpecsResponse struct { Err error `json:"error,omitempty"` } -func (r applyUserRoleSpecsResponse) error() error { return r.Err } +func (r applyUserRoleSpecsResponse) Error() error { return r.Err } func applyUserRoleSpecsEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*applyUserRoleSpecsRequest) diff --git a/server/service/users.go b/server/service/users.go index ab4da962b8..d9bfeaab2c 100644 --- a/server/service/users.go +++ b/server/service/users.go @@ -39,7 +39,7 @@ type createUserResponse struct { Err error `json:"error,omitempty"` } -func (r createUserResponse) error() error { return r.Err } +func (r createUserResponse) Error() error { return r.Err } func createUserEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*createUserRequest) @@ -195,7 +195,7 @@ type listUsersResponse struct { Err error `json:"error,omitempty"` } -func (r listUsersResponse) error() error { return r.Err } +func (r listUsersResponse) Error() error { return r.Err } func listUsersEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*listUsersRequest) @@ -286,7 +286,7 @@ type getUserResponse struct { Err error `json:"error,omitempty"` } -func (r getUserResponse) error() error { return r.Err } +func (r getUserResponse) Error() error { return r.Err } func getUserEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*getUserRequest) @@ -357,7 +357,7 @@ type modifyUserResponse struct { Err error `json:"error,omitempty"` } -func (r modifyUserResponse) error() error { return r.Err } +func (r modifyUserResponse) Error() error { return r.Err } func modifyUserEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*modifyUserRequest) @@ -554,7 +554,7 @@ type deleteUserResponse struct { Err error `json:"error,omitempty"` } -func (r deleteUserResponse) error() error { return r.Err } +func (r deleteUserResponse) Error() error { return r.Err } func deleteUserEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*deleteUserRequest) @@ -608,7 +608,7 @@ type requirePasswordResetResponse struct { Err error `json:"error,omitempty"` } -func (r requirePasswordResetResponse) error() error { return r.Err } +func (r requirePasswordResetResponse) Error() error { return r.Err } func requirePasswordResetEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*requirePasswordResetRequest) @@ -660,7 +660,7 @@ type changePasswordResponse struct { Err error `json:"error,omitempty"` } -func (r changePasswordResponse) error() error { return r.Err } +func (r changePasswordResponse) Error() error { return r.Err } func changePasswordEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*changePasswordRequest) @@ -716,7 +716,7 @@ type getInfoAboutSessionsForUserResponse struct { Err error `json:"error,omitempty"` } -func (r getInfoAboutSessionsForUserResponse) error() error { return r.Err } +func (r getInfoAboutSessionsForUserResponse) Error() error { return r.Err } func getInfoAboutSessionsForUserEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*getInfoAboutSessionsForUserRequest) @@ -768,7 +768,7 @@ type deleteSessionsForUserResponse struct { Err error `json:"error,omitempty"` } -func (r deleteSessionsForUserResponse) error() error { return r.Err } +func (r deleteSessionsForUserResponse) Error() error { return r.Err } func deleteSessionsForUserEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*deleteSessionsForUserRequest) @@ -800,7 +800,7 @@ type changeEmailResponse struct { Err error `json:"error,omitempty"` } -func (r changeEmailResponse) error() error { return r.Err } +func (r changeEmailResponse) Error() error { return r.Err } func changeEmailEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*changeEmailRequest) @@ -959,7 +959,7 @@ type performRequiredPasswordResetResponse struct { Err error `json:"error,omitempty"` } -func (r performRequiredPasswordResetResponse) error() error { return r.Err } +func (r performRequiredPasswordResetResponse) Error() error { return r.Err } func performRequiredPasswordResetEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*performRequiredPasswordResetRequest) @@ -1053,7 +1053,7 @@ type resetPasswordResponse struct { Err error `json:"error,omitempty"` } -func (r resetPasswordResponse) error() error { return r.Err } +func (r resetPasswordResponse) Error() error { return r.Err } func resetPasswordEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*resetPasswordRequest) @@ -1127,7 +1127,7 @@ type forgotPasswordResponse struct { Err error `json:"error,omitempty"` } -func (r forgotPasswordResponse) error() error { return r.Err } +func (r forgotPasswordResponse) Error() error { return r.Err } func (r forgotPasswordResponse) Status() int { return http.StatusAccepted } func forgotPasswordEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { diff --git a/server/service/vpp.go b/server/service/vpp.go index 4e62367ad7..10a77f61cd 100644 --- a/server/service/vpp.go +++ b/server/service/vpp.go @@ -24,7 +24,7 @@ type getAppStoreAppsResponse struct { Err error `json:"error,omitempty"` } -func (r getAppStoreAppsResponse) error() error { return r.Err } +func (r getAppStoreAppsResponse) Error() error { return r.Err } func getAppStoreAppsEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*getAppStoreAppsRequest) @@ -61,7 +61,7 @@ type addAppStoreAppResponse struct { Err error `json:"error,omitempty"` } -func (r addAppStoreAppResponse) error() error { return r.Err } +func (r addAppStoreAppResponse) Error() error { return r.Err } func addAppStoreAppEndpoint(ctx context.Context, request interface{}, svc fleet.Service) (errorer, error) { req := request.(*addAppStoreAppRequest) @@ -162,7 +162,7 @@ type uploadVPPTokenResponse struct { func (r uploadVPPTokenResponse) Status() int { return http.StatusAccepted } -func (r uploadVPPTokenResponse) error() error { +func (r uploadVPPTokenResponse) Error() error { return r.Err } @@ -236,7 +236,7 @@ type patchVPPTokenRenewResponse struct { func (r patchVPPTokenRenewResponse) Status() int { return http.StatusAccepted } -func (r patchVPPTokenRenewResponse) error() error { +func (r patchVPPTokenRenewResponse) Error() error { return r.Err } @@ -278,7 +278,7 @@ type patchVPPTokensTeamsResponse struct { Err error `json:"error,omitempty"` } -func (r patchVPPTokensTeamsResponse) error() error { return r.Err } +func (r patchVPPTokensTeamsResponse) Error() error { return r.Err } func patchVPPTokensTeams(ctx context.Context, request any, svc fleet.Service) (errorer, error) { req := request.(*patchVPPTokensTeamsRequest) @@ -309,7 +309,7 @@ type getVPPTokensResponse struct { Err error `json:"error,omitempty"` } -func (r getVPPTokensResponse) error() error { return r.Err } +func (r getVPPTokensResponse) Error() error { return r.Err } func getVPPTokens(ctx context.Context, request any, svc fleet.Service) (errorer, error) { tokens, err := svc.GetVPPTokens(ctx) @@ -344,7 +344,7 @@ type deleteVPPTokenResponse struct { Err error `json:"error,omitempty"` } -func (r deleteVPPTokenResponse) error() error { return r.Err } +func (r deleteVPPTokenResponse) Error() error { return r.Err } func (r deleteVPPTokenResponse) Status() int { return http.StatusNoContent } diff --git a/server/service/vulnerabilities.go b/server/service/vulnerabilities.go index cf301c77c9..d422622ec9 100644 --- a/server/service/vulnerabilities.go +++ b/server/service/vulnerabilities.go @@ -46,7 +46,7 @@ type listVulnerabilitiesResponse struct { // Allow formats like: CVE-2017-12345, cve-2017-12345 var cveRegex = regexp.MustCompile(`(?i)^CVE-\d{4}-\d{4}\d*$`) -func (r listVulnerabilitiesResponse) error() error { return r.Err } +func (r listVulnerabilitiesResponse) Error() error { return r.Err } func listVulnerabilitiesEndpoint(ctx context.Context, req interface{}, svc fleet.Service) (errorer, error) { request := req.(*listVulnerabilitiesRequest) @@ -133,7 +133,7 @@ type getVulnerabilityResponse struct { statusCode int } -func (r getVulnerabilityResponse) error() error { return r.Err } +func (r getVulnerabilityResponse) Error() error { return r.Err } func (r getVulnerabilityResponse) Status() int { if r.statusCode == 0 {