16
16
17
17
package cmd
18
18
19
- import (
20
- router "github.com/gorilla/mux"
21
- )
19
+ import router "github.com/gorilla/mux"
20
+ import "net/http"
22
21
23
22
// objectAPIHandler implements and provides http handlers for S3 API.
24
23
type objectAPIHandlers struct {
@@ -34,70 +33,75 @@ func registerAPIRouter(mux *router.Router) {
34
33
35
34
// API Router
36
35
apiRouter := mux .NewRoute ().PathPrefix ("/" ).Subrouter ()
36
+ var routers []* router.Router
37
+ if globalDomainName != "" {
38
+ routers = append (routers , apiRouter .Host ("{bucket:.+}." + globalDomainName ).Subrouter ())
39
+ }
40
+ routers = append (routers , apiRouter .PathPrefix ("/{bucket}" ).Subrouter ())
37
41
38
- // Bucket router
39
- bucket := apiRouter .PathPrefix ("/{bucket}" ).Subrouter ()
40
-
41
- /// Object operations
42
-
43
- // HeadObject
44
- bucket .Methods ("HEAD" ).Path ("/{object:.+}" ).HandlerFunc (httpTraceAll (api .HeadObjectHandler ))
45
- // CopyObjectPart
46
- bucket .Methods ("PUT" ).Path ("/{object:.+}" ).HeadersRegexp ("X-Amz-Copy-Source" , ".*?(\\ /|%2F).*?" ).HandlerFunc (httpTraceAll (api .CopyObjectPartHandler )).Queries ("partNumber" , "{partNumber:[0-9]+}" , "uploadId" , "{uploadId:.*}" )
47
- // PutObjectPart
48
- bucket .Methods ("PUT" ).Path ("/{object:.+}" ).HandlerFunc (httpTraceHdrs (api .PutObjectPartHandler )).Queries ("partNumber" , "{partNumber:[0-9]+}" , "uploadId" , "{uploadId:.*}" )
49
- // ListObjectPxarts
50
- bucket .Methods ("GET" ).Path ("/{object:.+}" ).HandlerFunc (httpTraceAll (api .ListObjectPartsHandler )).Queries ("uploadId" , "{uploadId:.*}" )
51
- // CompleteMultipartUpload
52
- bucket .Methods ("POST" ).Path ("/{object:.+}" ).HandlerFunc (httpTraceAll (api .CompleteMultipartUploadHandler )).Queries ("uploadId" , "{uploadId:.*}" )
53
- // NewMultipartUpload
54
- bucket .Methods ("POST" ).Path ("/{object:.+}" ).HandlerFunc (httpTraceAll (api .NewMultipartUploadHandler )).Queries ("uploads" , "" )
55
- // AbortMultipartUpload
56
- bucket .Methods ("DELETE" ).Path ("/{object:.+}" ).HandlerFunc (httpTraceAll (api .AbortMultipartUploadHandler )).Queries ("uploadId" , "{uploadId:.*}" )
57
- // GetObject
58
- bucket .Methods ("GET" ).Path ("/{object:.+}" ).HandlerFunc (httpTraceHdrs (api .GetObjectHandler ))
59
- // CopyObject
60
- bucket .Methods ("PUT" ).Path ("/{object:.+}" ).HeadersRegexp ("X-Amz-Copy-Source" , ".*?(\\ /|%2F).*?" ).HandlerFunc (httpTraceAll (api .CopyObjectHandler ))
61
- // PutObject
62
- bucket .Methods ("PUT" ).Path ("/{object:.+}" ).HandlerFunc (httpTraceHdrs (api .PutObjectHandler ))
63
- // DeleteObject
64
- bucket .Methods ("DELETE" ).Path ("/{object:.+}" ).HandlerFunc (httpTraceAll (api .DeleteObjectHandler ))
65
-
66
- /// Bucket operations
42
+ for _ , bucket := range routers {
43
+ // Object operations
44
+ // HeadObject
45
+ bucket .Methods ("HEAD" ).Path ("/{object:.+}" ).HandlerFunc (httpTraceAll (api .HeadObjectHandler ))
46
+ // CopyObjectPart
47
+ bucket .Methods ("PUT" ).Path ("/{object:.+}" ).HeadersRegexp ("X-Amz-Copy-Source" , ".*?(\\ /|%2F).*?" ).HandlerFunc (httpTraceAll (api .CopyObjectPartHandler )).Queries ("partNumber" , "{partNumber:[0-9]+}" , "uploadId" , "{uploadId:.*}" )
48
+ // PutObjectPart
49
+ bucket .Methods ("PUT" ).Path ("/{object:.+}" ).HandlerFunc (httpTraceHdrs (api .PutObjectPartHandler )).Queries ("partNumber" , "{partNumber:[0-9]+}" , "uploadId" , "{uploadId:.*}" )
50
+ // ListObjectPxarts
51
+ bucket .Methods ("GET" ).Path ("/{object:.+}" ).HandlerFunc (httpTraceAll (api .ListObjectPartsHandler )).Queries ("uploadId" , "{uploadId:.*}" )
52
+ // CompleteMultipartUpload
53
+ bucket .Methods ("POST" ).Path ("/{object:.+}" ).HandlerFunc (httpTraceAll (api .CompleteMultipartUploadHandler )).Queries ("uploadId" , "{uploadId:.*}" )
54
+ // NewMultipartUpload
55
+ bucket .Methods ("POST" ).Path ("/{object:.+}" ).HandlerFunc (httpTraceAll (api .NewMultipartUploadHandler )).Queries ("uploads" , "" )
56
+ // AbortMultipartUpload
57
+ bucket .Methods ("DELETE" ).Path ("/{object:.+}" ).HandlerFunc (httpTraceAll (api .AbortMultipartUploadHandler )).Queries ("uploadId" , "{uploadId:.*}" )
58
+ // GetObject
59
+ bucket .Methods ("GET" ).Path ("/{object:.+}" ).HandlerFunc (httpTraceHdrs (api .GetObjectHandler ))
60
+ // CopyObject
61
+ bucket .Methods ("PUT" ).Path ("/{object:.+}" ).HeadersRegexp ("X-Amz-Copy-Source" , ".*?(\\ /|%2F).*?" ).HandlerFunc (httpTraceAll (api .CopyObjectHandler ))
62
+ // PutObject
63
+ bucket .Methods ("PUT" ).Path ("/{object:.+}" ).HandlerFunc (httpTraceHdrs (api .PutObjectHandler ))
64
+ // DeleteObject
65
+ bucket .Methods ("DELETE" ).Path ("/{object:.+}" ).HandlerFunc (httpTraceAll (api .DeleteObjectHandler ))
67
66
68
- // GetBucketLocation
69
- bucket .Methods ("GET" ).HandlerFunc (httpTraceAll (api .GetBucketLocationHandler )).Queries ("location" , "" )
70
- // GetBucketPolicy
71
- bucket .Methods ("GET" ).HandlerFunc (httpTraceAll (api .GetBucketPolicyHandler )).Queries ("policy" , "" )
72
- // GetBucketNotification
73
- bucket .Methods ("GET" ).HandlerFunc (httpTraceAll (api .GetBucketNotificationHandler )).Queries ("notification" , "" )
74
- // ListenBucketNotification
75
- bucket .Methods ("GET" ).HandlerFunc (httpTraceAll (api .ListenBucketNotificationHandler )).Queries ("events" , "{events:.*}" )
76
- // ListMultipartUploads
77
- bucket .Methods ("GET" ).HandlerFunc (httpTraceAll (api .ListMultipartUploadsHandler )).Queries ("uploads" , "" )
78
- // ListObjectsV2
79
- bucket .Methods ("GET" ).HandlerFunc (httpTraceAll (api .ListObjectsV2Handler )).Queries ("list-type" , "2" )
80
- // ListObjectsV1 (Legacy)
81
- bucket .Methods ("GET" ).HandlerFunc (httpTraceAll (api .ListObjectsV1Handler ))
82
- // PutBucketPolicy
83
- bucket .Methods ("PUT" ).HandlerFunc (httpTraceAll (api .PutBucketPolicyHandler )).Queries ("policy" , "" )
84
- // PutBucketNotification
85
- bucket .Methods ("PUT" ).HandlerFunc (httpTraceAll (api .PutBucketNotificationHandler )).Queries ("notification" , "" )
86
- // PutBucket
87
- bucket .Methods ("PUT" ).HandlerFunc (httpTraceAll (api .PutBucketHandler ))
88
- // HeadBucket
89
- bucket .Methods ("HEAD" ).HandlerFunc (httpTraceAll (api .HeadBucketHandler ))
90
- // PostPolicy
91
- bucket .Methods ("POST" ).HeadersRegexp ("Content-Type" , "multipart/form-data*" ).HandlerFunc (httpTraceAll (api .PostPolicyBucketHandler ))
92
- // DeleteMultipleObjects
93
- bucket .Methods ("POST" ).HandlerFunc (httpTraceAll (api .DeleteMultipleObjectsHandler ))
94
- // DeleteBucketPolicy
95
- bucket .Methods ("DELETE" ).HandlerFunc (httpTraceAll (api .DeleteBucketPolicyHandler )).Queries ("policy" , "" )
96
- // DeleteBucket
97
- bucket .Methods ("DELETE" ).HandlerFunc (httpTraceAll (api .DeleteBucketHandler ))
67
+ /// Bucket operations
68
+ // GetBucketLocation
69
+ bucket .Methods ("GET" ).HandlerFunc (httpTraceAll (api .GetBucketLocationHandler )).Queries ("location" , "" )
70
+ // GetBucketPolicy
71
+ bucket .Methods ("GET" ).HandlerFunc (httpTraceAll (api .GetBucketPolicyHandler )).Queries ("policy" , "" )
72
+ // GetBucketNotification
73
+ bucket .Methods ("GET" ).HandlerFunc (httpTraceAll (api .GetBucketNotificationHandler )).Queries ("notification" , "" )
74
+ // ListenBucketNotification
75
+ bucket .Methods ("GET" ).HandlerFunc (httpTraceAll (api .ListenBucketNotificationHandler )).Queries ("events" , "{events:.*}" )
76
+ // ListMultipartUploads
77
+ bucket .Methods ("GET" ).HandlerFunc (httpTraceAll (api .ListMultipartUploadsHandler )).Queries ("uploads" , "" )
78
+ // ListObjectsV2
79
+ bucket .Methods ("GET" ).HandlerFunc (httpTraceAll (api .ListObjectsV2Handler )).Queries ("list-type" , "2" )
80
+ // ListObjectsV1 (Legacy)
81
+ bucket .Methods ("GET" ).HandlerFunc (httpTraceAll (api .ListObjectsV1Handler ))
82
+ // PutBucketPolicy
83
+ bucket .Methods ("PUT" ).HandlerFunc (httpTraceAll (api .PutBucketPolicyHandler )).Queries ("policy" , "" )
84
+ // PutBucketNotification
85
+ bucket .Methods ("PUT" ).HandlerFunc (httpTraceAll (api .PutBucketNotificationHandler )).Queries ("notification" , "" )
86
+ // PutBucket
87
+ bucket .Methods ("PUT" ).HandlerFunc (httpTraceAll (api .PutBucketHandler ))
88
+ // HeadBucket
89
+ bucket .Methods ("HEAD" ).HandlerFunc (httpTraceAll (api .HeadBucketHandler ))
90
+ // PostPolicy
91
+ bucket .Methods ("POST" ).Path ("/" ).HeadersRegexp ("Content-Type" , "multipart/form-data*" ).HandlerFunc (httpTraceAll (api .PostPolicyBucketHandler ))
92
+ // DeleteMultipleObjects
93
+ bucket .Methods ("POST" ).HandlerFunc (httpTraceAll (api .DeleteMultipleObjectsHandler )).Queries ("delete" , "" )
94
+ // DeleteBucketPolicy
95
+ bucket .Methods ("DELETE" ).HandlerFunc (httpTraceAll (api .DeleteBucketPolicyHandler )).Queries ("policy" , "" )
96
+ // DeleteBucket
97
+ bucket .Methods ("DELETE" ).HandlerFunc (httpTraceAll (api .DeleteBucketHandler ))
98
+ }
98
99
99
100
/// Root operation
100
101
101
102
// ListBuckets
102
- apiRouter .Methods ("GET" ).HandlerFunc (httpTraceAll (api .ListBucketsHandler ))
103
+ apiRouter .Methods ("GET" ).Path ("/" ).HandlerFunc (httpTraceAll (api .ListBucketsHandler ))
104
+
105
+ // If none of the routes match.
106
+ apiRouter .NotFoundHandler = http .HandlerFunc (httpTraceAll (notFoundHandler ))
103
107
}
0 commit comments