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 }