1 Star 0 Fork 0

李兴武 / minio

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
crossdomain-xml-handler.go 3.27 KB
一键复制 编辑 原始数据 按行查看 历史
李兴武 提交于 2023-12-28 17:26 . init
// Copyright (c) 2015-2021 MinIO, Inc.
//
// This file is part of MinIO Object Storage stack
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
package cmd
import (
"bytes"
"github.com/minio/minio/internal/config"
"net/http"
"os"
"strings"
"text/template"
)
// Standard cross domain policy information located at https://s3.amazonaws.com/crossdomain.xml
const crossDomainXML = `<?xml version="1.0"?><!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd"><cross-domain-policy><allow-access-from domain="*" secure="false" /></cross-domain-policy>`
// 自定义crossdomain.xml
const crossDomainXMLPrefix = `<?xml version="1.0"?><!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd"><cross-domain-policy>`
const crossDomainXMLSuffix = `</cross-domain-policy>`
const allowAccessFromTemplate = `<allow-access-from domain="{{.Domain}}" secure="false" />`
// Standard path where an app would find cross domain policy information.
const crossDomainXMLEntity = "/crossdomain.xml"
// A cross-domain policy file is an XML document that grants a web client, such as Adobe Flash Player
// or Adobe Acrobat (though not necessarily limited to these), permission to handle data across domains.
// When clients request content hosted on a particular source domain and that content make requests
// directed towards a domain other than its own, the remote domain needs to host a cross-domain
// policy file that grants access to the source domain, allowing the client to continue the transaction.
func setCrossDomainPolicyMiddleware(h http.Handler) http.Handler {
// get env MINIO_ALLOW_ACCESS_FROM_DOMAIN
allowAccessFromDomain := os.Getenv(config.EnvMinIOAllowAccessFromDomain)
if allowAccessFromDomain == "" {
allowAccessFromDomain = "*"
}
// logger.Info("MINIO_ALLOW_ACCESS_FROM_DOMAIN=%s", allowAccessFromDomain)
// 如果配置了多个就需要解析一下
domains := strings.Split(allowAccessFromDomain, ",")
allowAccessFrom := crossDomainXMLPrefix
for _, domain := range domains {
// fill string template
buffer := &bytes.Buffer{}
tmpl, _ := template.New("tmp").Parse(allowAccessFromTemplate)
data := struct{ Domain string }{Domain: domain}
_ = tmpl.Execute(buffer, data)
allowAccessFrom += buffer.String()
}
allowAccessFrom += crossDomainXMLSuffix
// Write to ServeHTTP
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
// Look for 'crossdomain.xml' in the incoming request.
if r.URL.Path == crossDomainXMLEntity {
// Write the standard cross domain policy xml.
w.Write([]byte(allowAccessFrom))
// Request completed, no need to serve to other handlers.
return
}
h.ServeHTTP(w, r)
})
}
1
https://gitee.com/lixingwu/minio.git
git@gitee.com:lixingwu/minio.git
lixingwu
minio
minio
master

搜索帮助