Update WWW
[ubi] / qml / ubi / u1.js
1 // u1.js
2 .pragma library
3
4 Qt.include("oauth/oauth.js")
5 Qt.include("oauth/sha1.js")
6
7 function getToken(user,pass,root)
8 {
9     var url = "https://login.ubuntu.com/api/1.0/authentications?ws.op=authenticate&token_name=Ubuntu%20One%20@%20Ubi"
10     var xhr = new XMLHttpRequest();
11     if(user && pass) {
12         xhr.open("GET",url,true,user,pass);
13         xhr.onreadystatechange = function() {
14                     if(xhr.readyState===4) {
15                         //console.log(xhr.status);
16                         if(xhr.status>=400) {
17                             root.onErr(xhr.status);
18                         } else {
19                             //console.log(xhr.responseText);
20                             var resp = eval('('+xhr.responseText+')');
21                             var secrets = {
22                                 token: resp.token,
23                                 secret: resp.token_secret,
24                                 consumer_key : resp.consumer_key,
25                                 consumer_secret: resp.consumer_secret,
26                             };
27                             registerToken(secrets,user,root);
28                         }
29                     }
30                 }
31         xhr.send();
32     } else {
33         root.onErr(0);
34     }
35 }
36
37 function oAuthRequest(url,secrets,method,range)
38 {
39     var accessor = {
40         consumerKey: secrets.consumer_key,
41         consumerSecret: secrets.consumer_secret,
42         token: secrets.token,
43         tokenSecret: secrets.secret
44     };
45     if(!method) method = "GET";
46     var message = {
47         action: url,
48         method: method,
49         parameters: [
50             ["oauth_consumer_key",accessor.consumerKey],
51             ["oauth_token",accessor.token],
52             ["oauth_version","1.0"]
53         ]
54     };
55     OAuth.setTimestampAndNonce(message);
56     OAuth.SignatureMethod.sign(message,accessor);
57     var xhr = new XMLHttpRequest();
58     xhr.open(method,url,true);
59     var auth = OAuth.getAuthorizationHeader("",message.parameters);
60     xhr.setRequestHeader("Authorization",auth);
61     if(range) xhr.setRequestHeader("Range",range);
62     return xhr;
63 }
64
65 function oAuthHeader(url,secrets,method)
66 {
67     var accessor = {
68         consumerKey: secrets.consumer_key,
69         consumerSecret: secrets.consumer_secret,
70         token: secrets.token,
71         tokenSecret: secrets.secret
72     };
73     if(!method) method = "GET";
74     var message = {
75         action: url,
76         method: method,
77         parameters: [
78             ["oauth_consumer_key",accessor.consumerKey],
79             ["oauth_token",accessor.token],
80             ["oauth_version","1.0"]
81         ]
82     };
83     OAuth.setTimestampAndNonce(message);
84     OAuth.SignatureMethod.sign(message,accessor);
85     return OAuth.getAuthorizationHeader("",message.parameters);
86 }
87
88 function registerToken(secrets,user,root)
89 {
90     var url = "https://one.ubuntu.com/oauth/sso-finished-so-get-tokens/" + user;
91     var xhr = oAuthRequest(url,secrets);
92     xhr.onreadystatechange = function() {
93                 if(xhr.readyState===4) {
94                     if(xhr.status>=400) {
95                         //console.log(xhr.responseText);
96                         root.onErr(xhr.status);
97                     } else {
98                         //root.onResp(secrets);
99                         //console.log(xhr.responseText);
100                         getAccount(secrets,root);
101                     }
102                 }
103             }
104     xhr.send();
105 }
106
107 function getAccount(secrets,root)
108 {
109     var url = "https://one.ubuntu.com/api/account/";
110     var xhr = oAuthRequest(url,secrets);
111     //console.log("getAccount");
112     xhr.onreadystatechange = function() {
113                 if(xhr.readyState===4) {
114                     if(xhr.status>=400||xhr.status===0) {
115                         //console.log(xhr.status);
116                         //console.log(xhr.responseText);
117                         //console.log("getAccount: err");
118                         root.onErr(xhr.status);
119                     } else {
120                         //console.log(xhr.responseText);
121                         //console.log("getAccount: ok");
122                         var account = eval('('+xhr.responseText+')');
123                         root.onResp(secrets,account);
124                     }
125                 }
126             }
127     xhr.send();
128 }
129
130 function getFiles(secrets,rootNode,root)
131 {
132     var url = "https://one.ubuntu.com/api/file_storage/v1"
133             +encodeURI(rootNode)+"/?include_children=true";
134     //console.log("url: "+url);
135     var xhr = oAuthRequest(url,secrets);
136     xhr.onreadystatechange = function() {
137                 if(xhr.readyState===4) {
138                     if(xhr.status>=400||xhr.status===0) {
139                         root.onErr(xhr.status);
140                     } else {
141                         //console.log(xhr.responseText);
142                         var resp = eval('('+xhr.responseText+')');
143                         var nodes = resp.children;
144                         root.onResp(nodes);
145                     }
146                 }
147             }
148     xhr.send();
149 }
150
151 function getRootNode(secrets,root)
152 {
153     var url = "https://one.ubuntu.com/api/file_storage/v1";
154     var xhr = oAuthRequest(url,secrets);
155     xhr.onreadystatechange = function() {
156                 if(xhr.readyState===4) {
157                     if(xhr.status>=400||xhr.status===0) {
158                         //console.log(xhr.status);
159                         root.onErr(xhr.status);
160                     } else {
161                         //console.log(xhr.responseText);
162                         var resp = eval('('+xhr.responseText+')');
163                         root.onRespRootNode(resp);
164                     }
165                 }
166             }
167     xhr.send();
168 }
169
170 function getFileTree(secrets,root)
171 {
172     var url = "https://one.ubuntu.com/api/file_storage/v1";
173     var xhr = oAuthRequest(url,secrets);
174     xhr.onreadystatechange = function() {
175                 if(xhr.readyState===4) {
176                     if(xhr.status>=400||xhr.status===0) {
177                         //console.log(xhr.status);
178                         root.onErr(xhr.status);
179                     } else {
180                         //console.log(xhr.responseText);
181                         var resp = eval('('+xhr.responseText+')');
182                         var rootNode = resp.root_node_path;
183                         getFiles(secrets,rootNode,root);
184                     }
185                 }
186             }
187     xhr.send();
188 }
189
190 function renameFile(secrets,resourcePath,targetPath,root)
191 {
192     var url = "https://one.ubuntu.com/api/file_storage/v1"+encodeURI(resourcePath);
193     //console.log("url: "+url);
194     //console.log("target: "+encodeURI(targetPath));
195     //console.log("target: "+targetPath);
196     var xhr = oAuthRequest(url,secrets,"PUT");
197     xhr.setRequestHeader("Content-Type","application/json");
198     //var body = '{"path":"'+encodeURI(targetPath)+'"}';
199     var body = '{"path":"'+targetPath+'"}';
200     //console.log("body: "+body);
201     xhr.onreadystatechange = function() {
202                 if(xhr.readyState===4) {
203                     if(xhr.status>=400||xhr.status===0) {
204                         console.log("status: "+xhr.status);
205                         //console.log(xhr.responseText);
206                         root.onErrRename(xhr.status);
207                     } else {
208                         //console.log("status: "+xhr.status);
209                         //console.log(xhr.responseText);
210                         var resp = eval('('+xhr.responseText+')');
211                         //console.log(resp);
212                         root.onRespRename(resp);
213                     }
214                 }
215             }
216
217     xhr.send(body);
218 }
219
220 function stopPublishing(secrets,resourcePath,root)
221 {
222     var url = "https://one.ubuntu.com/api/file_storage/v1"+encodeURI(resourcePath);
223     var xhr = oAuthRequest(url,secrets,"PUT");
224     xhr.setRequestHeader("Content-Type","application/json");
225     var body = '{"is_public":false}';
226     xhr.onreadystatechange = function() {
227                 if(xhr.readyState===4) {
228                     if(xhr.status>=400||xhr.status===0) {
229                         //console.log("status: "+xhr.status);
230                         //console.log(xhr.responseText);
231                         root.onErrStopPublishing(xhr.status);
232                     } else {
233                         //console.log("status: "+xhr.status);
234                         //console.log(xhr.responseText);
235                         var resp = eval('('+xhr.responseText+')');
236                         //console.log(resp);
237                         root.onRespStopPublishing(resp);
238                     }
239                 }
240             }
241     xhr.send(body);
242 }
243
244 function startPublishing(secrets,resourcePath,root)
245 {
246     var url = "https://one.ubuntu.com/api/file_storage/v1"+encodeURI(resourcePath);
247     var xhr = oAuthRequest(url,secrets,"PUT");
248     xhr.setRequestHeader("Content-Type","application/json");
249     var body = '{"is_public":true}';
250     xhr.onreadystatechange = function() {
251                 if(xhr.readyState===4) {
252                     if(xhr.status>=400||xhr.status===0) {
253                         //console.log("status: "+xhr.status);
254                         //console.log(xhr.responseText);
255                         root.onErrStartPublishing(xhr.status);
256                     } else {
257                         //console.log("status: "+xhr.status);
258                         //console.log(xhr.responseText);
259                         var resp = eval('('+xhr.responseText+')');
260                         //console.log(resp);
261                         root.onRespStartPublishing(resp);
262                     }
263                 }
264             }
265     xhr.send(body);
266 }
267
268 function newFolder(secrets,resourcePath,root)
269 {
270     var url = "https://one.ubuntu.com/api/file_storage/v1"+encodeURI(resourcePath);
271     console.log("url: "+url);
272     var xhr = oAuthRequest(url,secrets,"PUT");
273     xhr.setRequestHeader("Content-Type","application/json");
274     var body = '{"kind": "directory"}';
275     console.log("body: "+body);
276     xhr.onreadystatechange = function() {
277                 if(xhr.readyState===4) {
278                     if(xhr.status>=400||xhr.status===0) {
279                         console.log("status: "+xhr.status);
280                         //console.log(xhr.responseText);
281                         root.onErrNew(xhr.status);
282                     } else {
283                         //console.log("status: "+xhr.status);
284                         //console.log(xhr.responseText);
285                         root.onRespNew();
286                     }
287                 }
288             }
289
290     xhr.send(body);
291 }
292
293 function deleteFile(secrets,resourcePath,root,utils)
294 {
295     var url = "https://one.ubuntu.com/api/file_storage/v1"+encodeURI(resourcePath);
296     //console.log("url: "+url);
297     var auth = oAuthHeader(url,secrets,"DELETE");
298     utils.deleteFile(url,auth);
299 }
300
301 function getFileContentType(secrets,root,path)
302 {
303     //var url = "https://one.ubuntu.com/api/file_storage/v1"+encodeURI(path);
304     var url = "https://files.one.ubuntu.com"+encodeURI(path);
305     //console.log("url: "+url);
306     var xhr = oAuthRequest(url,secrets,"GET","bytes=0-10");
307     xhr.onreadystatechange = function() {
308                 console.log("readyState: "+xhr.readyState);
309                 if(xhr.readyState===4) {
310                     if(xhr.status>=400||xhr.status===0) {
311                     } else {
312                         var filename;
313                         var ind = path.lastIndexOf("/");
314                         if(ind>=0) {
315                             filename = path.substr(ind+1);
316                         }  else {
317                             filename = path;
318                         }
319                         var type = xhr.getResponseHeader("content-type");
320                         //console.log("filename: "+filename+" type: "+type);
321                         root.setContentType(type);
322                     }
323                 }
324             }
325     xhr.send();
326 }
327
328 function fixFilename(path) {
329     path = path.toString();
330     //console.log(path);
331     var ind = path.lastIndexOf("/");
332     if(ind>=0) {
333         path = path.substr(ind+1);
334     }
335     if(path=="") path = "/";
336
337     return path;
338 }
339
340 function fixFolder(path) {
341     path = path.toString();
342     //console.log(path);
343     var ind = path.lastIndexOf("file://");
344     if(ind>=0) {
345         path = path.substr(ind+7);
346     }
347     if(path=="") path = "/";
348
349     return path;
350 }
351
352 function getFileContent(secrets,root,path,folder,size,utils)
353 {
354     //var url = "https://one.ubuntu.com/api/file_storage/v1"+encodeURI(path);
355     var url = "https://files.one.ubuntu.com"+encodeURI(path);
356     var filename = fixFilename(path);
357     var ffolder = fixFolder(folder);
358     //console.log("url: "+url);
359     //console.log("ffolder: "+ffolder);
360     var auth = oAuthHeader(url,secrets,"GET");
361     //console.log("auth: "+auth);
362     utils.downloadFile(ffolder,filename,url,size,auth);
363 }
364
365 function uploadFile(secrets,root,path,filename,folder,utils)
366 {
367     //var url = "https://one.ubuntu.com/api/file_storage/v1"+encodeURI(path);
368     //var url = "https://files.one.ubuntu.com"+path;
369     var url = "https://files.one.ubuntu.com"+encodeURI(path);
370     //console.log(url);
371     var ffolder = fixFolder(folder);
372     var auth = oAuthHeader(url,secrets,"PUT");
373     utils.uploadFile(ffolder,filename,url,auth);
374 }
375
376