-
Notifications
You must be signed in to change notification settings - Fork 0
/
option_object.go
71 lines (66 loc) · 1.98 KB
/
option_object.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
/**
* Author: CZ cz.theng@gmail.com
*/
package cors
import (
"github.com/cz-it/aliyun-oss-golang-sdk/ossapi"
"path"
"strconv"
)
// OptionReqInfo is Reqinfo
type OptionReqInfo struct {
Origin string
Method string
Headers string
}
// OptionRspInfo is Resoponse info
type OptionRspInfo struct {
AllowOrigin string
AllowMethods string
AllowHeaders string
ExposeHeaders string
MaxAge uint64
}
// Option Query CORS permission of bucket
// @param objName : object to access
// @param bucketName: bucket to access
// @param location: bucket's location
// @param optionInfo : CORS requet
// @return rstInfo: CORS permisson
// @return ossapiError : nil on success
func Option(objName, bucketName, location string, optionInfo *OptionReqInfo) (rstInfo *OptionRspInfo, ossapiError *ossapi.Error) {
host := bucketName + "." + location + ".aliyuncs.com"
resource := path.Join("/", bucketName, objName)
headers := make(map[string]string)
if optionInfo != nil {
headers["Origin"] = optionInfo.Origin
headers["Access-Control-Request-Method"] = optionInfo.Method
headers["Access-Control-Request-Headers"] = optionInfo.Headers
}
req := &ossapi.Request{
ExtHeader: headers,
Host: host,
Path: "/" + objName,
Method: "OPTIONS",
Resource: resource}
rsp, err := req.Send()
if err != nil {
if _, ok := err.(*ossapi.Error); !ok {
ossapi.Logger.Error("GetService's Send Error:%s", err.Error())
ossapiError = ossapi.OSSAPIError
return
}
}
if rsp.Result != ossapi.ErrSUCC {
ossapiError = err.(*ossapi.Error)
return
}
rstInfo = new(OptionRspInfo)
rstInfo.AllowOrigin = rsp.HTTPRsp.Header["Access-Control-Allow-Origin"][0]
rstInfo.AllowMethods = rsp.HTTPRsp.Header["Access-Control-Allow-Methods"][0]
rstInfo.ExposeHeaders = rsp.HTTPRsp.Header["Access-Control-Expose-Headers"][0]
rstInfo.AllowHeaders = rsp.HTTPRsp.Header["Access-Control-Allow-Headers"][0]
age, _ := strconv.Atoi(rsp.HTTPRsp.Header["Access-Control-Max-Age"][0])
rstInfo.MaxAge = uint64(age)
return
}