Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 /** | 5 /** |
| 6 * @fileoverview | 6 * @fileoverview |
| 7 * REST API for host-list management. | 7 * API for host-list management. |
| 8 */ | 8 */ |
| 9 | 9 |
| 10 'use strict'; | 10 'use strict'; |
| 11 | 11 |
| 12 /** @suppress {duplicate} */ | 12 /** @suppress {duplicate} */ |
| 13 var remoting = remoting || {}; | 13 var remoting = remoting || {}; |
| 14 | 14 |
| 15 /** @constructor */ | 15 /** @interface */ |
| 16 remoting.HostListApi = function() { | 16 remoting.HostListApi = function() { |
|
kelvinp
2015/01/08 22:54:41
Not part of the CL. Essentially the hostListApi i
| |
| 17 }; | 17 }; |
| 18 | 18 |
| 19 /** | 19 /** |
| 20 * Fetch the list of hosts for a user. | 20 * Fetch the list of hosts for a user. |
| 21 * | 21 * |
| 22 * @param {function(Array.<remoting.Host>):void} onDone | 22 * @param {function(Array.<remoting.Host>):void} onDone |
| 23 * @param {function(remoting.Error):void} onError | 23 * @param {function(remoting.Error):void} onError |
| 24 */ | 24 */ |
| 25 remoting.HostListApi.prototype.get = function(onDone, onError) { | 25 remoting.HostListApi.prototype.get = function(onDone, onError) { |
| 26 /** @type {function(XMLHttpRequest):void} */ | |
| 27 var parseHostListResponse = | |
| 28 this.parseHostListResponse_.bind(this, onDone, onError) | |
| 29 /** @param {string} token */ | |
| 30 var onToken = function(token) { | |
| 31 var headers = { 'Authorization': 'OAuth ' + token }; | |
| 32 remoting.xhr.get(remoting.settings.DIRECTORY_API_BASE_URL + '/@me/hosts', | |
| 33 parseHostListResponse, '', headers); | |
| 34 }; | |
| 35 remoting.identity.callWithToken(onToken, onError); | |
| 36 }; | 26 }; |
| 37 | 27 |
| 38 /** | 28 /** |
| 39 * Update the information for a host. | 29 * Update the information for a host. |
| 40 * | 30 * |
| 41 * @param {function():void} onDone | 31 * @param {function():void} onDone |
| 42 * @param {function(remoting.Error):void} onError | 32 * @param {function(remoting.Error):void} onError |
| 43 * @param {string} hostId | 33 * @param {string} hostId |
| 44 * @param {string} hostName | 34 * @param {string} hostName |
| 45 * @param {string} hostPublicKey | 35 * @param {string} hostPublicKey |
| 46 */ | 36 */ |
| 47 remoting.HostListApi.prototype.put = | 37 remoting.HostListApi.prototype.put = |
| 48 function(hostId, hostName, hostPublicKey, onDone, onError) { | 38 function(hostId, hostName, hostPublicKey, onDone, onError) { |
| 49 /** @param {string} token */ | |
| 50 var onToken = function(token) { | |
| 51 var headers = { | |
| 52 'Authorization': 'OAuth ' + token, | |
| 53 'Content-type' : 'application/json; charset=UTF-8' | |
| 54 }; | |
| 55 var newHostDetails = { | |
| 56 'data': { | |
| 57 'hostId': hostId, | |
| 58 'hostName': hostName, | |
| 59 'publicKey': hostPublicKey | |
| 60 } | |
| 61 }; | |
| 62 remoting.xhr.put( | |
| 63 remoting.settings.DIRECTORY_API_BASE_URL + '/@me/hosts/' + hostId, | |
| 64 remoting.xhr.defaultResponse(onDone, onError), | |
| 65 JSON.stringify(newHostDetails), | |
| 66 headers); | |
| 67 }; | |
| 68 remoting.identity.callWithToken(onToken, onError); | |
| 69 }; | 39 }; |
| 70 | 40 |
| 71 /** | 41 /** |
| 72 * Delete a host. | 42 * Delete a host. |
| 73 * | 43 * |
| 74 * @param {function():void} onDone | 44 * @param {function():void} onDone |
| 75 * @param {function(remoting.Error):void} onError | 45 * @param {function(remoting.Error):void} onError |
| 76 * @param {string} hostId | 46 * @param {string} hostId |
| 77 */ | 47 */ |
| 78 remoting.HostListApi.prototype.remove = function(hostId, onDone, onError) { | 48 remoting.HostListApi.prototype.remove = function(hostId, onDone, onError) { |
| 79 /** @param {string} token */ | |
| 80 var onToken = function(token) { | |
| 81 var headers = { 'Authorization': 'OAuth ' + token }; | |
| 82 remoting.xhr.remove( | |
| 83 remoting.settings.DIRECTORY_API_BASE_URL + '/@me/hosts/' + hostId, | |
| 84 remoting.xhr.defaultResponse(onDone, onError), | |
| 85 '', headers); | |
| 86 }; | |
| 87 remoting.identity.callWithToken(onToken, onError); | |
| 88 }; | 49 }; |
| 89 | |
| 90 /** | |
| 91 * Handle the results of the host list request. A success response will | |
| 92 * include a JSON-encoded list of host descriptions, which is parsed and | |
| 93 * passed to the callback. | |
| 94 * | |
| 95 * @param {function(Array.<remoting.Host>):void} onDone | |
| 96 * @param {function(remoting.Error):void} onError | |
| 97 * @param {XMLHttpRequest} xhr | |
| 98 * @private | |
| 99 */ | |
| 100 remoting.HostListApi.prototype.parseHostListResponse_ = | |
| 101 function(onDone, onError, xhr) { | |
| 102 if (xhr.status == 200) { | |
| 103 var response = /** @type {{data: {items: Array}}} */ | |
| 104 (base.jsonParseSafe(xhr.responseText)); | |
| 105 if (!response || !response.data) { | |
| 106 console.error('Invalid "hosts" response from server.'); | |
| 107 onError(remoting.Error.UNEXPECTED); | |
| 108 } else { | |
| 109 var hosts = response.data.items || []; | |
| 110 onDone(hosts); | |
| 111 } | |
| 112 } else { | |
| 113 onError(remoting.Error.fromHttpError(xhr.status)); | |
| 114 } | |
| 115 }; | |
| 116 | |
| 117 /** @type {remoting.HostListApi} */ | |
| 118 remoting.hostListApi = new remoting.HostListApi(); | |
| OLD | NEW |