diff --git a/config/config.go b/config/config.go index b3f601d..baf5819 100644 --- a/config/config.go +++ b/config/config.go @@ -9,9 +9,9 @@ import ( // Config contains environment variables. type Config struct { - Hostname string `envconfig:"HOSTNAME"` - GCSBucket string `envconfig:"GCS_BUCKET" default:"p"` - Port string `envconfig:"PORT" default:"8000"` + Hostname string `envconfig:"HOSTNAME"` + GCSBucket string `envconfig:"GCS_BUCKET" default:"p"` + Port string `envconfig:"PORT" default:"8000"` } // LoadConfig reads environment variables, populates and returns Config. @@ -25,4 +25,4 @@ func LoadConfig() (*Config, error) { err := envconfig.Process("", &c) return &c, err -} \ No newline at end of file +} diff --git a/image/image.go b/image/image.go index 9c8ba61..77e99d9 100644 --- a/image/image.go +++ b/image/image.go @@ -6,8 +6,9 @@ import ( // MessageImage is a representation of a single image in the database type Image struct { - Path string `json:"path"` - URL string `json:"url,omitempty"` + Path string `json:"path"` + URL string `json:"url,omitempty"` + RemoteURL string `json:"remote_url"` } // GetURL gets URL of the image, also in cases where MessageImage.URL is not defined. diff --git a/server/handler/images.go b/server/handler/images.go index dd12399..3be42b6 100644 --- a/server/handler/images.go +++ b/server/handler/images.go @@ -2,26 +2,19 @@ package handler import ( "encoding/json" - "github.com/kevinmidboe/planetposen-images/util" - "strings" - - // "github.com/sirupsen/logrus" - // "encoding/json" "fmt" + "github.com/gorilla/mux" "github.com/kevinmidboe/planetposen-images/clients/gcs" "github.com/kevinmidboe/planetposen-images/image" - // "github.com/dbmedialab/dearheart/event" - // "github.com/dbmedialab/dearheart/server/internal/serverutils" - "github.com/gorilla/mux" + "github.com/kevinmidboe/planetposen-images/util" "io" "net/http" "path/filepath" - // "strconv" - // "strings" + "strings" ) // UploadImages takes a request with file form and uploads the content to GCS -func UploadImages(hostname string, gcsClient gcs.Client) http.HandlerFunc { +func UploadImages(hostname string, bucketname string, gcsClient gcs.Client) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { // Get initial protocol data ctx := r.Context() @@ -54,9 +47,12 @@ func UploadImages(hostname string, gcsClient gcs.Client) http.HandlerFunc { } finalURL := util.ImageURL(hostname, string(path)) + decodedPath, err := path.Decode() + remoteURL := util.ImageRemoteURL(bucketname, string(decodedPath)) responseStruct := image.Image{ - Path: string(path), - URL: finalURL, + Path: string(path), + URL: finalURL, + RemoteURL: remoteURL, } logger.UploadSuccessMessage(string(path), finalURL) diff --git a/server/router.go b/server/router.go index 8f09c58..49fbd33 100644 --- a/server/router.go +++ b/server/router.go @@ -10,7 +10,7 @@ func (s *Server) setupRoutes() { s.Router.HandleFunc("/_healthz", handler.Healthz).Methods("GET").Name("Health") api := s.Router.PathPrefix(v1API).Subrouter() - api.HandleFunc("/images", handler.UploadImages(s.Config.Hostname, s.GCSClient)).Methods("POST").Name("UploadImages") + api.HandleFunc("/images", handler.UploadImages(s.Config.Hostname, s.Config.GCSBucket, s.GCSClient)).Methods("POST").Name("UploadImages") api.HandleFunc("/images", handler.ListImages(s.GCSClient)).Methods("GET").Name("ListImages") // Raw image fetcher diff --git a/util/geturl.go b/util/geturl.go index 4f14e28..813bca3 100644 --- a/util/geturl.go +++ b/util/geturl.go @@ -1,8 +1,15 @@ package util -import "fmt" +import ( + "fmt" +) // ImageURL creates imageURL from hostname and image name func ImageURL(hostname, name string) string { return fmt.Sprintf("https://%s/api/v1/images/%s", hostname, name) } + +// ImageRemoteURL creates imageURL to bucket file +func ImageRemoteURL(bucketname string, path string) string { + return fmt.Sprintf("https://storage.googleapis.com/%s/%s", bucketname, path) +}