| 
									
										
										
										
											2015-02-24 08:46:48 +08:00
										 |  |  | /* | 
					
						
							| 
									
										
										
										
											2015-03-20 05:35:50 +08:00
										 |  |  |  * Minimalist Object Storage, (C) 2015 Minio, Inc. | 
					
						
							| 
									
										
										
										
											2015-02-24 08:46:48 +08:00
										 |  |  |  * | 
					
						
							|  |  |  |  * Licensed under the Apache License, Version 2.0 (the "License"); | 
					
						
							|  |  |  |  * you may not use this file except in compliance with the License. | 
					
						
							|  |  |  |  * You may obtain a copy of the License at | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  *     http://www.apache.org/licenses/LICENSE-2.0
 | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Unless required by applicable law or agreed to in writing, software | 
					
						
							|  |  |  |  * distributed under the License is distributed on an "AS IS" BASIS, | 
					
						
							|  |  |  |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
					
						
							|  |  |  |  * See the License for the specific language governing permissions and | 
					
						
							|  |  |  |  * limitations under the License. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-19 08:49:33 +08:00
										 |  |  | package api | 
					
						
							| 
									
										
										
										
											2015-02-16 09:03:27 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							| 
									
										
										
										
											2015-02-28 09:50:55 +08:00
										 |  |  | 	"sort" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-09 07:28:14 +08:00
										 |  |  | 	"github.com/minio-io/minio/pkg/storage/drivers" | 
					
						
							| 
									
										
										
										
											2015-02-16 09:03:27 +08:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-24 08:46:48 +08:00
										 |  |  | // Reply date format
 | 
					
						
							|  |  |  | const ( | 
					
						
							| 
									
										
										
										
											2015-03-10 16:44:55 +08:00
										 |  |  | 	iso8601Format = "2006-01-02T15:04:05.000Z" | 
					
						
							| 
									
										
										
										
											2015-02-24 08:46:48 +08:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // takes an array of Bucketmetadata information for serialization
 | 
					
						
							|  |  |  | // input:
 | 
					
						
							|  |  |  | // array of bucket metadata
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // output:
 | 
					
						
							|  |  |  | // populated struct that can be serialized to match xml and json api spec output
 | 
					
						
							| 
									
										
										
										
											2015-03-24 11:40:21 +08:00
										 |  |  | func generateBucketsListResult(buckets []drivers.BucketMetadata) BucketListResponse { | 
					
						
							| 
									
										
										
										
											2015-02-16 09:03:27 +08:00
										 |  |  | 	var listbuckets []*Bucket | 
					
						
							|  |  |  | 	var data = BucketListResponse{} | 
					
						
							|  |  |  | 	var owner = Owner{} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	owner.ID = "minio" | 
					
						
							|  |  |  | 	owner.DisplayName = "minio" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	for _, bucket := range buckets { | 
					
						
							|  |  |  | 		var listbucket = &Bucket{} | 
					
						
							|  |  |  | 		listbucket.Name = bucket.Name | 
					
						
							| 
									
										
										
										
											2015-03-10 16:44:55 +08:00
										 |  |  | 		listbucket.CreationDate = bucket.Created.Format(iso8601Format) | 
					
						
							| 
									
										
										
										
											2015-02-16 09:03:27 +08:00
										 |  |  | 		listbuckets = append(listbuckets, listbucket) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	data.Owner = owner | 
					
						
							|  |  |  | 	data.Buckets.Bucket = listbuckets | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return data | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-02 10:58:46 +08:00
										 |  |  | // itemKey
 | 
					
						
							| 
									
										
										
										
											2015-03-06 13:07:19 +08:00
										 |  |  | type itemKey []*Item | 
					
						
							| 
									
										
										
										
											2015-02-28 09:50:55 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-02 10:58:46 +08:00
										 |  |  | func (b itemKey) Len() int           { return len(b) } | 
					
						
							|  |  |  | func (b itemKey) Swap(i, j int)      { b[i], b[j] = b[j], b[i] } | 
					
						
							| 
									
										
										
										
											2015-03-06 13:07:19 +08:00
										 |  |  | func (b itemKey) Less(i, j int) bool { return b[i].Key < b[j].Key } | 
					
						
							| 
									
										
										
										
											2015-02-28 09:50:55 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-16 09:03:27 +08:00
										 |  |  | // takes a set of objects and prepares the objects for serialization
 | 
					
						
							|  |  |  | // input:
 | 
					
						
							|  |  |  | // bucket name
 | 
					
						
							|  |  |  | // array of object metadata
 | 
					
						
							|  |  |  | // results truncated flag
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // output:
 | 
					
						
							|  |  |  | // populated struct that can be serialized to match xml and json api spec output
 | 
					
						
							| 
									
										
										
										
											2015-03-24 11:40:21 +08:00
										 |  |  | func generateObjectsListResult(bucket string, objects []drivers.ObjectMetadata, bucketResources drivers.BucketResourcesMetadata) ObjectListResponse { | 
					
						
							| 
									
										
										
										
											2015-02-16 09:03:27 +08:00
										 |  |  | 	var contents []*Item | 
					
						
							| 
									
										
										
										
											2015-03-01 06:44:26 +08:00
										 |  |  | 	var prefixes []*Prefix | 
					
						
							| 
									
										
										
										
											2015-02-16 09:03:27 +08:00
										 |  |  | 	var owner = Owner{} | 
					
						
							|  |  |  | 	var data = ObjectListResponse{} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	owner.ID = "minio" | 
					
						
							|  |  |  | 	owner.DisplayName = "minio" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	for _, object := range objects { | 
					
						
							|  |  |  | 		var content = &Item{} | 
					
						
							| 
									
										
										
										
											2015-03-01 06:44:26 +08:00
										 |  |  | 		if object.Key == "" { | 
					
						
							|  |  |  | 			continue | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2015-02-16 09:03:27 +08:00
										 |  |  | 		content.Key = object.Key | 
					
						
							| 
									
										
										
										
											2015-03-10 16:44:55 +08:00
										 |  |  | 		content.LastModified = object.Created.Format(iso8601Format) | 
					
						
							| 
									
										
										
										
											2015-03-17 09:38:42 +08:00
										 |  |  | 		content.ETag = object.Md5 | 
					
						
							| 
									
										
										
										
											2015-02-16 09:03:27 +08:00
										 |  |  | 		content.Size = object.Size | 
					
						
							|  |  |  | 		content.StorageClass = "STANDARD" | 
					
						
							|  |  |  | 		content.Owner = owner | 
					
						
							|  |  |  | 		contents = append(contents, content) | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-03-06 13:07:19 +08:00
										 |  |  | 	sort.Sort(itemKey(contents)) | 
					
						
							| 
									
										
										
										
											2015-02-16 09:03:27 +08:00
										 |  |  | 	data.Name = bucket | 
					
						
							|  |  |  | 	data.Contents = contents | 
					
						
							| 
									
										
										
										
											2015-03-01 06:44:26 +08:00
										 |  |  | 	data.MaxKeys = bucketResources.Maxkeys | 
					
						
							|  |  |  | 	data.Prefix = bucketResources.Prefix | 
					
						
							|  |  |  | 	data.Delimiter = bucketResources.Delimiter | 
					
						
							|  |  |  | 	data.Marker = bucketResources.Marker | 
					
						
							|  |  |  | 	data.IsTruncated = bucketResources.IsTruncated | 
					
						
							|  |  |  | 	for _, prefix := range bucketResources.CommonPrefixes { | 
					
						
							|  |  |  | 		var prefixItem = &Prefix{} | 
					
						
							|  |  |  | 		prefixItem.Prefix = prefix | 
					
						
							|  |  |  | 		prefixes = append(prefixes, prefixItem) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	data.CommonPrefixes = prefixes | 
					
						
							| 
									
										
										
										
											2015-02-16 09:03:27 +08:00
										 |  |  | 	return data | 
					
						
							|  |  |  | } |