Browse Source

[wip] temp router restructure

Alexander Belanger 5 years ago
parent
commit
619398842f
1 changed files with 22 additions and 2 deletions
  1. 22 2
      api/server/router/router.go

+ 22 - 2
api/server/router/router.go

@@ -4,6 +4,8 @@ import (
 	"net/http"
 
 	"github.com/go-chi/chi"
+	"github.com/porter-dev/porter/api/server/authn"
+	"github.com/porter-dev/porter/api/server/authz"
 	"github.com/porter-dev/porter/api/server/shared"
 	"github.com/porter-dev/porter/api/types"
 )
@@ -26,7 +28,7 @@ func NewAPIRouter(config *shared.Config) *chi.Mux {
 			userRegisterer.Children...,
 		)
 
-		registerRoutes(userRoutes)
+		registerRoutes(config, userRoutes)
 	})
 
 	return r
@@ -50,8 +52,26 @@ type Registerer struct {
 	Children []*Registerer
 }
 
-func registerRoutes(routes []*Route) {
+func registerRoutes(config *shared.Config, routes []*Route) {
+	// Create a new "user-scoped" factory which will create a new user-scoped request
+	// after authentication. Each subsequent http.Handler can lookup the user in context.
+	authNFactory := authn.NewAuthNFactory(config)
+
+	// Create a new "project-scoped" factory which will create a new project-scoped request
+	// after authorization. Each subsequent http.Handler can lookup the project in context.
+	projFactory := authz.NewProjectScopedFactory(config)
+
 	for _, route := range routes {
+		atomicGroup := route.Router.Group(nil)
+
+		for _, scope := range route.Endpoint.Metadata.Scopes {
+			switch scope {
+			case types.UserScope:
+				atomicGroup.Use(authNFactory.NewAuthenticated)
+			case types.ProjectScope:
+				atomicGroup.Use(projFactory.Middleware)
+			}
+		}
 		route.Router.Method(
 			string(route.Endpoint.Metadata.Method),
 			route.Endpoint.Metadata.Path.RelativePath,