From ab9490d4355e7f8c23649aa569934c5323cdb97c Mon Sep 17 00:00:00 2001 From: Akos Kitta Date: Sun, 20 Aug 2023 17:55:59 +0200 Subject: [PATCH 1/2] fix: incorrect certificate flashing command string Use a `string` array of command flags instead of the concatenated final `string` command. Ref: arduino/arduino-ide#2067 Closes #2179 Signed-off-by: Akos Kitta --- .../contributions/upload-certificate.ts | 23 ++++++++++++++----- .../protocol/arduino-firmware-uploader.ts | 4 ++-- .../node/arduino-firmware-uploader-impl.ts | 4 ++-- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/arduino-ide-extension/src/browser/contributions/upload-certificate.ts b/arduino-ide-extension/src/browser/contributions/upload-certificate.ts index 7e1400932..924bc3988 100644 --- a/arduino-ide-extension/src/browser/contributions/upload-certificate.ts +++ b/arduino-ide-extension/src/browser/contributions/upload-certificate.ts @@ -19,6 +19,12 @@ import { import { ArduinoFirmwareUploader } from '../../common/protocol/arduino-firmware-uploader'; import { nls } from '@theia/core/lib/common'; +interface UploadCertificateParams { + readonly fqbn: string; + readonly address: string; + readonly urls: readonly string[]; +} + @injectable() export class UploadCertificate extends Contribution { @inject(UploadCertificateDialog) @@ -74,12 +80,17 @@ export class UploadCertificate extends Contribution { }); registry.registerCommand(UploadCertificate.Commands.UPLOAD_CERT, { - execute: async ({ fqbn, address, urls }) => { - return this.arduinoFirmwareUploader.uploadCertificates( - `-b ${fqbn} -a ${address} ${urls - .map((url: string) => `-u ${url}`) - .join(' ')}` - ); + execute: async (params: UploadCertificateParams) => { + const { fqbn, address, urls } = params; + return this.arduinoFirmwareUploader.uploadCertificates({ + flags: [ + '-b', + fqbn, + '-a', + address, + ...urls.flatMap((url) => ['-u', url]), + ], + }); }, }); diff --git a/arduino-ide-extension/src/common/protocol/arduino-firmware-uploader.ts b/arduino-ide-extension/src/common/protocol/arduino-firmware-uploader.ts index 3cf9437d3..8e1bb25aa 100644 --- a/arduino-ide-extension/src/common/protocol/arduino-firmware-uploader.ts +++ b/arduino-ide-extension/src/common/protocol/arduino-firmware-uploader.ts @@ -1,4 +1,4 @@ -import { Port } from "./boards-service"; +import type { Port } from './boards-service'; export const ArduinoFirmwareUploaderPath = '/services/arduino-firmware-uploader'; @@ -13,7 +13,7 @@ export type FirmwareInfo = { export interface ArduinoFirmwareUploader { list(fqbn?: string): Promise; flash(firmware: FirmwareInfo, port: Port): Promise; - uploadCertificates(command: string): Promise; + uploadCertificates(params: { flags: string[] }): Promise; updatableBoards(): Promise; availableFirmwares(fqbn: string): Promise; } diff --git a/arduino-ide-extension/src/node/arduino-firmware-uploader-impl.ts b/arduino-ide-extension/src/node/arduino-firmware-uploader-impl.ts index d1c1d0cb5..5520a7791 100644 --- a/arduino-ide-extension/src/node/arduino-firmware-uploader-impl.ts +++ b/arduino-ide-extension/src/node/arduino-firmware-uploader-impl.ts @@ -17,8 +17,8 @@ export class ArduinoFirmwareUploaderImpl implements ArduinoFirmwareUploader { @inject(MonitorManager) private readonly monitorManager: MonitorManager; - async uploadCertificates(command: string): Promise { - return await this.runCommand(['certificates', 'flash', command]); + async uploadCertificates(params: { flags: string[] }): Promise { + return await this.runCommand(['certificates', 'flash', ...params.flags]); } async list(fqbn?: string): Promise { From 9d1789ff14c8f3d383532fc3c5cb8a2f2b77fc3d Mon Sep 17 00:00:00 2001 From: Akos Kitta Date: Sun, 20 Aug 2023 19:35:16 +0200 Subject: [PATCH 2/2] fix: remove command flags from API --- .../contributions/upload-certificate.ts | 22 +++++-------------- .../protocol/arduino-firmware-uploader.ts | 11 +++++++--- .../node/arduino-firmware-uploader-impl.ts | 14 ++++++++++-- 3 files changed, 25 insertions(+), 22 deletions(-) diff --git a/arduino-ide-extension/src/browser/contributions/upload-certificate.ts b/arduino-ide-extension/src/browser/contributions/upload-certificate.ts index 924bc3988..a6385cb2a 100644 --- a/arduino-ide-extension/src/browser/contributions/upload-certificate.ts +++ b/arduino-ide-extension/src/browser/contributions/upload-certificate.ts @@ -16,15 +16,12 @@ import { arduinoCert, certificateList, } from '../dialogs/certificate-uploader/utils'; -import { ArduinoFirmwareUploader } from '../../common/protocol/arduino-firmware-uploader'; +import { + ArduinoFirmwareUploader, + UploadCertificateParams, +} from '../../common/protocol/arduino-firmware-uploader'; import { nls } from '@theia/core/lib/common'; -interface UploadCertificateParams { - readonly fqbn: string; - readonly address: string; - readonly urls: readonly string[]; -} - @injectable() export class UploadCertificate extends Contribution { @inject(UploadCertificateDialog) @@ -81,16 +78,7 @@ export class UploadCertificate extends Contribution { registry.registerCommand(UploadCertificate.Commands.UPLOAD_CERT, { execute: async (params: UploadCertificateParams) => { - const { fqbn, address, urls } = params; - return this.arduinoFirmwareUploader.uploadCertificates({ - flags: [ - '-b', - fqbn, - '-a', - address, - ...urls.flatMap((url) => ['-u', url]), - ], - }); + return this.arduinoFirmwareUploader.uploadCertificates(params); }, }); diff --git a/arduino-ide-extension/src/common/protocol/arduino-firmware-uploader.ts b/arduino-ide-extension/src/common/protocol/arduino-firmware-uploader.ts index 8e1bb25aa..7e24afcb3 100644 --- a/arduino-ide-extension/src/common/protocol/arduino-firmware-uploader.ts +++ b/arduino-ide-extension/src/common/protocol/arduino-firmware-uploader.ts @@ -3,17 +3,22 @@ import type { Port } from './boards-service'; export const ArduinoFirmwareUploaderPath = '/services/arduino-firmware-uploader'; export const ArduinoFirmwareUploader = Symbol('ArduinoFirmwareUploader'); -export type FirmwareInfo = { +export interface FirmwareInfo { board_name: string; board_fqbn: string; module: string; firmware_version: string; Latest: boolean; -}; +} +export interface UploadCertificateParams { + readonly fqbn: string; + readonly address: string; + readonly urls: readonly string[]; +} export interface ArduinoFirmwareUploader { list(fqbn?: string): Promise; flash(firmware: FirmwareInfo, port: Port): Promise; - uploadCertificates(params: { flags: string[] }): Promise; + uploadCertificates(params: UploadCertificateParams): Promise; updatableBoards(): Promise; availableFirmwares(fqbn: string): Promise; } diff --git a/arduino-ide-extension/src/node/arduino-firmware-uploader-impl.ts b/arduino-ide-extension/src/node/arduino-firmware-uploader-impl.ts index 5520a7791..5def6a74b 100644 --- a/arduino-ide-extension/src/node/arduino-firmware-uploader-impl.ts +++ b/arduino-ide-extension/src/node/arduino-firmware-uploader-impl.ts @@ -4,6 +4,7 @@ import type { Port } from '../common/protocol'; import { ArduinoFirmwareUploader, FirmwareInfo, + UploadCertificateParams, } from '../common/protocol/arduino-firmware-uploader'; import { spawnCommand } from './exec-util'; import { MonitorManager } from './monitor-manager'; @@ -17,8 +18,17 @@ export class ArduinoFirmwareUploaderImpl implements ArduinoFirmwareUploader { @inject(MonitorManager) private readonly monitorManager: MonitorManager; - async uploadCertificates(params: { flags: string[] }): Promise { - return await this.runCommand(['certificates', 'flash', ...params.flags]); + async uploadCertificates(params: UploadCertificateParams): Promise { + const { fqbn, address, urls } = params; + return await this.runCommand([ + 'certificates', + 'flash', + '-b', + fqbn, + '-a', + address, + ...urls.flatMap((url) => ['-u', url]), + ]); } async list(fqbn?: string): Promise {