Package updates, added test server
[pithos-ms-client] / trunk / Pithos.TestServer / RootController.cs
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Net;
5 using System.Net.Http;
6 using System.Net.Http.Formatting;
7 using System.Net.Http.Headers;
8 using System.Text;
9 using System.Web.Http;
10
11 namespace Pithos.TestServer
12 {
13     public class RootController : ApiController
14     {
15         // GET api/<controller>
16         public HttpResponseMessage Get()
17         {
18             var user = Request.Headers.GetValues("X-Auth-User").FirstOrDefault();
19             var key = Request.Headers.GetValues("X-Auth-Key").FirstOrDefault();
20
21             var resp = new HttpResponseMessage();
22             resp.StatusCode = HttpStatusCode.NoContent;
23             resp.Headers.Add("X-Auth-Token",key);
24             resp.Headers.Vary.Add("Accept-Language");
25             var uri = new Uri(Request.RequestUri, user);
26             resp.Headers.Add("X-Storage-Url",uri.ToString() );
27             return resp;
28         }
29
30         public HttpResponseMessage GetContainers(string account,string format="json")
31         {
32             var token = Request.Headers.GetValues("X-Auth-Token").FirstOrDefault();
33
34             var resp = new HttpResponseMessage();
35             resp.StatusCode = HttpStatusCode.OK;
36             resp.Headers.Add("X-Account-Policy-Quota","53687091200");
37             resp.Headers.Add("X-Account-Policy-Versioning","auto");
38             resp.Headers.Add("X-Account-Bytes-Used","10293909204");
39             resp.Headers.Add("X-Account-Containe-Count","2");
40             resp.Headers.Vary.Add("Accept-Language");
41
42             var containerInfos = new[]
43                 {
44                     new ContainerInfo{
45                         count= 0,
46                         last_modified= "2013-03-01T17:34:50.658206+00:00", 
47                         bytes= 122996889, name= "pithos",
48                         x_container_policy=new PolicyInfo
49                             {
50                                 quota= 53687091200,
51                                        versioning= "auto"
52                             }
53                     },                     
54                 };
55
56             resp.Content=new ObjectContent(typeof(ContainerInfo[]),containerInfos,format=="json"?(MediaTypeFormatter) new JsonMediaTypeFormatter():new XmlMediaTypeFormatter());
57
58             return resp;
59         }  
60         
61         public HttpResponseMessage HeadAccount(string account,string format="json")
62         {
63             var token = Request.Headers.GetValues("X-Auth-Token").FirstOrDefault();
64
65             var resp = new HttpResponseMessage();
66             resp.StatusCode = HttpStatusCode.NoContent;
67             resp.Headers.Add("X-Account-Policy-Quota","53687091200");
68             resp.Headers.Add("X-Account-Policy-Versioning","auto");
69             resp.Headers.Add("X-Account-Bytes-Used","10293909204");
70             resp.Headers.Add("X-Account-Container-Count","2");
71
72
73             resp.Headers.Vary.Add("Accept-Language");
74
75            
76             return resp;
77         }
78
79         public HttpResponseMessage HeadContainer(string account, string container, string format = "json")
80         {
81             var token = Request.Headers.GetValues("X-Auth-Token").FirstOrDefault();
82
83             var resp = new HttpResponseMessage();
84
85             resp.Headers.Add("X-Container-Policy-Quota", "53687091200");
86             resp.Headers.Add("X-Container-Object-Count", "0");
87             resp.Headers.Add("X-Container-Block-Hash", "sha256");
88             resp.Headers.Add("X-Container-Block-Size", "4194304");
89             resp.Headers.Add("X-Container-Bytes-Used", "122996889");
90             resp.Headers.Add("X-Container-Policy-Versioning", "auto");
91
92             resp.Headers.Vary.Add("Accept-Language");
93             return resp;
94         }
95
96         public HttpResponseMessage GetObjects(string account, string container,string format="json")
97         {
98             var token = Request.Headers.GetValues("X-Auth-Token").FirstOrDefault();
99
100             var resp = new HttpResponseMessage();
101
102             resp.Headers.Add("X-Container-Policy-Quota", "53687091200");
103             resp.Headers.Add("X-Container-Object-Count", "0");
104             resp.Headers.Add("X-Container-Block-Hash", "sha256");
105             resp.Headers.Add("X-Container-Block-Size", "4194304");
106             resp.Headers.Add("X-Container-Bytes-Used", "122996889");
107             resp.Headers.Add("X-Container-Policy-Versioning", "auto");
108
109             resp.Headers.Vary.Add("Accept-Language");
110
111             var objectInfos = new[]
112                 {
113                     new ObjectInfo{
114                         bytes= 0,
115                         content_type="application/directory",
116                         hash="d41d8cd98f00b204e9800998ecf8427e",
117                         last_modified= "2013-03-01T17:34:50.658206+00:00", 
118                         name="22",
119                         x_object_hash="e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
120                         x_object_modified_by="b5ab920f-91dd-4d9f-af6e-f73dd1b135ed",
121                         x_object_uuid="91bfe183-8d48-43f1-9cb6-0d0ee112551d",
122                         x_object_version=398456,
123                         x_object_version_timestamp=(decimal) 1352809430.578321
124                     },                     
125                 };
126
127             resp.Content = new ObjectContent(typeof(ObjectInfo[]), objectInfos, format == "json" ? (MediaTypeFormatter)new JsonMediaTypeFormatter() : new XmlMediaTypeFormatter());
128
129
130             return resp;
131         }
132         
133
134
135     }
136
137     public class ObjectInfo
138     {
139         public decimal x_object_version_timestamp { get; set; }
140         public long bytes { get; set; }
141
142         public string content_type { get; set; }
143
144         public string hash { get; set; }
145
146         public string last_modified { get; set; }
147
148         public string name { get; set; }
149
150         public string x_object_hash { get; set; }
151
152         public string x_object_modified_by { get; set; }
153
154         public string x_object_uuid { get; set; }
155
156         public long x_object_version { get; set; }
157     }
158
159     public class ContainerInfo
160     {
161         public long bytes { get; set; }
162         public long count { get; set; }
163         public string last_modified { get; set; }
164         public string name { get; set; }
165         public PolicyInfo x_container_policy { get; set; }
166     }
167
168     public class PolicyInfo
169     {
170
171         public long quota { get; set; }
172         public string versioning { get; set; }
173     }
174
175
176 }