bitbucket.org/Aishee/synsec@v0.0.0-20210414005726-236fc01a153d/pkg/apiserver/controllers/controller.go (about) 1 package controllers 2 3 import ( 4 "context" 5 "net/http" 6 7 v1 "bitbucket.org/Aishee/synsec/pkg/apiserver/controllers/v1" 8 "bitbucket.org/Aishee/synsec/pkg/csconfig" 9 "bitbucket.org/Aishee/synsec/pkg/database" 10 "bitbucket.org/Aishee/synsec/pkg/models" 11 "github.com/gin-gonic/gin" 12 log "github.com/sirupsen/logrus" 13 ) 14 15 type Controller struct { 16 Ectx context.Context 17 DBClient *database.Client 18 Router *gin.Engine 19 Profiles []*csconfig.ProfileCfg 20 CAPIChan chan []*models.Alert 21 Log *log.Logger 22 } 23 24 func (c *Controller) Init() error { 25 if err := c.NewV1(); err != nil { 26 return err 27 } 28 29 /* if we have a V2, just add 30 31 if err := c.NewV2(); err != nil { 32 return err 33 } 34 35 */ 36 37 return nil 38 } 39 40 func (c *Controller) NewV1() error { 41 handlerV1, err := v1.New(c.DBClient, c.Ectx, c.Profiles) 42 if err != nil { 43 return err 44 } 45 46 c.Router.Use(v1.PrometheusMiddleware()) 47 c.Router.HandleMethodNotAllowed = true 48 c.Router.NoRoute(func(ctx *gin.Context) { 49 ctx.AbortWithStatus(http.StatusNotFound) 50 }) 51 c.Router.NoMethod(func(ctx *gin.Context) { 52 ctx.AbortWithStatus(http.StatusMethodNotAllowed) 53 }) 54 55 groupV1 := c.Router.Group("/v1") 56 groupV1.POST("/watchers", handlerV1.CreateMachine) 57 groupV1.POST("/watchers/login", handlerV1.Middlewares.JWT.Middleware.LoginHandler) 58 59 jwtAuth := groupV1.Group("") 60 jwtAuth.GET("/refresh_token", handlerV1.Middlewares.JWT.Middleware.RefreshHandler) 61 jwtAuth.Use(handlerV1.Middlewares.JWT.Middleware.MiddlewareFunc(), v1.PrometheusMachinesMiddleware()) 62 { 63 jwtAuth.POST("/alerts", handlerV1.CreateAlert) 64 jwtAuth.GET("/alerts", handlerV1.FindAlerts) 65 jwtAuth.HEAD("/alerts", handlerV1.FindAlerts) 66 jwtAuth.GET("/alerts/:alert_id", handlerV1.FindAlertByID) 67 jwtAuth.HEAD("/alerts/:alert_id", handlerV1.FindAlertByID) 68 jwtAuth.DELETE("/alerts", handlerV1.DeleteAlerts) 69 jwtAuth.DELETE("/decisions", handlerV1.DeleteDecisions) 70 jwtAuth.DELETE("/decisions/:decision_id", handlerV1.DeleteDecisionById) 71 } 72 73 apiKeyAuth := groupV1.Group("") 74 apiKeyAuth.Use(handlerV1.Middlewares.APIKey.MiddlewareFunc(), v1.PrometheusBouncersMiddleware()) 75 { 76 apiKeyAuth.GET("/decisions", handlerV1.GetDecision) 77 apiKeyAuth.HEAD("/decisions", handlerV1.GetDecision) 78 apiKeyAuth.GET("/decisions/stream", handlerV1.StreamDecision) 79 apiKeyAuth.HEAD("/decisions/stream", handlerV1.StreamDecision) 80 } 81 82 return nil 83 } 84 85 /* 86 func (c *Controller) NewV2() error { 87 handlerV2, err := v2.New(c.DBClient, c.Ectx) 88 if err != nil { 89 return err 90 } 91 92 v2 := c.Router.Group("/v2") 93 v2.POST("/watchers", handlerV2.CreateMachine) 94 v2.POST("/watchers/login", handlerV2.Middlewares.JWT.Middleware.LoginHandler) 95 96 jwtAuth := v2.Group("") 97 jwtAuth.GET("/refresh_token", handlerV2.Middlewares.JWT.Middleware.RefreshHandler) 98 jwtAuth.Use(handlerV2.Middlewares.JWT.Middleware.MiddlewareFunc()) 99 { 100 jwtAuth.POST("/alerts", handlerV2.CreateAlert) 101 jwtAuth.GET("/alerts", handlerV2.FindAlerts) 102 jwtAuth.DELETE("/alerts", handlerV2.DeleteAlerts) 103 jwtAuth.DELETE("/decisions", handlerV2.DeleteDecisions) 104 jwtAuth.DELETE("/decisions/:decision_id", handlerV2.DeleteDecisionById) 105 } 106 107 apiKeyAuth := v2.Group("") 108 apiKeyAuth.Use(handlerV2.Middlewares.APIKey.MiddlewareFuncV2()) 109 { 110 apiKeyAuth.GET("/decisions", handlerV2.GetDecision) 111 apiKeyAuth.GET("/decisions/stream", handlerV2.StreamDecision) 112 } 113 114 return nil 115 } 116 117 */