Commit e2afa8f3 authored by Kevin Di Lallo's avatar Kevin Di Lallo
Browse files

access control for sandbox-ctrl endpoints

parent 2a84eac8
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -108,7 +108,7 @@ func main() {
		priAccessMap := map[string]string{}
		if altServ != "" {
			priAccessMap = map[string]string{
				"Index":              ss.AccessGrant,
				"Index":              ss.AccessBlock,
				"CreateSandbox":      ss.AccessBlock,
				"DeleteSandbox":      ss.AccessBlock,
				"DeleteSandboxList":  ss.AccessBlock,
@@ -117,7 +117,7 @@ func main() {
				"CreateScenario":     ss.AccessBlock,
				"DeleteScenario":     ss.AccessBlock,
				"DeleteScenarioList": ss.AccessBlock,
				"GetScenario":        ss.AccessBlock,
				"GetScenario":        ss.AccessVerify,
				"GetScenarioList":    ss.AccessVerify,
				"SetScenario":        ss.AccessBlock,
				"LoginUser":          ss.AccessGrant,
+2 −0
Original line number Diff line number Diff line
@@ -12,6 +12,7 @@ require (
	github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-mq v0.0.0
	github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-replay-manager v0.0.0
	github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-sandbox-store v0.0.0
	github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-sessions v0.0.0
	github.com/gorilla/handlers v1.4.0
	github.com/gorilla/mux v1.7.3
)
@@ -29,4 +30,5 @@ replace (
	github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-replay-manager => ../../go-packages/meep-replay-manager
	github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-sandbox-ctrl-client => ../../go-packages/meep-sandbox-ctrl-client
	github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-sandbox-store => ../../go-packages/meep-sandbox-store
	github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-sessions => ../../go-packages/meep-sessions
)
+6 −0
Original line number Diff line number Diff line
@@ -25,6 +25,10 @@ github.com/gorilla/handlers v1.4.0 h1:XulKRWSQK5uChr4pEgSE4Tc/OcmnU9GJuSwdog/tZs
github.com/gorilla/handlers v1.4.0/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ=
github.com/gorilla/mux v1.7.3 h1:gnP5JzjVOuiZD07fKKToCAOjS0yOpj/qPETTXCCS6hw=
github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
github.com/gorilla/securecookie v1.1.1 h1:miw7JPhV+b/lAHSXz4qd/nN9jRiAFV5FwjeKyCS8BvQ=
github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4=
github.com/gorilla/sessions v1.2.0 h1:S7P+1Hm5V/AT9cjEcUD5uDaQSX0OE577aCXgoaKpYbQ=
github.com/gorilla/sessions v1.2.0/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/imdario/mergo v0.3.8 h1:CGgOkSJeqMRmt0D9XLWExdT4m4F1vd3FV3VPt+0VxkQ=
github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
@@ -39,6 +43,8 @@ github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1Cpa
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/rs/xid v1.2.1 h1:mhH9Nq+C1fY2l1XIpgxIiUOfNpRBYH1kKcr+qfKgjRc=
github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ=
github.com/sirupsen/logrus v1.4.1 h1:GL2rEmy6nsikmW0r8opw9JIRScdMF5hA8cOYLH7In1k=
github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+25 −2
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import (

	server "github.com/InterDigitalInc/AdvantEDGE/go-apps/meep-sandbox-ctrl/server"
	log "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-logger"
	ss "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-sessions"

	"github.com/gorilla/handlers"
)
@@ -81,7 +82,8 @@ func main() {
			go func() {
				log.Info("Starting Alt-server on port " + altServ)
				log.Info("Alt-serving [sw:" + altSw)
				secRouter := server.NewRouter(altSw)
				secAccessMap := map[string]string{}
				secRouter := server.NewRouter(altSw, secAccessMap)
				methods := handlers.AllowedMethods([]string{"OPTIONS", "DELETE", "GET", "HEAD", "POST", "PUT"})
				header := handlers.AllowedHeaders([]string{"content-type"})
				log.Fatal(http.ListenAndServe(":"+altServ, handlers.CORS(methods, header)(secRouter)))
@@ -92,7 +94,28 @@ func main() {
		// Start primary REST API Server
		log.Info("Starting Primary-server on port 80")
		log.Info("Primary-serving [sw:" + priSw)
		router := server.NewRouter(priSw)
		priAccessMap := map[string]string{}
		if altServ != "" {
			priAccessMap = map[string]string{
				"Index":                            ss.AccessBlock,
				"ActivateScenario":                 ss.AccessVerify,
				"GetActiveNodeServiceMaps":         ss.AccessBlock,
				"GetActiveScenario":                ss.AccessVerify,
				"TerminateScenario":                ss.AccessVerify,
				"CreateReplayFile":                 ss.AccessBlock,
				"CreateReplayFileFromScenarioExec": ss.AccessBlock,
				"DeleteReplayFile":                 ss.AccessBlock,
				"DeleteReplayFileList":             ss.AccessBlock,
				"GetReplayFile":                    ss.AccessBlock,
				"GetReplayFileList":                ss.AccessBlock,
				"GetReplayStatus":                  ss.AccessBlock,
				"LoopReplay":                       ss.AccessBlock,
				"PlayReplayFile":                   ss.AccessBlock,
				"StopReplayFile":                   ss.AccessBlock,
				"SendEvent":                        ss.AccessVerify,
			}
		}
		router := server.NewRouter(priSw, priAccessMap)
		methods := handlers.AllowedMethods([]string{"OPTIONS", "DELETE", "GET", "HEAD", "POST", "PUT"})
		header := handlers.AllowedHeaders([]string{"content-type"})
		log.Fatal(http.ListenAndServe(":80", handlers.CORS(methods, header)(router)))
+32 −1
Original line number Diff line number Diff line
@@ -30,6 +30,8 @@ import (
	"strings"

	"github.com/gorilla/mux"

	ss "github.com/InterDigitalInc/AdvantEDGE/go-packages/meep-sessions"
)

type Route struct {
@@ -37,16 +39,29 @@ type Route struct {
	Method      string
	Pattern     string
	HandlerFunc http.HandlerFunc
	AccessType  string
}

type Routes []Route

func NewRouter(swDir string) *mux.Router {
func NewRouter(swDir string, accessMap map[string]string) *mux.Router {
	router := mux.NewRouter().StrictSlash(true)

	for _, route := range routes {
		var handler http.Handler = Logger(route.HandlerFunc, route.Name)

		// Authorization
		accessType, found := accessMap[route.Name]
		if !found {
			accessType = route.AccessType
		}

		if accessType == ss.AccessBlock {
			handler = sbxCtrl.sessionStore.AccessBlocker(handler)
		} else if accessType == ss.AccessVerify {
			handler = sbxCtrl.sessionStore.AccessVerifier(handler)
		}

		router.
			Methods(route.Method).
			Path(route.Pattern).
@@ -72,6 +87,7 @@ var routes = Routes{
		"GET",
		"/sandbox-ctrl/v1/",
		Index,
		ss.AccessGrant,
	},

	Route{
@@ -79,6 +95,7 @@ var routes = Routes{
		strings.ToUpper("Post"),
		"/sandbox-ctrl/v1/active/{name}",
		ActivateScenario,
		ss.AccessGrant,
	},

	Route{
@@ -86,6 +103,7 @@ var routes = Routes{
		strings.ToUpper("Get"),
		"/sandbox-ctrl/v1/active/serviceMaps",
		GetActiveNodeServiceMaps,
		ss.AccessGrant,
	},

	Route{
@@ -93,6 +111,7 @@ var routes = Routes{
		strings.ToUpper("Get"),
		"/sandbox-ctrl/v1/active",
		GetActiveScenario,
		ss.AccessGrant,
	},

	Route{
@@ -100,6 +119,7 @@ var routes = Routes{
		strings.ToUpper("Delete"),
		"/sandbox-ctrl/v1/active",
		TerminateScenario,
		ss.AccessGrant,
	},

	Route{
@@ -107,6 +127,7 @@ var routes = Routes{
		strings.ToUpper("Post"),
		"/sandbox-ctrl/v1/replay/{name}",
		CreateReplayFile,
		ss.AccessGrant,
	},

	Route{
@@ -114,6 +135,7 @@ var routes = Routes{
		strings.ToUpper("Post"),
		"/sandbox-ctrl/v1/replay/{name}/generate",
		CreateReplayFileFromScenarioExec,
		ss.AccessGrant,
	},

	Route{
@@ -121,6 +143,7 @@ var routes = Routes{
		strings.ToUpper("Delete"),
		"/sandbox-ctrl/v1/replay/{name}",
		DeleteReplayFile,
		ss.AccessGrant,
	},

	Route{
@@ -128,6 +151,7 @@ var routes = Routes{
		strings.ToUpper("Delete"),
		"/sandbox-ctrl/v1/replay",
		DeleteReplayFileList,
		ss.AccessGrant,
	},

	Route{
@@ -135,6 +159,7 @@ var routes = Routes{
		strings.ToUpper("Get"),
		"/sandbox-ctrl/v1/replay/{name}",
		GetReplayFile,
		ss.AccessGrant,
	},

	Route{
@@ -142,6 +167,7 @@ var routes = Routes{
		strings.ToUpper("Get"),
		"/sandbox-ctrl/v1/replay",
		GetReplayFileList,
		ss.AccessGrant,
	},

	Route{
@@ -149,6 +175,7 @@ var routes = Routes{
		strings.ToUpper("Get"),
		"/sandbox-ctrl/v1/replaystatus",
		GetReplayStatus,
		ss.AccessGrant,
	},

	Route{
@@ -156,6 +183,7 @@ var routes = Routes{
		strings.ToUpper("Post"),
		"/sandbox-ctrl/v1/replay/{name}/loop",
		LoopReplay,
		ss.AccessGrant,
	},

	Route{
@@ -163,6 +191,7 @@ var routes = Routes{
		strings.ToUpper("Post"),
		"/sandbox-ctrl/v1/replay/{name}/play",
		PlayReplayFile,
		ss.AccessGrant,
	},

	Route{
@@ -170,6 +199,7 @@ var routes = Routes{
		strings.ToUpper("Post"),
		"/sandbox-ctrl/v1/replay/{name}/stop",
		StopReplayFile,
		ss.AccessGrant,
	},

	Route{
@@ -177,5 +207,6 @@ var routes = Routes{
		strings.ToUpper("Post"),
		"/sandbox-ctrl/v1/events/{type}",
		SendEvent,
		ss.AccessGrant,
	},
}
Loading