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  }