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  }