func (s *SneakerS3) Get(u *url.URL, h http.Header, _ interface{}, context *models.Context) (int, http.Header, interface{}, error) { pathName := u.Query().Get("pathName") logger := s.createLogger(context, "Get", pathName, http.StatusBadRequest) if pathName == "" { return response.NewBadRequestWithLogger(logger, ErrPathNotFound) } if !context.IsLoggedIn() { return response.NewBadRequestWithLogger(logger, models.ErrNotLoggedIn) } downArray := []string{pathName} down, err := s.Manager.Download(downArray) if err != nil { return response.NewBadRequestWithLogger(logger, err) } if down[pathName] == nil { return response.NewBadRequestWithLogger(logger, ErrPathContentNotFound) } var kv KeyValue downX := bytes.NewReader(down[pathName]) if err := json.NewDecoder(downX).Decode(&kv); err != nil { return response.NewBadRequestWithLogger(logger, err) } logger = s.createLogger(context, "Get", pathName, http.StatusOK) logger.Info("") return response.NewOK(kv) }
// Store stores the given credentials on s3 func (s *SneakerS3) Store(u *url.URL, h http.Header, kv KeyValue, context *models.Context) (int, http.Header, interface{}, error) { pathName := u.Query().Get("pathName") logger := s.createLogger(context, "Store", pathName, http.StatusBadRequest) if pathName == "" { return response.NewBadRequestWithLogger(logger, ErrPathNotFound) } if !context.IsLoggedIn() { return response.NewBadRequestWithLogger(logger, models.ErrNotLoggedIn) } if kv == nil { return response.NewBadRequestWithLogger(logger, ErrRequiredValuesNotFound) } // convert credentials to bytes byt, err := json.Marshal(kv) if err != nil { return response.NewBadRequestWithLogger(logger, err) } // bytes need to imlement io.Reader interface // then we can use struct as 2.parameter of manager.Upload function aa := bytes.NewReader(byt) // if another requeest comes to same pathName, its data will be updated. // and new incoming data is gonna override the old data err = s.Manager.Upload(pathName, aa) if err != nil { return response.NewBadRequestWithLogger(logger, err) } logger = s.createLogger(context, "Store", pathName, http.StatusOK) logger.Info("") return response.NewOK(nil) }
func (s *SneakerS3) Delete(u *url.URL, h http.Header, _ interface{}, context *models.Context) (int, http.Header, interface{}, error) { pathName := u.Query().Get("pathName") logger := s.createLogger(context, "Delete", pathName, http.StatusBadRequest) if pathName == "" { return response.NewBadRequestWithLogger(logger, ErrPathNotFound) } if !context.IsLoggedIn() { return response.NewBadRequestWithLogger(logger, models.ErrNotLoggedIn) } err := s.Manager.Rm(pathName) if err != nil { return response.NewBadRequestWithLogger(logger, err) } logger = s.createLogger(context, "Delete", pathName, http.StatusAccepted) logger.Info("") return response.NewDeleted() }