Change the context root path to pithos and add a date field for testing signature...
[pithos] / gss / test / rest-api-test.html
1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r
2 <html>\r
3 <head>\r
4 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">\r
5 <title>REST API Test page</title>\r
6 <script type="text/javascript" src="http://pajhome.org.uk/crypt/md5/sha1.js"></script>\r
7 <script type="text/javascript">\r
8 function send() {\r
9         // Use strict RFC compliance\r
10         b64pad = "=";\r
11 \r
12         var resource = document.getElementById("resource").value;\r
13         var user = document.getElementById("user").value;\r
14         var token = document.getElementById("token").value;\r
15         var method = document.getElementById("method").value;\r
16         var modified = document.getElementById("modified").value;\r
17         var file = document.getElementById("file").value;\r
18         var form = document.getElementById("form").value;\r
19         var update = document.getElementById("update").value;\r
20         var timestamp = document.getElementById('timestamp').value;\r
21         var formfile = document.getElementById('formfile');\r
22         var authparam = document.getElementById('authparam');\r
23         var params = null;\r
24         var now = timestamp? timestamp: (new Date()).toUTCString();\r
25         var q = resource.indexOf('?');\r
26         var res = q == -1? resource: resource.substring(0, q);\r
27         var data = method + now + res;\r
28         var sig = b64_hmac_sha1(atob(token), data);\r
29         if (form)\r
30                 params = form;\r
31         else if (update)\r
32                 params = update;\r
33 \r
34         // Browser upload with POST.\r
35         if (formfile.value) {\r
36                 var formdate = document.getElementById('formdate');\r
37                 var formauth = document.getElementById('formauth');\r
38                 res = resource+formfile.value;\r
39                 data = 'POST' + now + encodeURI(decodeURI(res));\r
40                 sig = b64_hmac_sha1(atob(token), data);\r
41                 formauth.value = user + " " + sig;\r
42                 formdate.value = now;\r
43                 var upload = document.upload;\r
44                 upload.action = '/gss/rest'+res;\r
45                 upload.submit();\r
46                 return;\r
47         }\r
48 \r
49         // All other API operations.\r
50         var req = new XMLHttpRequest();\r
51         var requesturi = '/pithos/rest'+resource;\r
52         if (authparam.checked)\r
53                 requesturi += '?Date=' + now + '&Authorization=' +user + " " + sig;\r
54         req.open(method, requesturi, true);\r
55         req.onreadystatechange = function (event) {\r
56                 if (req.readyState == 4) {\r
57                         if(req.status == 200) {\r
58                                 var result = document.getElementById("result");\r
59                                 result.innerHTML = "<pre>"+req.getAllResponseHeaders()+"\n"+req.responseText+"</pre>";\r
60                     } else {\r
61                         var result = document.getElementById("result");\r
62                                 result.innerHTML = "<span style='color: red'>"+req.status+": "+req.statusText+"</span>"+"<pre>"+req.getAllResponseHeaders()+"</pre>";\r
63                     }\r
64                 }\r
65         }\r
66         if (!authparam.checked) {\r
67                 req.setRequestHeader("Authorization", user + " " + sig);\r
68                 req.setRequestHeader("X-GSS-Date", now);\r
69         }\r
70         if (modified)\r
71                 req.setRequestHeader("If-Modified-Since", modified);\r
72 \r
73         if (file) {\r
74                 req.setRequestHeader("Content-Type", "text/plain");\r
75                 req.setRequestHeader("Content-Length", file.length);\r
76         } else if (form) {\r
77                 req.setRequestHeader("Content-Length", params.length);\r
78             req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;");\r
79         } else if (update) {\r
80                 req.setRequestHeader("Content-Length", params.length);\r
81             req.setRequestHeader("Content-Type", "application/json;");\r
82         }\r
83 \r
84         if (!file)\r
85                 req.send(params);\r
86         else\r
87                 req.send(file);\r
88 }\r
89 </script>\r
90 </head>\r
91 <body>\r
92 <table>\r
93 <tr><td>Resource </td><td><input id="resource" size="100"></td></tr>\r
94 <tr><td>Method </td><td><input id="method"></td></tr>\r
95 <tr><td>Username </td><td><input id="user"></td></tr>\r
96 <tr><td>Auth token </td><td><input id="token" size="100"></td></tr>\r
97 <tr><td>If-Modified-Since </td><td><input id="modified" size="100"></td></tr>\r
98 <tr><td>File contents </td><td><input id="file" size="100"></td></tr>\r
99 <tr><td>POST form </td><td><input id="form"></td></tr>\r
100 <tr><td>POST JSON update </td><td><input id="update"></td></tr>\r
101 <tr><td>Autorization in parameters </td><td><input id="authparam" type="checkbox"></td></tr>\r
102 <tr><td>Date (optional) </td><td><input id="timestamp"></td></tr>\r
103 </table>\r
104 <form id="upload" name="upload" method="post" action="/gss/rest" enctype="multipart/form-data">\r
105 <input id="formdate" type="hidden" name="Date" value="">\r
106 <input id="formauth" type="hidden" name="Authorization" value="">\r
107 File upload<input id="formfile" type="file" name="formfile">\r
108 <input type="submit">\r
109 </form>\r
110 <button onclick="send()">send</button><br>\r
111 <div id="result" style="width: 200px; height: 200px"></div>\r
112 </body>\r
113 </html>