From 4d3db6439759d4c1100188bd66150498e92c7d87 Mon Sep 17 00:00:00 2001 From: Johannes Batzill Date: Fri, 30 Sep 2022 17:05:39 -0700 Subject: [PATCH] add specific handlers for api/git/web to allow replacement for harness (#23) Abstracting the api/git/web routers will allow us to replace API routing (and potentially web?), while keeping the rest the same. --- cli/server/harness.wire.go | 6 ++- cli/server/harness.wire_gen.go | 18 +++++---- cli/server/standalone.wire.go | 2 + cli/server/standalone.wire_gen.go | 12 +++--- internal/api/handler/repo/create.go | 2 +- internal/api/handler/repo/createPath.go | 2 +- internal/api/handler/repo/delete.go | 2 +- internal/api/handler/repo/deletePath.go | 2 +- internal/api/handler/repo/find.go | 2 +- internal/api/handler/repo/listPaths.go | 2 +- .../api/handler/repo/listServiceAccounts.go | 2 +- internal/api/handler/repo/move.go | 2 +- internal/api/handler/repo/update.go | 2 +- internal/api/handler/serviceaccount/create.go | 2 +- .../api/handler/serviceaccount/createSat.go | 2 +- internal/api/handler/serviceaccount/delete.go | 2 +- .../api/handler/serviceaccount/deleteSat.go | 2 +- internal/api/handler/serviceaccount/find.go | 2 +- .../api/handler/serviceaccount/listSats.go | 2 +- internal/api/handler/space/create.go | 2 +- internal/api/handler/space/createPath.go | 2 +- internal/api/handler/space/delete.go | 2 +- internal/api/handler/space/deletePath.go | 2 +- internal/api/handler/space/find.go | 2 +- internal/api/handler/space/list.go | 2 +- internal/api/handler/space/listPaths.go | 2 +- internal/api/handler/space/listRepos.go | 2 +- .../api/handler/space/listServiceAccounts.go | 2 +- internal/api/handler/space/move.go | 2 +- internal/api/handler/space/update.go | 2 +- internal/{api => }/guard/guard.go | 0 internal/{api => }/guard/guard.repo.go | 0 .../{api => }/guard/guard.serviceAccount.go | 0 internal/{api => }/guard/guard.space.go | 0 internal/guard/wire.go | 20 ++++++++++ internal/router/api.go | 24 ++++++------ internal/router/git.go | 26 ++++++------- internal/router/router.go | 31 +++++---------- internal/router/web.go | 11 ++++-- internal/router/wire.go | 39 ++++++++++++++----- internal/server/server.go | 19 ++++----- internal/server/wire.go | 13 +++---- 42 files changed, 160 insertions(+), 113 deletions(-) rename internal/{api => }/guard/guard.go (100%) rename internal/{api => }/guard/guard.repo.go (100%) rename internal/{api => }/guard/guard.serviceAccount.go (100%) rename internal/{api => }/guard/guard.space.go (100%) create mode 100644 internal/guard/wire.go diff --git a/cli/server/harness.wire.go b/cli/server/harness.wire.go index c203f4ce8..843803386 100644 --- a/cli/server/harness.wire.go +++ b/cli/server/harness.wire.go @@ -8,12 +8,15 @@ package server import ( + "context" + "github.com/harness/gitness/harness" "github.com/harness/gitness/harness/auth/authn" "github.com/harness/gitness/harness/auth/authz" "github.com/harness/gitness/harness/client" "github.com/harness/gitness/harness/router/translator" "github.com/harness/gitness/internal/cron" + "github.com/harness/gitness/internal/guard" "github.com/harness/gitness/internal/router" "github.com/harness/gitness/internal/server" "github.com/harness/gitness/internal/store/database" @@ -23,7 +26,7 @@ import ( "github.com/google/wire" ) -func initSystem(config *types.Config) (*system, error) { +func initSystem(ctx context.Context, config *types.Config) (*system, error) { wire.Build( newSystem, database.WireSet, @@ -31,6 +34,7 @@ func initSystem(config *types.Config) (*system, error) { router.WireSet, server.WireSet, cron.WireSet, + guard.WireSet, harness.LoadConfig, authn.WireSet, authz.WireSet, diff --git a/cli/server/harness.wire_gen.go b/cli/server/harness.wire_gen.go index 5bcd7645c..941394d9c 100644 --- a/cli/server/harness.wire_gen.go +++ b/cli/server/harness.wire_gen.go @@ -6,12 +6,15 @@ package server import ( + "context" + "github.com/harness/gitness/harness" "github.com/harness/gitness/harness/auth/authn" "github.com/harness/gitness/harness/auth/authz" "github.com/harness/gitness/harness/client" "github.com/harness/gitness/harness/router/translator" "github.com/harness/gitness/internal/cron" + "github.com/harness/gitness/internal/guard" "github.com/harness/gitness/internal/router" "github.com/harness/gitness/internal/server" "github.com/harness/gitness/internal/store/database" @@ -21,10 +24,10 @@ import ( // Injectors from harness.wire.go: -func initSystem(config *types.Config) (*system, error) { +func initSystem(ctx context.Context, config *types.Config) (*system, error) { requestTranslator := translator.ProvideRequestTranslator() systemStore := memory.New(config) - db, err := database.ProvideDatabase(config) + db, err := database.ProvideDatabase(ctx, config) if err != nil { return nil, err } @@ -62,11 +65,12 @@ func initSystem(config *types.Config) (*system, error) { return nil, err } authorizer := authz.ProvideAuthorizer(aclClient) - handler, err := router.ProvideHTTPHandler(requestTranslator, systemStore, userStore, spaceStore, repoStore, tokenStore, serviceAccountStore, authenticator, authorizer) - if err != nil { - return nil, err - } - serverServer := server.ProvideServer(config, handler) + guardGuard := guard.ProvideGuard(authorizer, spaceStore, repoStore) + apiHandler := router.ProvideAPIHandler(systemStore, userStore, spaceStore, repoStore, tokenStore, serviceAccountStore, authenticator, guardGuard) + gitHandler := router.ProvideGitHandler(repoStore, authenticator, guardGuard) + webHandler := router.ProvideWebHandler(systemStore) + routerRouter := router.ProvideRouter(requestTranslator, apiHandler, gitHandler, webHandler) + serverServer := server.ProvideServer(config, routerRouter) nightly := cron.NewNightly() serverSystem := newSystem(serverServer, nightly) return serverSystem, nil diff --git a/cli/server/standalone.wire.go b/cli/server/standalone.wire.go index 29ced8668..662be3a15 100644 --- a/cli/server/standalone.wire.go +++ b/cli/server/standalone.wire.go @@ -13,6 +13,7 @@ import ( "github.com/harness/gitness/internal/auth/authn" "github.com/harness/gitness/internal/auth/authz" "github.com/harness/gitness/internal/cron" + "github.com/harness/gitness/internal/guard" "github.com/harness/gitness/internal/router" "github.com/harness/gitness/internal/router/translator" "github.com/harness/gitness/internal/server" @@ -31,6 +32,7 @@ func initSystem(ctx context.Context, config *types.Config) (*system, error) { router.WireSet, server.WireSet, cron.WireSet, + guard.WireSet, authn.WireSet, authz.WireSet, translator.WireSet, diff --git a/cli/server/standalone.wire_gen.go b/cli/server/standalone.wire_gen.go index b9dddd23a..90c84c502 100644 --- a/cli/server/standalone.wire_gen.go +++ b/cli/server/standalone.wire_gen.go @@ -11,6 +11,7 @@ import ( "github.com/harness/gitness/internal/auth/authn" "github.com/harness/gitness/internal/auth/authz" "github.com/harness/gitness/internal/cron" + "github.com/harness/gitness/internal/guard" "github.com/harness/gitness/internal/router" "github.com/harness/gitness/internal/router/translator" "github.com/harness/gitness/internal/server" @@ -35,11 +36,12 @@ func initSystem(ctx context.Context, config *types.Config) (*system, error) { serviceAccountStore := database.ProvideServiceAccountStore(db) authenticator := authn.ProvideAuthenticator(userStore, serviceAccountStore, tokenStore) authorizer := authz.ProvideAuthorizer() - handler, err := router.ProvideHTTPHandler(requestTranslator, systemStore, userStore, spaceStore, repoStore, tokenStore, serviceAccountStore, authenticator, authorizer) - if err != nil { - return nil, err - } - serverServer := server.ProvideServer(config, handler) + guardGuard := guard.ProvideGuard(authorizer, spaceStore, repoStore) + apiHandler := router.ProvideAPIHandler(systemStore, userStore, spaceStore, repoStore, tokenStore, serviceAccountStore, authenticator, guardGuard) + gitHandler := router.ProvideGitHandler(repoStore, authenticator, guardGuard) + webHandler := router.ProvideWebHandler(systemStore) + routerRouter := router.ProvideRouter(requestTranslator, apiHandler, gitHandler, webHandler) + serverServer := server.ProvideServer(config, routerRouter) nightly := cron.NewNightly() serverSystem := newSystem(serverServer, nightly) return serverSystem, nil diff --git a/internal/api/handler/repo/create.go b/internal/api/handler/repo/create.go index 2990fe1a7..d4d6a6d9c 100644 --- a/internal/api/handler/repo/create.go +++ b/internal/api/handler/repo/create.go @@ -10,9 +10,9 @@ import ( "strings" "time" - "github.com/harness/gitness/internal/api/guard" "github.com/harness/gitness/internal/api/render" "github.com/harness/gitness/internal/api/request" + "github.com/harness/gitness/internal/guard" "github.com/harness/gitness/internal/store" "github.com/harness/gitness/types" "github.com/harness/gitness/types/check" diff --git a/internal/api/handler/repo/createPath.go b/internal/api/handler/repo/createPath.go index 22287741e..14609a9f1 100644 --- a/internal/api/handler/repo/createPath.go +++ b/internal/api/handler/repo/createPath.go @@ -10,10 +10,10 @@ import ( "strings" "time" - "github.com/harness/gitness/internal/api/guard" "github.com/harness/gitness/internal/api/handler/common" "github.com/harness/gitness/internal/api/render" "github.com/harness/gitness/internal/api/request" + "github.com/harness/gitness/internal/guard" "github.com/harness/gitness/internal/store" "github.com/harness/gitness/types" "github.com/harness/gitness/types/check" diff --git a/internal/api/handler/repo/delete.go b/internal/api/handler/repo/delete.go index a3d5fdc05..6505b2b90 100644 --- a/internal/api/handler/repo/delete.go +++ b/internal/api/handler/repo/delete.go @@ -7,9 +7,9 @@ package repo import ( "net/http" - "github.com/harness/gitness/internal/api/guard" "github.com/harness/gitness/internal/api/render" "github.com/harness/gitness/internal/api/request" + "github.com/harness/gitness/internal/guard" "github.com/harness/gitness/internal/store" "github.com/harness/gitness/types/enum" "github.com/rs/zerolog/hlog" diff --git a/internal/api/handler/repo/deletePath.go b/internal/api/handler/repo/deletePath.go index 19db84ae6..6240186c7 100644 --- a/internal/api/handler/repo/deletePath.go +++ b/internal/api/handler/repo/deletePath.go @@ -7,9 +7,9 @@ package repo import ( "net/http" - "github.com/harness/gitness/internal/api/guard" "github.com/harness/gitness/internal/api/render" "github.com/harness/gitness/internal/api/request" + "github.com/harness/gitness/internal/guard" "github.com/harness/gitness/internal/store" "github.com/harness/gitness/types/enum" "github.com/rs/zerolog/hlog" diff --git a/internal/api/handler/repo/find.go b/internal/api/handler/repo/find.go index 0d1550351..3e4d4c980 100644 --- a/internal/api/handler/repo/find.go +++ b/internal/api/handler/repo/find.go @@ -7,9 +7,9 @@ package repo import ( "net/http" - "github.com/harness/gitness/internal/api/guard" "github.com/harness/gitness/internal/api/render" "github.com/harness/gitness/internal/api/request" + "github.com/harness/gitness/internal/guard" "github.com/harness/gitness/internal/store" "github.com/harness/gitness/types/enum" ) diff --git a/internal/api/handler/repo/listPaths.go b/internal/api/handler/repo/listPaths.go index 5d8eba555..bfe57cc70 100644 --- a/internal/api/handler/repo/listPaths.go +++ b/internal/api/handler/repo/listPaths.go @@ -7,9 +7,9 @@ package repo import ( "net/http" - "github.com/harness/gitness/internal/api/guard" "github.com/harness/gitness/internal/api/render" "github.com/harness/gitness/internal/api/request" + "github.com/harness/gitness/internal/guard" "github.com/harness/gitness/internal/store" "github.com/harness/gitness/types/enum" "github.com/rs/zerolog/hlog" diff --git a/internal/api/handler/repo/listServiceAccounts.go b/internal/api/handler/repo/listServiceAccounts.go index b5c932fe1..37780aee2 100644 --- a/internal/api/handler/repo/listServiceAccounts.go +++ b/internal/api/handler/repo/listServiceAccounts.go @@ -7,9 +7,9 @@ package repo import ( "net/http" - "github.com/harness/gitness/internal/api/guard" "github.com/harness/gitness/internal/api/render" "github.com/harness/gitness/internal/api/request" + "github.com/harness/gitness/internal/guard" "github.com/harness/gitness/internal/store" "github.com/harness/gitness/types/enum" "github.com/rs/zerolog/hlog" diff --git a/internal/api/handler/repo/move.go b/internal/api/handler/repo/move.go index 6ac078b2e..a0ad3df34 100644 --- a/internal/api/handler/repo/move.go +++ b/internal/api/handler/repo/move.go @@ -9,9 +9,9 @@ import ( "net/http" "strings" - "github.com/harness/gitness/internal/api/guard" "github.com/harness/gitness/internal/api/render" "github.com/harness/gitness/internal/api/request" + "github.com/harness/gitness/internal/guard" "github.com/harness/gitness/internal/store" "github.com/harness/gitness/types" "github.com/harness/gitness/types/check" diff --git a/internal/api/handler/repo/update.go b/internal/api/handler/repo/update.go index 9a44aecc1..e61094cca 100644 --- a/internal/api/handler/repo/update.go +++ b/internal/api/handler/repo/update.go @@ -9,9 +9,9 @@ import ( "net/http" "time" - "github.com/harness/gitness/internal/api/guard" "github.com/harness/gitness/internal/api/render" "github.com/harness/gitness/internal/api/request" + "github.com/harness/gitness/internal/guard" "github.com/harness/gitness/internal/store" "github.com/harness/gitness/types/check" "github.com/harness/gitness/types/enum" diff --git a/internal/api/handler/serviceaccount/create.go b/internal/api/handler/serviceaccount/create.go index 5a3f7f138..dfd9ba650 100644 --- a/internal/api/handler/serviceaccount/create.go +++ b/internal/api/handler/serviceaccount/create.go @@ -10,9 +10,9 @@ import ( "time" "github.com/dchest/uniuri" - "github.com/harness/gitness/internal/api/guard" "github.com/harness/gitness/internal/api/handler/common" "github.com/harness/gitness/internal/api/render" + "github.com/harness/gitness/internal/guard" "github.com/harness/gitness/internal/store" "github.com/harness/gitness/types" "github.com/harness/gitness/types/check" diff --git a/internal/api/handler/serviceaccount/createSat.go b/internal/api/handler/serviceaccount/createSat.go index 50a48906b..7947c4be1 100644 --- a/internal/api/handler/serviceaccount/createSat.go +++ b/internal/api/handler/serviceaccount/createSat.go @@ -9,9 +9,9 @@ import ( "net/http" "time" - "github.com/harness/gitness/internal/api/guard" "github.com/harness/gitness/internal/api/render" "github.com/harness/gitness/internal/api/request" + "github.com/harness/gitness/internal/guard" "github.com/harness/gitness/internal/store" "github.com/harness/gitness/internal/token" "github.com/harness/gitness/types" diff --git a/internal/api/handler/serviceaccount/delete.go b/internal/api/handler/serviceaccount/delete.go index 39cc67ce4..04684221b 100644 --- a/internal/api/handler/serviceaccount/delete.go +++ b/internal/api/handler/serviceaccount/delete.go @@ -7,9 +7,9 @@ package serviceaccount import ( "net/http" - "github.com/harness/gitness/internal/api/guard" "github.com/harness/gitness/internal/api/render" "github.com/harness/gitness/internal/api/request" + "github.com/harness/gitness/internal/guard" "github.com/harness/gitness/internal/store" "github.com/harness/gitness/types/enum" "github.com/rs/zerolog/hlog" diff --git a/internal/api/handler/serviceaccount/deleteSat.go b/internal/api/handler/serviceaccount/deleteSat.go index 337a81cf0..016389c5f 100644 --- a/internal/api/handler/serviceaccount/deleteSat.go +++ b/internal/api/handler/serviceaccount/deleteSat.go @@ -7,9 +7,9 @@ package serviceaccount import ( "net/http" - "github.com/harness/gitness/internal/api/guard" "github.com/harness/gitness/internal/api/render" "github.com/harness/gitness/internal/api/request" + "github.com/harness/gitness/internal/guard" "github.com/harness/gitness/internal/store" "github.com/harness/gitness/types/enum" "github.com/rs/zerolog/hlog" diff --git a/internal/api/handler/serviceaccount/find.go b/internal/api/handler/serviceaccount/find.go index 96c0706c1..4a2ac4694 100644 --- a/internal/api/handler/serviceaccount/find.go +++ b/internal/api/handler/serviceaccount/find.go @@ -7,9 +7,9 @@ package serviceaccount import ( "net/http" - "github.com/harness/gitness/internal/api/guard" "github.com/harness/gitness/internal/api/render" "github.com/harness/gitness/internal/api/request" + "github.com/harness/gitness/internal/guard" "github.com/harness/gitness/types/enum" ) diff --git a/internal/api/handler/serviceaccount/listSats.go b/internal/api/handler/serviceaccount/listSats.go index 868dc56ca..553602b6a 100644 --- a/internal/api/handler/serviceaccount/listSats.go +++ b/internal/api/handler/serviceaccount/listSats.go @@ -7,9 +7,9 @@ package serviceaccount import ( "net/http" - "github.com/harness/gitness/internal/api/guard" "github.com/harness/gitness/internal/api/render" "github.com/harness/gitness/internal/api/request" + "github.com/harness/gitness/internal/guard" "github.com/harness/gitness/internal/store" "github.com/harness/gitness/types/enum" "github.com/rs/zerolog/hlog" diff --git a/internal/api/handler/space/create.go b/internal/api/handler/space/create.go index 2b437227b..603dd044e 100644 --- a/internal/api/handler/space/create.go +++ b/internal/api/handler/space/create.go @@ -10,9 +10,9 @@ import ( "strings" "time" - "github.com/harness/gitness/internal/api/guard" "github.com/harness/gitness/internal/api/render" "github.com/harness/gitness/internal/api/request" + "github.com/harness/gitness/internal/guard" "github.com/harness/gitness/internal/paths" "github.com/harness/gitness/internal/store" "github.com/harness/gitness/types" diff --git a/internal/api/handler/space/createPath.go b/internal/api/handler/space/createPath.go index 05a8c1a54..5afb27ba3 100644 --- a/internal/api/handler/space/createPath.go +++ b/internal/api/handler/space/createPath.go @@ -10,10 +10,10 @@ import ( "strings" "time" - "github.com/harness/gitness/internal/api/guard" "github.com/harness/gitness/internal/api/handler/common" "github.com/harness/gitness/internal/api/render" "github.com/harness/gitness/internal/api/request" + "github.com/harness/gitness/internal/guard" "github.com/harness/gitness/internal/store" "github.com/harness/gitness/types" "github.com/harness/gitness/types/check" diff --git a/internal/api/handler/space/delete.go b/internal/api/handler/space/delete.go index 344a47285..85ac23ec5 100644 --- a/internal/api/handler/space/delete.go +++ b/internal/api/handler/space/delete.go @@ -7,9 +7,9 @@ package space import ( "net/http" - "github.com/harness/gitness/internal/api/guard" "github.com/harness/gitness/internal/api/render" "github.com/harness/gitness/internal/api/request" + "github.com/harness/gitness/internal/guard" "github.com/harness/gitness/internal/store" "github.com/harness/gitness/types/enum" "github.com/rs/zerolog/hlog" diff --git a/internal/api/handler/space/deletePath.go b/internal/api/handler/space/deletePath.go index 61b585210..2ba792164 100644 --- a/internal/api/handler/space/deletePath.go +++ b/internal/api/handler/space/deletePath.go @@ -7,9 +7,9 @@ package space import ( "net/http" - "github.com/harness/gitness/internal/api/guard" "github.com/harness/gitness/internal/api/render" "github.com/harness/gitness/internal/api/request" + "github.com/harness/gitness/internal/guard" "github.com/harness/gitness/internal/store" "github.com/harness/gitness/types/enum" "github.com/rs/zerolog/hlog" diff --git a/internal/api/handler/space/find.go b/internal/api/handler/space/find.go index 2adb4e408..6276639b7 100644 --- a/internal/api/handler/space/find.go +++ b/internal/api/handler/space/find.go @@ -7,9 +7,9 @@ package space import ( "net/http" - "github.com/harness/gitness/internal/api/guard" "github.com/harness/gitness/internal/api/render" "github.com/harness/gitness/internal/api/request" + "github.com/harness/gitness/internal/guard" "github.com/harness/gitness/internal/store" "github.com/harness/gitness/types/enum" ) diff --git a/internal/api/handler/space/list.go b/internal/api/handler/space/list.go index 1729b9811..95bb71da8 100644 --- a/internal/api/handler/space/list.go +++ b/internal/api/handler/space/list.go @@ -7,9 +7,9 @@ package space import ( "net/http" - "github.com/harness/gitness/internal/api/guard" "github.com/harness/gitness/internal/api/render" "github.com/harness/gitness/internal/api/request" + "github.com/harness/gitness/internal/guard" "github.com/harness/gitness/internal/store" "github.com/harness/gitness/types" "github.com/harness/gitness/types/enum" diff --git a/internal/api/handler/space/listPaths.go b/internal/api/handler/space/listPaths.go index 51960ee95..134dd2169 100644 --- a/internal/api/handler/space/listPaths.go +++ b/internal/api/handler/space/listPaths.go @@ -7,9 +7,9 @@ package space import ( "net/http" - "github.com/harness/gitness/internal/api/guard" "github.com/harness/gitness/internal/api/render" "github.com/harness/gitness/internal/api/request" + "github.com/harness/gitness/internal/guard" "github.com/harness/gitness/internal/store" "github.com/harness/gitness/types/enum" "github.com/rs/zerolog/hlog" diff --git a/internal/api/handler/space/listRepos.go b/internal/api/handler/space/listRepos.go index fd0d765ac..fc7425d7e 100644 --- a/internal/api/handler/space/listRepos.go +++ b/internal/api/handler/space/listRepos.go @@ -7,9 +7,9 @@ package space import ( "net/http" - "github.com/harness/gitness/internal/api/guard" "github.com/harness/gitness/internal/api/render" "github.com/harness/gitness/internal/api/request" + "github.com/harness/gitness/internal/guard" "github.com/harness/gitness/internal/store" "github.com/harness/gitness/types" "github.com/harness/gitness/types/enum" diff --git a/internal/api/handler/space/listServiceAccounts.go b/internal/api/handler/space/listServiceAccounts.go index 845718726..0fd63c5ac 100644 --- a/internal/api/handler/space/listServiceAccounts.go +++ b/internal/api/handler/space/listServiceAccounts.go @@ -7,9 +7,9 @@ package space import ( "net/http" - "github.com/harness/gitness/internal/api/guard" "github.com/harness/gitness/internal/api/render" "github.com/harness/gitness/internal/api/request" + "github.com/harness/gitness/internal/guard" "github.com/harness/gitness/internal/store" "github.com/harness/gitness/types/enum" "github.com/rs/zerolog/hlog" diff --git a/internal/api/handler/space/move.go b/internal/api/handler/space/move.go index fec443c2b..21a99d9c1 100644 --- a/internal/api/handler/space/move.go +++ b/internal/api/handler/space/move.go @@ -9,9 +9,9 @@ import ( "net/http" "strings" - "github.com/harness/gitness/internal/api/guard" "github.com/harness/gitness/internal/api/render" "github.com/harness/gitness/internal/api/request" + "github.com/harness/gitness/internal/guard" "github.com/harness/gitness/internal/paths" "github.com/harness/gitness/internal/store" "github.com/harness/gitness/types" diff --git a/internal/api/handler/space/update.go b/internal/api/handler/space/update.go index 8857f7c1b..9b8e1fefc 100644 --- a/internal/api/handler/space/update.go +++ b/internal/api/handler/space/update.go @@ -9,9 +9,9 @@ import ( "net/http" "time" - "github.com/harness/gitness/internal/api/guard" "github.com/harness/gitness/internal/api/render" "github.com/harness/gitness/internal/api/request" + "github.com/harness/gitness/internal/guard" "github.com/harness/gitness/internal/store" "github.com/harness/gitness/types/check" "github.com/harness/gitness/types/enum" diff --git a/internal/api/guard/guard.go b/internal/guard/guard.go similarity index 100% rename from internal/api/guard/guard.go rename to internal/guard/guard.go diff --git a/internal/api/guard/guard.repo.go b/internal/guard/guard.repo.go similarity index 100% rename from internal/api/guard/guard.repo.go rename to internal/guard/guard.repo.go diff --git a/internal/api/guard/guard.serviceAccount.go b/internal/guard/guard.serviceAccount.go similarity index 100% rename from internal/api/guard/guard.serviceAccount.go rename to internal/guard/guard.serviceAccount.go diff --git a/internal/api/guard/guard.space.go b/internal/guard/guard.space.go similarity index 100% rename from internal/api/guard/guard.space.go rename to internal/guard/guard.space.go diff --git a/internal/guard/wire.go b/internal/guard/wire.go new file mode 100644 index 000000000..5e80820cf --- /dev/null +++ b/internal/guard/wire.go @@ -0,0 +1,20 @@ +// Copyright 2021 Harness Inc. All rights reserved. +// Use of this source code is governed by the Polyform Free Trial License +// that can be found in the LICENSE.md file for this repository. + +package guard + +import ( + "github.com/google/wire" + "github.com/harness/gitness/internal/auth/authz" + "github.com/harness/gitness/internal/store" +) + +// WireSet provides a wire set for this package. +var WireSet = wire.NewSet( + ProvideGuard, +) + +func ProvideGuard(authorizer authz.Authorizer, spaceStore store.SpaceStore, repoStore store.RepoStore) *Guard { + return New(authorizer, spaceStore, repoStore) +} diff --git a/internal/router/api.go b/internal/router/api.go index 2f4a5f9da..8dece0d58 100644 --- a/internal/router/api.go +++ b/internal/router/api.go @@ -5,7 +5,6 @@ import ( "fmt" "net/http" - "github.com/harness/gitness/internal/api/guard" "github.com/harness/gitness/internal/api/handler/account" handlerrepo "github.com/harness/gitness/internal/api/handler/repo" handlerserviceaccount "github.com/harness/gitness/internal/api/handler/serviceaccount" @@ -15,10 +14,10 @@ import ( "github.com/harness/gitness/internal/api/middleware/accesslog" middlewareauthn "github.com/harness/gitness/internal/api/middleware/authn" "github.com/harness/gitness/internal/api/middleware/resolve" + "github.com/harness/gitness/internal/guard" "github.com/harness/gitness/internal/api/request" "github.com/harness/gitness/internal/auth/authn" - "github.com/harness/gitness/internal/auth/authz" "github.com/harness/gitness/internal/store" "github.com/harness/gitness/types" @@ -28,10 +27,15 @@ import ( "github.com/rs/zerolog/hlog" ) +// APIHandler is an abstraction of an http handler that handles API calls. +type APIHandler interface { + http.Handler +} + /* - * newAPIHandler returns a new http handler for handling API calls. + * NewAPIHandler returns a new APIHandler. */ -func newAPIHandler( +func NewAPIHandler( systemStore store.SystemStore, userStore store.UserStore, spaceStore store.SpaceStore, @@ -39,15 +43,13 @@ func newAPIHandler( tokenStore store.TokenStore, saStore store.ServiceAccountStore, authenticator authn.Authenticator, - authorizer authz.Authorizer) http.Handler { - // + guard *guard.Guard) APIHandler { config := systemStore.Config(context.Background()) - g := guard.New(authorizer, spaceStore, repoStore) - // Use go-chi router for inner routing (restricted to mountPath!) + // Use go-chi router for inner routing. r := chi.NewRouter() - // Apply common api middleware + // Apply common api middleware. r.Use(middleware.NoCache) r.Use(middleware.Recoverer) @@ -60,11 +62,11 @@ func newAPIHandler( // configure cors middleware r.Use(corsHandler(config)) - // for now always attempt auth - enforced per operation + // for now always attempt auth - enforced per operation. r.Use(middlewareauthn.Attempt(authenticator)) r.Route("/v1", func(r chi.Router) { - setupRoutesV1(r, systemStore, userStore, spaceStore, repoStore, tokenStore, saStore, authenticator, g) + setupRoutesV1(r, systemStore, userStore, spaceStore, repoStore, tokenStore, saStore, authenticator, guard) }) return r diff --git a/internal/router/git.go b/internal/router/git.go index 4dd372664..9b62b64b9 100644 --- a/internal/router/git.go +++ b/internal/router/git.go @@ -4,13 +4,12 @@ import ( "fmt" "net/http" - "github.com/harness/gitness/internal/api/guard" "github.com/harness/gitness/internal/api/middleware/accesslog" middleware_authn "github.com/harness/gitness/internal/api/middleware/authn" "github.com/harness/gitness/internal/api/middleware/resolve" "github.com/harness/gitness/internal/api/request" "github.com/harness/gitness/internal/auth/authn" - "github.com/harness/gitness/internal/auth/authz" + "github.com/harness/gitness/internal/guard" "github.com/harness/gitness/internal/store" "github.com/harness/gitness/types/enum" @@ -19,21 +18,22 @@ import ( "github.com/rs/zerolog/hlog" ) +// GitHandler is an abstraction of an http handler that handles git calls. +type GitHandler interface { + http.Handler +} + /* - * newGitHandler returns a new http handler for handling GIT calls. + * NewGitHandler returns a new GitHandler. */ -func newGitHandler( - _ store.SystemStore, - _ store.UserStore, - spaceStore store.SpaceStore, +func NewGitHandler( repoStore store.RepoStore, authenticator authn.Authenticator, - authorizer authz.Authorizer) http.Handler { - guard := guard.New(authorizer, spaceStore, repoStore) - - // Use go-chi router for inner routing (restricted to mountPath!) + guard *guard.Guard) GitHandler { + // Use go-chi router for inner routing. r := chi.NewRouter() - // Apply common api middleware + + // Apply common api middleware. r.Use(middleware.NoCache) r.Use(middleware.Recoverer) @@ -43,7 +43,7 @@ func newGitHandler( r.Use(hlog.RequestIDHandler("request", "Request-Id")) r.Use(accesslog.HlogHandler()) - // for now always attempt auth - enforced per operation + // for now always attempt auth - enforced per operation. r.Use(middleware_authn.Attempt(authenticator)) r.Route(fmt.Sprintf("/{%s}", request.RepoRefParamName), func(r chi.Router) { diff --git a/internal/router/router.go b/internal/router/router.go index fe9a5d54d..ee2459e89 100644 --- a/internal/router/router.go +++ b/internal/router/router.go @@ -11,11 +11,8 @@ import ( "strings" "github.com/harness/gitness/internal/api/render" - "github.com/harness/gitness/internal/auth/authn" - "github.com/harness/gitness/internal/auth/authz" "github.com/harness/gitness/internal/request" "github.com/harness/gitness/internal/router/translator" - "github.com/harness/gitness/internal/store" "github.com/rs/zerolog" "github.com/rs/zerolog/hlog" "github.com/rs/zerolog/log" @@ -28,35 +25,25 @@ const ( type Router struct { translator translator.RequestTranslator - api http.Handler - git http.Handler - web http.Handler + api APIHandler + git GitHandler + web WebHandler } // NewRouter returns a new http.Handler that routes traffic -// to the appropriate http.Handlers. +// to the appropriate handlers. func NewRouter( translator translator.RequestTranslator, - systemStore store.SystemStore, - userStore store.UserStore, - spaceStore store.SpaceStore, - repoStore store.RepoStore, - tokenStore store.TokenStore, - saStore store.ServiceAccountStore, - authenticator authn.Authenticator, - authorizer authz.Authorizer, -) (*Router, error) { - api := newAPIHandler(systemStore, userStore, spaceStore, repoStore, tokenStore, saStore, - authenticator, authorizer) - git := newGitHandler(systemStore, userStore, spaceStore, repoStore, authenticator, authorizer) - web := newWebHandler(systemStore) - + api APIHandler, + git GitHandler, + web WebHandler, +) *Router { return &Router{ translator: translator, api: api, git: git, web: web, - }, nil + } } func (r *Router) ServeHTTP(w http.ResponseWriter, req *http.Request) { diff --git a/internal/router/web.go b/internal/router/web.go index f5e928e87..148e1fc08 100644 --- a/internal/router/web.go +++ b/internal/router/web.go @@ -12,13 +12,18 @@ import ( "github.com/go-chi/chi" ) +// WebHandler is an abstraction of an http handler that handles web calls. +type WebHandler interface { + http.Handler +} + /* - * newWebHandler returns a new http handler for handling WEB calls. + * NewWebHandler returns a new WebHandler. */ -func newWebHandler(systemStore store.SystemStore) http.Handler { +func NewWebHandler(systemStore store.SystemStore) WebHandler { config := systemStore.Config(context.Background()) - // Use go-chi router for inner routing (restricted to mountPath!) + // Use go-chi router for inner routing r := chi.NewRouter() // create middleware to enforce security best practices for // the user interface. note that theis middleware is only used diff --git a/internal/router/wire.go b/internal/router/wire.go index 7d2f65707..a63ef596b 100644 --- a/internal/router/wire.go +++ b/internal/router/wire.go @@ -5,20 +5,38 @@ package router import ( - "net/http" - "github.com/google/wire" "github.com/harness/gitness/internal/auth/authn" - "github.com/harness/gitness/internal/auth/authz" + "github.com/harness/gitness/internal/guard" "github.com/harness/gitness/internal/router/translator" "github.com/harness/gitness/internal/store" ) // WireSet provides a wire set for this package. -var WireSet = wire.NewSet(ProvideHTTPHandler) +var WireSet = wire.NewSet( + ProvideRouter, + ProvideGitHandler, + ProvideAPIHandler, + ProvideWebHandler, +) -func ProvideHTTPHandler( +func ProvideRouter( translator translator.RequestTranslator, + api APIHandler, + git GitHandler, + web WebHandler, +) *Router { + return NewRouter(translator, api, git, web) +} + +func ProvideGitHandler( + repoStore store.RepoStore, + authenticator authn.Authenticator, + guard *guard.Guard) GitHandler { + return NewGitHandler(repoStore, authenticator, guard) +} + +func ProvideAPIHandler( systemStore store.SystemStore, userStore store.UserStore, spaceStore store.SpaceStore, @@ -26,8 +44,11 @@ func ProvideHTTPHandler( tokenStore store.TokenStore, saStore store.ServiceAccountStore, authenticator authn.Authenticator, - authorizer authz.Authorizer, -) (http.Handler, error) { - return NewRouter(translator, systemStore, userStore, spaceStore, - repoStore, tokenStore, saStore, authenticator, authorizer) + guard *guard.Guard) APIHandler { + return NewAPIHandler(systemStore, userStore, spaceStore, repoStore, tokenStore, + saStore, authenticator, guard) +} + +func ProvideWebHandler(systemStore store.SystemStore) WebHandler { + return NewWebHandler(systemStore) } diff --git a/internal/server/server.go b/internal/server/server.go index 1276d02de..53f7a5195 100644 --- a/internal/server/server.go +++ b/internal/server/server.go @@ -11,6 +11,7 @@ import ( "net/http" "time" + "github.com/harness/gitness/internal/router" "golang.org/x/crypto/acme/autocert" "golang.org/x/sync/errgroup" ) @@ -22,12 +23,12 @@ const ( // A Server defines parameters for running an HTTP server. type Server struct { - Acme bool - Addr string - Cert string - Key string - Host string - Handler http.Handler + Acme bool + Addr string + Cert string + Key string + Host string + router *router.Router } // ShutdownFunction defines a function that is called to shutdown the server. @@ -48,7 +49,7 @@ func (s *Server) listenAndServe() (*errgroup.Group, ShutdownFunction) { s1 := &http.Server{ Addr: s.Addr, ReadHeaderTimeout: ReadHeaderTimeout, - Handler: s.Handler, + Handler: s.router, } g.Go(func() error { return s1.ListenAndServe() @@ -67,7 +68,7 @@ func (s *Server) listenAndServeTLS() (*errgroup.Group, ShutdownFunction) { s2 := &http.Server{ Addr: ":https", ReadHeaderTimeout: ReadHeaderTimeout, - Handler: s.Handler, + Handler: s.router, } g.Go(func() error { return s1.ListenAndServe() @@ -105,7 +106,7 @@ func (s Server) listenAndServeAcme() (*errgroup.Group, ShutdownFunction) { } s2 := &http.Server{ Addr: ":https", - Handler: s.Handler, + Handler: s.router, ReadHeaderTimeout: ReadHeaderTimeout, TLSConfig: &tls.Config{ MinVersion: tls.VersionTLS12, diff --git a/internal/server/wire.go b/internal/server/wire.go index 11ac864ba..895641469 100644 --- a/internal/server/wire.go +++ b/internal/server/wire.go @@ -5,8 +5,7 @@ package server import ( - "net/http" - + "github.com/harness/gitness/internal/router" "github.com/harness/gitness/types" "github.com/google/wire" @@ -16,11 +15,11 @@ import ( var WireSet = wire.NewSet(ProvideServer) // ProvideServer provides a server instance. -func ProvideServer(config *types.Config, handler http.Handler) *Server { +func ProvideServer(config *types.Config, router *router.Router) *Server { return &Server{ - Acme: config.Server.Acme.Enabled, - Addr: config.Server.Bind, - Host: config.Server.Host, - Handler: handler, + Acme: config.Server.Acme.Enabled, + Addr: config.Server.Bind, + Host: config.Server.Host, + router: router, } }