github.com/hellofresh/janus@v0.0.0-20230925145208-ce8de8183c67/pkg/plugin/oauth2/handlers.go (about) 1 package oauth2 2 3 import ( 4 "encoding/json" 5 "net/http" 6 7 "github.com/hellofresh/janus/pkg/errors" 8 "github.com/hellofresh/janus/pkg/render" 9 "github.com/hellofresh/janus/pkg/router" 10 "go.opencensus.io/trace" 11 ) 12 13 // Controller is the api rest controller 14 type Controller struct { 15 repo Repository 16 } 17 18 // NewController creates a new instance of Controller 19 func NewController(repo Repository) *Controller { 20 return &Controller{repo} 21 } 22 23 // Get is the find all handler 24 func (c *Controller) Get() http.HandlerFunc { 25 return func(w http.ResponseWriter, r *http.Request) { 26 _, span := trace.StartSpan(r.Context(), "repo.FindAll") 27 data, err := c.repo.FindAll() 28 span.End() 29 30 if err != nil { 31 errors.Handler(w, r, err) 32 return 33 } 34 35 render.JSON(w, http.StatusOK, data) 36 } 37 } 38 39 // GetBy is the find by handler 40 func (c *Controller) GetBy() http.HandlerFunc { 41 return func(w http.ResponseWriter, r *http.Request) { 42 name := router.URLParam(r, "name") 43 _, span := trace.StartSpan(r.Context(), "repo.FindByName") 44 data, err := c.repo.FindByName(name) 45 span.End() 46 47 if err != nil { 48 errors.Handler(w, r, err) 49 return 50 } 51 52 render.JSON(w, http.StatusOK, data) 53 } 54 } 55 56 // PutBy is the update handler 57 func (c *Controller) PutBy() http.HandlerFunc { 58 return func(w http.ResponseWriter, r *http.Request) { 59 var err error 60 name := router.URLParam(r, "name") 61 62 _, span := trace.StartSpan(r.Context(), "repo.FindByName") 63 oauth, err := c.repo.FindByName(name) 64 span.End() 65 66 if oauth.Name == "" { 67 errors.Handler(w, r, ErrOauthServerNotFound) 68 return 69 } 70 71 if err != nil { 72 errors.Handler(w, r, err) 73 return 74 } 75 76 err = json.NewDecoder(r.Body).Decode(oauth) 77 if err != nil { 78 errors.Handler(w, r, err) 79 return 80 } 81 82 _, span = trace.StartSpan(r.Context(), "repo.Save") 83 err = c.repo.Save(oauth) 84 span.End() 85 86 if err != nil { 87 errors.Handler(w, r, errors.New(http.StatusBadRequest, err.Error())) 88 return 89 } 90 91 w.WriteHeader(http.StatusOK) 92 } 93 } 94 95 // Post is the create handler 96 func (c *Controller) Post() http.HandlerFunc { 97 return func(w http.ResponseWriter, r *http.Request) { 98 oauth := NewOAuth() 99 err := json.NewDecoder(r.Body).Decode(oauth) 100 if nil != err { 101 errors.Handler(w, r, err) 102 return 103 } 104 105 _, span := trace.StartSpan(r.Context(), "repo.Add") 106 err = c.repo.Add(oauth) 107 span.End() 108 109 if nil != err { 110 errors.Handler(w, r, err) 111 return 112 } 113 114 w.WriteHeader(http.StatusCreated) 115 } 116 } 117 118 // DeleteBy is the delete handler 119 func (c *Controller) DeleteBy() http.HandlerFunc { 120 return func(w http.ResponseWriter, r *http.Request) { 121 name := router.URLParam(r, "name") 122 123 _, span := trace.StartSpan(r.Context(), "repo.Remove") 124 err := c.repo.Remove(name) 125 span.End() 126 127 if err != nil { 128 errors.Handler(w, r, err) 129 return 130 } 131 132 w.WriteHeader(http.StatusNoContent) 133 } 134 }