New release 0.9.1-1
[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 newFolder(secrets,resourcePath,root)
221 {
222     var url = "https://one.ubuntu.com/api/file_storage/v1"+encodeURI(resourcePath);
223     console.log("url: "+url);
224     var xhr = oAuthRequest(url,secrets,"PUT");
225     xhr.setRequestHeader("Content-Type","application/json");
226     var body = '{"kind": "directory"}';
227     console.log("body: "+body);
228     xhr.onreadystatechange = function() {
229                 if(xhr.readyState===4) {
230                     if(xhr.status>=400||xhr.status===0) {
231                         console.log("status: "+xhr.status);
232                         //console.log(xhr.responseText);
233                         root.onErrNew(xhr.status);
234                     } else {
235                         //console.log("status: "+xhr.status);
236                         //console.log(xhr.responseText);
237                         root.onRespNew();
238                     }
239                 }
240             }
241
242     xhr.send(body);
243 }
244
245 function deleteFile(secrets,resourcePath,root,utils)
246 {
247     var url = "https://one.ubuntu.com/api/file_storage/v1"+encodeURI(resourcePath);
248     //console.log("url: "+url);
249     var auth = oAuthHeader(url,secrets,"DELETE");
250     utils.deleteFile(url,auth);
251 }
252
253 function getFileContentType(secrets,root,path)
254 {
255     //var url = "https://one.ubuntu.com/api/file_storage/v1"+encodeURI(path);
256     var url = "https://files.one.ubuntu.com"+encodeURI(path);
257     //console.log("url: "+url);
258     var xhr = oAuthRequest(url,secrets,"GET","bytes=0-10");
259     xhr.onreadystatechange = function() {
260                 console.log("readyState: "+xhr.readyState);
261                 if(xhr.readyState===4) {
262                     if(xhr.status>=400||xhr.status===0) {
263                     } else {
264                         var filename;
265                         var ind = path.lastIndexOf("/");
266                         if(ind>=0) {
267                             filename = path.substr(ind+1);
268                         }  else {
269                             filename = path;
270                         }
271                         var type = xhr.getResponseHeader("content-type");
272                         //console.log("filename: "+filename+" type: "+type);
273                         root.setContentType(type);
274                     }
275                 }
276             }
277     xhr.send();
278 }
279
280 function fixFilename(path) {
281     path = path.toString();
282     //console.log(path);
283     var ind = path.lastIndexOf("/");
284     if(ind>=0) {
285         path = path.substr(ind+1);
286     }
287     if(path=="") path = "/";
288
289     return path;
290 }
291
292 function fixFolder(path) {
293     path = path.toString();
294     //console.log(path);
295     var ind = path.lastIndexOf("file://");
296     if(ind>=0) {
297         path = path.substr(ind+7);
298     }
299     if(path=="") path = "/";
300
301     return path;
302 }
303
304 function getFileContent(secrets,root,path,folder,size,utils)
305 {
306     //var url = "https://one.ubuntu.com/api/file_storage/v1"+encodeURI(path);
307     var url = "https://files.one.ubuntu.com"+encodeURI(path);
308     var filename = fixFilename(path);
309     var ffolder = fixFolder(folder);
310     //console.log("url: "+url);
311     //console.log("ffolder: "+ffolder);
312     var auth = oAuthHeader(url,secrets,"GET");
313     //console.log("auth: "+auth);
314     utils.downloadFile(ffolder,filename,url,size,auth);
315 }
316
317 function uploadFile(secrets,root,path,filename,folder,utils)
318 {
319     //var url = "https://one.ubuntu.com/api/file_storage/v1"+encodeURI(path);
320     //var url = "https://files.one.ubuntu.com"+path;
321     var url = "https://files.one.ubuntu.com"+encodeURI(path);
322     //console.log(url);
323     var ffolder = fixFolder(folder);
324     var auth = oAuthHeader(url,secrets,"PUT");
325     utils.uploadFile(ffolder,filename,url,auth);
326 }
327
328