mirror of https://github.com/keeweb/keeweb
more extension logging
This commit is contained in:
parent
9d4788cb7c
commit
5f4f007b31
|
@ -8,6 +8,9 @@ import { AppSettingsModel } from 'models/app-settings-model';
|
|||
import { Alerts } from 'comp/ui/alerts';
|
||||
import { PasswordGenerator } from 'util/generators/password-generator';
|
||||
import { GeneratorPresets } from 'comp/app/generator-presets';
|
||||
import { Logger } from 'util/logger';
|
||||
|
||||
const logger = new Logger('browser-extension-connector');
|
||||
|
||||
let appModel;
|
||||
const connectedClients = {};
|
||||
|
@ -103,11 +106,17 @@ const ProtocolHandlers = {
|
|||
'change-public-keys'(request) {
|
||||
let { publicKey, extensionName, clientID: clientId } = request;
|
||||
|
||||
if (connectedClients[clientId]) {
|
||||
throw new Error('Changing keys is not allowed');
|
||||
}
|
||||
|
||||
const keys = tweetnaclBox.keyPair();
|
||||
publicKey = kdbxweb.ByteUtils.base64ToBytes(publicKey);
|
||||
|
||||
connectedClients[clientId] = { publicKey, extensionName, keys };
|
||||
|
||||
logger.info('New client key', clientId, extensionName);
|
||||
|
||||
return {
|
||||
action: 'change-public-keys',
|
||||
version: getVersion(request),
|
||||
|
@ -206,6 +215,8 @@ const BrowserExtensionConnector = {
|
|||
Events.on('file-opened', this.fileOpened);
|
||||
Events.on('one-file-closed', this.oneFileClosed);
|
||||
Events.on('all-files-closed', this.allFilesClosed);
|
||||
|
||||
logger.info('Started');
|
||||
},
|
||||
|
||||
stop() {
|
||||
|
@ -217,6 +228,8 @@ const BrowserExtensionConnector = {
|
|||
Events.off('file-opened', this.fileOpened);
|
||||
Events.off('one-file-closed', this.oneFileClosed);
|
||||
Events.off('all-files-closed', this.allFilesClosed);
|
||||
|
||||
logger.info('Stopped');
|
||||
},
|
||||
|
||||
startWebMessageListener() {
|
||||
|
@ -234,6 +247,7 @@ const BrowserExtensionConnector = {
|
|||
this.connectedSockets = [];
|
||||
this.connectedSocketState = new WeakMap();
|
||||
this.server = createServer((socket) => {
|
||||
logger.info('New connection');
|
||||
this.connectedSockets.push(socket);
|
||||
this.connectedSocketState.set(socket, {});
|
||||
this.checkSocketIdentity(socket);
|
||||
|
@ -268,6 +282,7 @@ const BrowserExtensionConnector = {
|
|||
},
|
||||
|
||||
onSocketClose(socket) {
|
||||
logger.info('Connection closed');
|
||||
// TODO: remove the client
|
||||
this.connectedSockets = this.connectedSockets.filter((s) => s !== socket);
|
||||
this.connectedSocketState.delete(socket);
|
||||
|
@ -275,6 +290,7 @@ const BrowserExtensionConnector = {
|
|||
|
||||
onSocketData(socket, data) {
|
||||
if (data.byteLength > MaxIncomingDataLength) {
|
||||
logger.warn('Too many bytes rejected', data.byteLength);
|
||||
socket.destroy();
|
||||
return;
|
||||
}
|
||||
|
@ -303,10 +319,11 @@ const BrowserExtensionConnector = {
|
|||
return;
|
||||
}
|
||||
|
||||
const lengthBuffer = state.pendingData.slice(0, 4);
|
||||
const lengthBuffer = kdbxweb.ByteUtils.arrayToBuffer(state.pendingData.slice(0, 4));
|
||||
const length = new Uint32Array(lengthBuffer)[0];
|
||||
|
||||
if (length > MaxIncomingDataLength) {
|
||||
logger.warn('Large message rejected', length);
|
||||
socket.destroy();
|
||||
return;
|
||||
}
|
||||
|
@ -327,6 +344,7 @@ const BrowserExtensionConnector = {
|
|||
try {
|
||||
request = JSON.parse(str);
|
||||
} catch {
|
||||
logger.warn('Failed to parse message', str);
|
||||
socket.destroy();
|
||||
return;
|
||||
}
|
||||
|
@ -379,7 +397,10 @@ const BrowserExtensionConnector = {
|
|||
|
||||
sendSocketResponse(socket, response) {
|
||||
const responseData = Buffer.from(JSON.stringify(response));
|
||||
const lengthBytes = Buffer.from(new Uint32Array([responseData.byteLength]).buffer);
|
||||
const lengthBuf = kdbxweb.ByteUtils.arrayToBuffer(
|
||||
new Uint32Array([responseData.byteLength])
|
||||
);
|
||||
const lengthBytes = Buffer.from(lengthBuf);
|
||||
const data = Buffer.concat([lengthBytes, responseData]);
|
||||
socket.write(data);
|
||||
},
|
||||
|
@ -417,6 +438,7 @@ const BrowserExtensionConnector = {
|
|||
},
|
||||
|
||||
focusKeeWeb() {
|
||||
logger.debug('Focus KeeWeb');
|
||||
if (Launcher) {
|
||||
Launcher.showMainWindow();
|
||||
} else {
|
||||
|
|
|
@ -50,12 +50,14 @@ void connect_keeweb_pipe();
|
|||
|
||||
bool check_args(int argc, char *argv[]) {
|
||||
if (argc < 2) {
|
||||
std::cerr << "Expected origin argument" << std::endl;
|
||||
return false;
|
||||
}
|
||||
|
||||
std::string origin = argv[1];
|
||||
auto found = std::find(kAllowedOrigins.begin(), kAllowedOrigins.end(), origin);
|
||||
if (found == kAllowedOrigins.end()) {
|
||||
std::cerr << "Bad origin: " << origin << std::endl;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -82,6 +84,7 @@ void stdin_read_cb(uv_stream_t *, ssize_t nread, const uv_buf_t *buf) {
|
|||
uv_buf_t{.base = buf->base, .len = static_cast<size_t>(nread)});
|
||||
process_keeweb_queue();
|
||||
} else if (nread < 0) {
|
||||
std::cerr << "STDIN read error: " << uv_err_name(nread) << std::endl;
|
||||
quit_on_error();
|
||||
}
|
||||
}
|
||||
|
@ -99,6 +102,7 @@ void stdout_write_cb(uv_write_t *req, int status) {
|
|||
if (success) {
|
||||
process_stdout_queue();
|
||||
} else {
|
||||
std::cerr << "STDOUT write error: " << uv_err_name(status) << std::endl;
|
||||
quit_on_error();
|
||||
}
|
||||
}
|
||||
|
@ -144,6 +148,7 @@ void keeweb_write_cb(uv_write_t *req, int status) {
|
|||
if (success) {
|
||||
process_keeweb_queue();
|
||||
} else {
|
||||
std::cerr << "Error writing to KeeWeb: " << uv_err_name(status) << std::endl;
|
||||
close_keeweb_pipe();
|
||||
}
|
||||
}
|
||||
|
@ -167,6 +172,7 @@ void keeweb_pipe_read_cb(uv_stream_t *, ssize_t nread, const uv_buf_t *buf) {
|
|||
uv_buf_t{.base = buf->base, .len = static_cast<size_t>(nread)});
|
||||
process_stdout_queue();
|
||||
} else if (nread < 0) {
|
||||
std::cerr << "KeeWeb read error: " << uv_err_name(nread) << std::endl;
|
||||
close_keeweb_pipe();
|
||||
}
|
||||
}
|
||||
|
@ -192,6 +198,7 @@ void keeweb_pipe_connect_cb(uv_connect_t *req, int status) {
|
|||
process_keeweb_queue();
|
||||
} else if (state.keeweb_launched) {
|
||||
if (state.keeweb_connect_attempts >= kMaxKeeWebConnectAttempts) {
|
||||
std::cerr << "Cannot connect to KeeWeb: timeout" << std::endl;
|
||||
quit_on_error();
|
||||
} else {
|
||||
set_keeweb_connect_timer();
|
||||
|
@ -204,6 +211,7 @@ void keeweb_pipe_connect_cb(uv_connect_t *req, int status) {
|
|||
.flags = UV_PROCESS_DETACHED};
|
||||
auto spawn_error = uv_spawn(uv_default_loop(), child_req, &options);
|
||||
if (spawn_error) {
|
||||
std::cerr << "Cannot spawn KeeWeb: " << uv_err_name(spawn_error) << std::endl;
|
||||
quit_on_error();
|
||||
} else {
|
||||
uv_unref(reinterpret_cast<uv_handle_t *>(&child_req));
|
||||
|
|
Loading…
Reference in New Issue