github.com/masterhung0112/hk_server/v5@v5.0.0-20220302090640-ec71aef15e1c/api4/image.go (about) 1 // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. 2 // See LICENSE.txt for license information. 3 4 package api4 5 6 import ( 7 "net/http" 8 "net/url" 9 10 "github.com/masterhung0112/hk_server/v5/model" 11 ) 12 13 func (api *API) InitImage() { 14 api.BaseRoutes.Image.Handle("", api.ApiSessionRequiredTrustRequester(getImage)).Methods("GET") 15 } 16 17 func getImage(c *Context, w http.ResponseWriter, r *http.Request) { 18 actualURL := r.URL.Query().Get("url") 19 parsedURL, err := url.Parse(actualURL) 20 if err != nil { 21 c.Err = model.NewAppError("getImage", "api.image.get.app_error", nil, err.Error(), http.StatusBadRequest) 22 return 23 } else if parsedURL.Opaque != "" { 24 c.Err = model.NewAppError("getImage", "api.image.get.app_error", nil, "", http.StatusBadRequest) 25 return 26 } 27 siteURL, err := url.Parse(*c.App.Config().ServiceSettings.SiteURL) 28 if err != nil { 29 c.Err = model.NewAppError("getImage", "model.config.is_valid.site_url.app_error", nil, err.Error(), http.StatusInternalServerError) 30 return 31 } 32 33 if parsedURL.Scheme == "" { 34 parsedURL.Scheme = siteURL.Scheme 35 } 36 if parsedURL.Host == "" { 37 parsedURL.Host = siteURL.Host 38 } 39 40 // in case image proxy is enabled and we are fetching a remote image (NOT static or served by plugins), pass request to proxy 41 if *c.App.Config().ImageProxySettings.Enable && parsedURL.Host != siteURL.Host { 42 c.App.ImageProxy().GetImage(w, r, parsedURL.String()) 43 } else { 44 http.Redirect(w, r, parsedURL.String(), http.StatusFound) 45 } 46 }