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 * Class that routes gnubby-auth extension messages to and from the gnubbyd | 7 * Class that routes gnubby-auth extension messages to and from the gnubbyd |
8 * extension. | 8 * extension. |
9 */ | 9 */ |
10 | 10 |
(...skipping 12 matching lines...) Expand all Loading... | |
23 }; | 23 }; |
24 | 24 |
25 /** | 25 /** |
26 * Processes gnubby-auth messages. | 26 * Processes gnubby-auth messages. |
27 * @param {string} data The gnubby-auth message data. | 27 * @param {string} data The gnubby-auth message data. |
28 */ | 28 */ |
29 remoting.GnubbyAuthHandler.prototype.onMessage = function(data) { | 29 remoting.GnubbyAuthHandler.prototype.onMessage = function(data) { |
30 var message = getJsonObjectFromString(data); | 30 var message = getJsonObjectFromString(data); |
31 var messageType = getStringAttr(message, 'type'); | 31 var messageType = getStringAttr(message, 'type'); |
32 if (messageType == 'data') { | 32 if (messageType == 'data') { |
33 var base64Data = getStringAttr(message, 'base64Data'); | |
34 var requestData = window.atob(/** @type {string} */ base64Data); | |
Sergey Ulanov
2014/03/21 02:09:37
move @type above base64Data declaration
Sergey Ulanov
2014/03/21 02:09:37
The host encodes the data in base64 and here the c
psj
2014/03/21 21:30:45
Done.
psj
2014/03/21 21:30:45
The compiler can't figure out the type when it is
| |
35 var connectionId = getNumberAttr(message, 'connectionId'); | |
33 this.sendMessageToGnubbyd_( | 36 this.sendMessageToGnubbyd_( |
34 getJsonObjectFromString(getStringAttr(message, 'jsonMessage')), | 37 {'type': 'auth-agent@openssh.com', |
35 this.callback_.bind(this, getNumberAttr(message, 'connectionId'))); | 38 'data': stringToBytes_(requestData)}, |
39 this.callback_.bind(this, connectionId)); | |
36 } else { | 40 } else { |
37 console.error('Invalid gnubby-auth message: ' + messageType); | 41 console.error('Invalid gnubby-auth message: ' + messageType); |
38 } | 42 } |
39 }; | 43 }; |
40 | 44 |
41 /** | 45 /** |
42 * Callback invoked with data to be returned to the host. | 46 * Callback invoked with data to be returned to the host. |
43 * @param {number} connectionId The connection id. | 47 * @param {number} connectionId The connection id. |
44 * @param {Object} data The JSON object to send to the host. | 48 * @param {Object} response The JSON response with the data to send to the host. |
45 * @private | 49 * @private |
46 */ | 50 */ |
47 remoting.GnubbyAuthHandler.prototype.callback_ = | 51 remoting.GnubbyAuthHandler.prototype.callback_ = |
48 function(connectionId, data) { | 52 function(connectionId, response) { |
49 var json_data = JSON.stringify(data); | 53 var base64Data; |
54 try { | |
55 var responseData = getArrayAttr(response, 'data'); | |
56 base64Data = window.btoa(bytesToString_(responseData)); | |
57 } catch (err) { | |
58 console.error('gnubby callback failed: ', /** @type {*} */ (err)); | |
Sergey Ulanov
2014/03/21 02:09:37
Not sure why it may fail here? If we fail to reenc
psj
2014/03/21 21:30:45
It will fail if response doesn't contain data, or
| |
59 this.clientSession_.sendGnubbyAuthMessage({'type': 'error', | |
60 'connectionId': connectionId}); | |
61 return; | |
62 } | |
63 | |
50 this.clientSession_.sendGnubbyAuthMessage({'type': 'data', | 64 this.clientSession_.sendGnubbyAuthMessage({'type': 'data', |
51 'connectionId': connectionId, | 65 'connectionId': connectionId, |
52 'jsonMessage': json_data}); | 66 'base64Data': base64Data}); |
53 }; | 67 }; |
54 | 68 |
55 /** | 69 /** |
56 * Send data to the gnubbyd extension. | 70 * Send data to the gnubbyd extension. |
57 * @param {Object} jsonObject The JSON object to send to the gnubbyd extension. | 71 * @param {Object} jsonObject The JSON object to send to the gnubbyd extension. |
58 * @param {function(Object)} callback The callback to invoke with reply data. | 72 * @param {function(Object)} callback The callback to invoke with reply data. |
59 * @private | 73 * @private |
60 */ | 74 */ |
61 remoting.GnubbyAuthHandler.prototype.sendMessageToGnubbyd_ = | 75 remoting.GnubbyAuthHandler.prototype.sendMessageToGnubbyd_ = |
62 function(jsonObject, callback) { | 76 function(jsonObject, callback) { |
(...skipping 16 matching lines...) Expand all Loading... | |
79 * @private | 93 * @private |
80 */ | 94 */ |
81 function onGnubbydDevReply_(jsonObject, callback, reply) { | 95 function onGnubbydDevReply_(jsonObject, callback, reply) { |
82 var kGnubbydStableExtensionId = 'beknehfpfkghjoafdifaflglpjkojoco'; | 96 var kGnubbydStableExtensionId = 'beknehfpfkghjoafdifaflglpjkojoco'; |
83 | 97 |
84 if (reply) { | 98 if (reply) { |
85 callback(reply); | 99 callback(reply); |
86 } else { | 100 } else { |
87 chrome.runtime.sendMessage(kGnubbydStableExtensionId, jsonObject, callback); | 101 chrome.runtime.sendMessage(kGnubbydStableExtensionId, jsonObject, callback); |
88 } | 102 } |
89 }; | 103 } |
104 | |
105 /** | |
106 * Convert a string to an array of bytes. | |
107 * @param {string} s The string to convert. | |
108 * @return {Array.<number>} The converted bytes. | |
109 */ | |
110 function stringToBytes_(s) { | |
111 var bytes = Array(s.length); | |
112 for (var i = 0; i < s.length; ++i) { | |
113 bytes[i] = s.charCodeAt(i); | |
114 } | |
115 return bytes; | |
116 } | |
117 | |
118 /** | |
119 * Convert an array of bytes to a string. | |
120 * @param {Array.<number>} b The bytes to convert. | |
121 * @return {string} The converted string. | |
122 */ | |
123 function bytesToString_(b) { | |
124 return String.fromCharCode.apply(null, b); | |
125 } | |
OLD | NEW |