| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- // Copyright 2020 Frédéric Guillot. All rights reserved.
- // Use of this source code is governed by the Apache 2.0
- // license that can be found in the LICENSE file.
- package proxy // import "miniflux.app/proxy"
- import (
- "crypto/hmac"
- "crypto/sha256"
- "encoding/base64"
- "net/url"
- "path"
- "miniflux.app/http/route"
- "github.com/gorilla/mux"
- "miniflux.app/config"
- )
- // ProxifyURL generates a relative URL for a proxified resource.
- func ProxifyURL(router *mux.Router, link string) string {
- if link != "" {
- proxyImageUrl := config.Opts.ProxyImageUrl()
- if proxyImageUrl == "" {
- mac := hmac.New(sha256.New, config.Opts.ProxyPrivateKey())
- mac.Write([]byte(link))
- digest := mac.Sum(nil)
- return route.Path(router, "proxy", "encodedDigest", base64.URLEncoding.EncodeToString(digest), "encodedURL", base64.URLEncoding.EncodeToString([]byte(link)))
- }
- proxyUrl, err := url.Parse(proxyImageUrl)
- if err != nil {
- return ""
- }
- proxyUrl.Path = path.Join(proxyUrl.Path, base64.URLEncoding.EncodeToString([]byte(link)))
- return proxyUrl.String()
- }
- return ""
- }
- // AbsoluteProxifyURL generates an absolute URL for a proxified resource.
- func AbsoluteProxifyURL(router *mux.Router, host, link string) string {
- if link != "" {
- proxyImageUrl := config.Opts.ProxyImageUrl()
- if proxyImageUrl == "" {
- mac := hmac.New(sha256.New, config.Opts.ProxyPrivateKey())
- mac.Write([]byte(link))
- digest := mac.Sum(nil)
- path := route.Path(router, "proxy", "encodedDigest", base64.URLEncoding.EncodeToString(digest), "encodedURL", base64.URLEncoding.EncodeToString([]byte(link)))
- if config.Opts.HTTPS {
- return "https://" + host + path
- } else {
- return "http://" + host + path
- }
- }
- proxyUrl, err := url.Parse(proxyImageUrl)
- if err != nil {
- return ""
- }
- proxyUrl.Path = path.Join(proxyUrl.Path, base64.URLEncoding.EncodeToString([]byte(link)))
- return proxyUrl.String()
- }
- return ""
- }
|