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  */