github.com/hellofresh/janus@v0.0.0-20230925145208-ce8de8183c67/pkg/plugin/basic/setup.go (about)

     1  package basic
     2  
     3  import (
     4  	"errors"
     5  
     6  	"github.com/hellofresh/janus/pkg/plugin"
     7  	"github.com/hellofresh/janus/pkg/proxy"
     8  	"github.com/hellofresh/janus/pkg/router"
     9  	log "github.com/sirupsen/logrus"
    10  )
    11  
    12  var (
    13  	repo        Repository
    14  	adminRouter router.Router
    15  )
    16  
    17  func init() {
    18  	plugin.RegisterEventHook(plugin.StartupEvent, onStartup)
    19  	plugin.RegisterEventHook(plugin.AdminAPIStartupEvent, onAdminAPIStartup)
    20  
    21  	plugin.RegisterPlugin("basic_auth", plugin.Plugin{
    22  		Action: setupBasicAuth,
    23  	})
    24  }
    25  
    26  func setupBasicAuth(def *proxy.RouterDefinition, rawConfig plugin.Config) error {
    27  	if repo == nil {
    28  		return errors.New("the repository was not set by onStartup event")
    29  	}
    30  
    31  	def.AddMiddleware(NewBasicAuth(repo))
    32  	return nil
    33  }
    34  
    35  func onAdminAPIStartup(event interface{}) error {
    36  	e, ok := event.(plugin.OnAdminAPIStartup)
    37  	if !ok {
    38  		return errors.New("could not convert event to admin startup type")
    39  	}
    40  
    41  	adminRouter = e.Router
    42  	return nil
    43  }
    44  
    45  func onStartup(event interface{}) error {
    46  	var err error
    47  
    48  	e, ok := event.(plugin.OnStartup)
    49  	if !ok {
    50  		return errors.New("could not convert event to startup type")
    51  	}
    52  
    53  	if e.MongoDB != nil {
    54  		log.Debug("Mongo DB is set, using mongo repository for basic auth plugin")
    55  
    56  		repo, err = NewMongoRepository(e.MongoDB)
    57  		if err != nil {
    58  			return err
    59  		}
    60  	} else if e.Cassandra != nil {
    61  		log.Debugf("Cassandra is set, using cassandra repository for basic auth plugin")
    62  
    63  		repo, err = NewCassandraRepository(e.Cassandra)
    64  		if err != nil {
    65  			log.Errorf("error getting cassandra repo: %v", err)
    66  			return err
    67  		}
    68  	} else {
    69  		log.Debug("No DB set, using memory repository for basic auth plugin")
    70  
    71  		repo = NewInMemoryRepository()
    72  	}
    73  
    74  	if adminRouter == nil {
    75  		return ErrInvalidAdminRouter
    76  	}
    77  
    78  	handlers := NewHandler(repo)
    79  	group := adminRouter.Group("/credentials/basic_auth")
    80  	{
    81  		group.GET("/", handlers.Index())
    82  		group.POST("/", handlers.Create())
    83  		group.GET("/{username}", handlers.Show())
    84  		group.PUT("/{username}", handlers.Update())
    85  		group.DELETE("/{username}", handlers.Delete())
    86  	}
    87  
    88  	return nil
    89  }