package api import ( "os" "path" "net/http" ) // Responsible for serving up static images / videos func (api *API) mediaHandler(w http.ResponseWriter, r *http.Request) { if r.Method != http.MethodGet { w.WriteHeader(http.StatusMethodNotAllowed) return } if path.Dir(r.URL.Path) != "/media" { w.WriteHeader(http.StatusMethodNotAllowed) return } // Acquire Width & Height Parameters query := r.URL.Query() width := query["width"] height := query["height"] _ = width _ = height // TODO: Caching & Resizing // - If both, force resize with new scale // - If one, scale resize proportionally // Pull out UUIDs reqInfo := r.Context().Value("uuids").(map[string]string) uid := reqInfo["uid"] // Derive Path fileName := path.Base(r.URL.Path) folderPath := path.Join("/" + api.Config.DataPath + "/media/" + uid) mediaPath := path.Join(folderPath + "/" + fileName) // Check if File Exists _, err := os.Stat(mediaPath) if os.IsNotExist(err) { // TODO: Different HTTP Response Code? w.WriteHeader(http.StatusMethodNotAllowed) return } http.ServeFile(w, r, mediaPath) }