c0f48d5fcaf499cea1050e01d6a465246ca175c6
[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 getFileTree(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                         var rootNode = resp.root_node_path;
164                         getFiles(secrets,rootNode,root);
165                     }
166                 }
167             }
168     xhr.send();
169 }
170
171 function renameFile(secrets,resourcePath,targetPath,root)
172 {
173     var url = "https://one.ubuntu.com/api/file_storage/v1"+encodeURI(resourcePath);
174     //console.log("url: "+url);
175     //console.log("target: "+encodeURI(targetPath));
176     //console.log("target: "+targetPath);
177     var xhr = oAuthRequest(url,secrets,"PUT");
178     xhr.setRequestHeader("Content-Type","application/json");
179     //var body = '{"path":"'+encodeURI(targetPath)+'"}';
180     var body = '{"path":"'+targetPath+'"}';
181     //console.log("body: "+body);
182     xhr.onreadystatechange = function() {
183                 if(xhr.readyState===4) {
184                     if(xhr.status>=400||xhr.status===0) {
185                         console.log("status: "+xhr.status);
186                         //console.log(xhr.responseText);
187                         root.onErrRename(xhr.status);
188                     } else {
189                         //console.log("status: "+xhr.status);
190                         //console.log(xhr.responseText);
191                         var resp = eval('('+xhr.responseText+')');
192                         //console.log(resp);
193                         root.onRespRename(resp);
194                     }
195                 }
196             }
197
198     xhr.send(body);
199 }
200
201 function newFolder(secrets,resourcePath,root)
202 {
203     var url = "https://one.ubuntu.com/api/file_storage/v1"+encodeURI(resourcePath);
204     console.log("url: "+url);
205     var xhr = oAuthRequest(url,secrets,"PUT");
206     xhr.setRequestHeader("Content-Type","application/json");
207     var body = '{"kind": "directory"}';
208     console.log("body: "+body);
209     xhr.onreadystatechange = function() {
210                 if(xhr.readyState===4) {
211                     if(xhr.status>=400||xhr.status===0) {
212                         console.log("status: "+xhr.status);
213                         //console.log(xhr.responseText);
214                         root.onErrNew(xhr.status);
215                     } else {
216                         //console.log("status: "+xhr.status);
217                         //console.log(xhr.responseText);
218                         root.onRespNew();
219                     }
220                 }
221             }
222
223     xhr.send(body);
224 }
225
226 function deleteFile(secrets,resourcePath,root,utils)
227 {
228     var url = "https://one.ubuntu.com/api/file_storage/v1"+encodeURI(resourcePath);
229     //console.log("url: "+url);
230     var auth = oAuthHeader(url,secrets,"DELETE");
231     utils.deleteFile(url,auth);
232 }
233
234 function getFileContentType(secrets,root,path)
235 {
236     //var url = "https://one.ubuntu.com/api/file_storage/v1"+encodeURI(path);
237     var url = "https://files.one.ubuntu.com"+encodeURI(path);
238     //console.log("url: "+url);
239     var xhr = oAuthRequest(url,secrets,"GET","bytes=0-10");
240     xhr.onreadystatechange = function() {
241                 console.log("readyState: "+xhr.readyState);
242                 if(xhr.readyState===4) {
243                     if(xhr.status>=400||xhr.status===0) {
244                     } else {
245                         var filename;
246                         var ind = path.lastIndexOf("/");
247                         if(ind>=0) {
248                             filename = path.substr(ind+1);
249                         }  else {
250                             filename = path;
251                         }
252                         var type = xhr.getResponseHeader("content-type");
253                         //console.log("filename: "+filename+" type: "+type);
254                         root.setContentType(type);
255                     }
256                 }
257             }
258     xhr.send();
259 }
260
261 function fixFilename(path) {
262     path = path.toString();
263     //console.log(path);
264     var ind = path.lastIndexOf("/");
265     if(ind>=0) {
266         path = path.substr(ind+1);
267     }
268     if(path=="") path = "/";
269
270     return path;
271 }
272
273 function fixFolder(path) {
274     path = path.toString();
275     //console.log(path);
276     var ind = path.lastIndexOf("file://");
277     if(ind>=0) {
278         path = path.substr(ind+7);
279     }
280     if(path=="") path = "/";
281
282     return path;
283 }
284
285 function getFileContent(secrets,root,path,folder,size,utils)
286 {
287     //var url = "https://one.ubuntu.com/api/file_storage/v1"+encodeURI(path);
288     var url = "https://files.one.ubuntu.com"+encodeURI(path);
289     var filename = fixFilename(path);
290     var ffolder = fixFolder(folder);
291     //console.log("url: "+url);
292     //console.log("ffolder: "+ffolder);
293     var auth = oAuthHeader(url,secrets,"GET");
294     //console.log("auth: "+auth);
295     utils.downloadFile(ffolder,filename,url,size,auth);
296 }
297
298 function uploadFile(secrets,root,path,filename,folder,utils)
299 {
300     //var url = "https://one.ubuntu.com/api/file_storage/v1"+encodeURI(path);
301     var url = "https://files.one.ubuntu.com"+encodeURI(path);
302     var ffolder = fixFolder(folder);
303     var auth = oAuthHeader(url,secrets,"PUT");
304     utils.uploadFile(ffolder,filename,url,auth);
305 }
306
307