diff --git a/Cargo.lock b/Cargo.lock index fe812e43b..4b82fefce 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -281,7 +281,7 @@ checksum = "965c2d33e53cb6b267e148a4cb0760bc01f4904c1cd4bb4002a085bb016d1490" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.100", "synstructure", ] @@ -293,7 +293,7 @@ checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.100", ] [[package]] @@ -323,7 +323,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.100", ] [[package]] @@ -334,7 +334,7 @@ checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.100", ] [[package]] @@ -435,7 +435,7 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn", + "syn 2.0.100", "which", ] @@ -454,7 +454,7 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn", + "syn 2.0.100", ] [[package]] @@ -561,7 +561,7 @@ checksum = "3fa76293b4f7bb636ab88fd78228235b5248b4d05cc589aed610f954af5d7c7a" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.100", ] [[package]] @@ -754,7 +754,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn", + "syn 2.0.100", ] [[package]] @@ -1127,7 +1127,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.100", ] [[package]] @@ -1176,7 +1176,7 @@ checksum = "8034092389675178f570469e6c3b0465d3d30b4505c294a6550db47f3c17ad18" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.100", ] [[package]] @@ -1196,7 +1196,7 @@ checksum = "30542c1ad912e0e3d22a1935c290e12e8a29d704a420177a31faad4a601a0800" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.100", ] [[package]] @@ -1234,7 +1234,7 @@ dependencies = [ "diplomat_core", "proc-macro2", "quote", - "syn", + "syn 2.0.100", ] [[package]] @@ -1254,7 +1254,7 @@ dependencies = [ "serde", "smallvec", "strck_ident", - "syn", + "syn 2.0.100", ] [[package]] @@ -1271,7 +1271,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.100", ] [[package]] @@ -1450,7 +1450,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn", + "syn 2.0.100", ] [[package]] @@ -1575,7 +1575,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.100", ] [[package]] @@ -1667,7 +1667,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.100", ] [[package]] @@ -2238,7 +2238,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.100", ] [[package]] @@ -2826,8 +2826,6 @@ dependencies = [ "resize", "rgb", "semver", - "serde", - "serde-wasm-bindgen", "smallvec", "softbuffer", "tap", @@ -2835,6 +2833,7 @@ dependencies = [ "tracing", "url", "wasm-bindgen", + "wasm-bindgen-derive", "wasm-bindgen-futures", "web-sys", "x509-cert", @@ -3299,7 +3298,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.100", ] [[package]] @@ -3350,7 +3349,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 2.0.100", ] [[package]] @@ -3638,7 +3637,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.100", ] [[package]] @@ -3914,7 +3913,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.100", ] [[package]] @@ -4065,7 +4064,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1ccf34da56fc294e7d4ccf69a85992b7dfb826b7cf57bac6a70bba3494cc08a" dependencies = [ "proc-macro2", - "syn", + "syn 2.0.100", ] [[package]] @@ -4469,7 +4468,7 @@ dependencies = [ "regex", "relative-path", "rustc_version", - "syn", + "syn 2.0.100", "unicode-ident", ] @@ -4715,17 +4714,6 @@ dependencies = [ "serde_derive", ] -[[package]] -name = "serde-wasm-bindgen" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8302e169f0eddcc139c70f139d19d6467353af16f9fce27e8c30158036a1e16b" -dependencies = [ - "js-sys", - "serde", - "wasm-bindgen", -] - [[package]] name = "serde_bytes" version = "0.11.17" @@ -4743,7 +4731,7 @@ checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.100", ] [[package]] @@ -5067,6 +5055,17 @@ version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + [[package]] name = "syn" version = "2.0.100" @@ -5095,7 +5094,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.100", ] [[package]] @@ -5165,7 +5164,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.100", ] [[package]] @@ -5176,7 +5175,7 @@ checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.100", ] [[package]] @@ -5318,7 +5317,7 @@ checksum = "2d2e76690929402faae40aebdda620a2c0e25dd6d3b9afe48867dfd95991f4bd" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.100", ] [[package]] @@ -5347,7 +5346,7 @@ checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.100", ] [[package]] @@ -5482,7 +5481,7 @@ checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.100", ] [[package]] @@ -5787,10 +5786,32 @@ dependencies = [ "log", "proc-macro2", "quote", - "syn", + "syn 2.0.100", "wasm-bindgen-shared", ] +[[package]] +name = "wasm-bindgen-derive" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ab8fdb87408dab27d43267c311c89135b35d13f8b3081e88451ddeff742c93a" +dependencies = [ + "js-sys", + "wasm-bindgen", + "wasm-bindgen-derive-macro", +] + +[[package]] +name = "wasm-bindgen-derive-macro" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2fbc080f15cb38f447d52bbae64630c2d4925a9ecb5d140d56c0910b69b4cc7" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "wasm-bindgen-futures" version = "0.4.50" @@ -5822,7 +5843,7 @@ checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.100", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -6107,7 +6128,7 @@ checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.100", ] [[package]] @@ -6118,7 +6139,7 @@ checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.100", ] [[package]] @@ -6715,7 +6736,7 @@ checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.100", "synstructure", ] @@ -6754,7 +6775,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.100", ] [[package]] @@ -6765,7 +6786,7 @@ checksum = "6352c01d0edd5db859a63e2605f4ea3183ddbd15e2c4a9e7d32184df75e4f154" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.100", ] [[package]] @@ -6785,7 +6806,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.100", "synstructure", ] @@ -6806,7 +6827,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.100", ] [[package]] @@ -6828,5 +6849,5 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.100", ] diff --git a/crates/ironrdp-web/Cargo.toml b/crates/ironrdp-web/Cargo.toml index 927db28ea..d00436531 100644 --- a/crates/ironrdp-web/Cargo.toml +++ b/crates/ironrdp-web/Cargo.toml @@ -42,12 +42,11 @@ iron-remote-desktop.path = "../iron-remote-desktop" # WASM wasm-bindgen = "0.2" wasm-bindgen-futures = "0.4" +wasm-bindgen-derive = "0.3" web-sys = { version = "0.3", features = ["HtmlCanvasElement"] } js-sys = "0.3" gloo-net = { version = "0.6", default-features = false, features = ["websocket", "http", "io-util"] } gloo-timers = { version = "0.3", default-features = false, features = ["futures"] } -serde = { version = "1.0", features = ["derive"] } -serde-wasm-bindgen = "0.6" # Rendering softbuffer = { version = "0.4", default-features = false } diff --git a/crates/ironrdp-web/src/extension.rs b/crates/ironrdp-web/src/extension.rs new file mode 100644 index 000000000..8821fb056 --- /dev/null +++ b/crates/ironrdp-web/src/extension.rs @@ -0,0 +1,78 @@ +use wasm_bindgen::prelude::wasm_bindgen; +use wasm_bindgen::JsValue; +use wasm_bindgen_derive::try_from_js_option; + +#[derive(wasm_bindgen_derive::TryFromJsValue)] +#[wasm_bindgen] +#[derive(Debug, Clone)] +pub struct DisplayControl(bool); + +#[wasm_bindgen] +impl DisplayControl { + pub fn new(value: bool) -> Self { + Self(value) + } +} + +impl DisplayControl { + pub fn into_inner(self) -> bool { + self.0 + } +} + +#[derive(wasm_bindgen_derive::TryFromJsValue)] +#[wasm_bindgen] +#[derive(Debug, Clone)] +pub struct Pcb(String); + +#[wasm_bindgen] +impl Pcb { + pub fn new(value: String) -> Self { + Self(value) + } +} + +impl Pcb { + pub fn into_inner(self) -> String { + self.0 + } +} + +#[derive(wasm_bindgen_derive::TryFromJsValue)] +#[wasm_bindgen] +#[derive(Debug, Clone)] +pub struct KdcProxyUrl(String); + +#[wasm_bindgen] +impl KdcProxyUrl { + pub fn new(value: String) -> Self { + Self(value) + } +} + +impl KdcProxyUrl { + pub fn into_inner(self) -> String { + self.0 + } +} + +#[derive(Debug, Clone)] +pub(crate) enum Extension { + DisplayControl(bool), + Pcb(String), + KdcProxyUrl(String), +} + +impl Extension { + pub(crate) fn try_from_js_value(value: JsValue) -> Result { + if let Ok(Some(display_control)) = try_from_js_option::(value.clone()) { + Ok(Self::DisplayControl(display_control.into_inner())) + } else if let Ok(Some(pcb)) = try_from_js_option::(value.clone()) { + Ok(Self::Pcb(pcb.into_inner())) + } else if let Ok(Some(kdc)) = try_from_js_option::(value) { + Ok(Self::KdcProxyUrl(kdc.into_inner())) + } else { + anyhow::bail!("provided value is not a supported extension") + } + } +} diff --git a/crates/ironrdp-web/src/lib.rs b/crates/ironrdp-web/src/lib.rs index 5c5c17df5..eedb8dd44 100644 --- a/crates/ironrdp-web/src/lib.rs +++ b/crates/ironrdp-web/src/lib.rs @@ -9,6 +9,9 @@ extern crate chrono as _; extern crate getrandom as _; extern crate time as _; +// Required by wasm-bindgen-derive crate +extern crate alloc; + #[macro_use] extern crate tracing; @@ -17,6 +20,7 @@ use iron_remote_desktop::RemoteDesktopApi; mod canvas; mod clipboard; mod error; +mod extension; mod image; mod input; mod network_client; diff --git a/crates/ironrdp-web/src/session.rs b/crates/ironrdp-web/src/session.rs index d0230c3ba..72036589b 100644 --- a/crates/ironrdp-web/src/session.rs +++ b/crates/ironrdp-web/src/session.rs @@ -30,7 +30,6 @@ use ironrdp::session::{fast_path, ActiveStage, ActiveStageOutput, GracefulDiscon use ironrdp_core::WriteBuf; use ironrdp_futures::{single_sequence_step_read, FramedWrite}; use rgb::AsPixels as _; -use serde::{Deserialize, Serialize}; use tap::prelude::*; use wasm_bindgen::JsValue; use wasm_bindgen_futures::spawn_local; @@ -40,6 +39,7 @@ use crate::canvas::Canvas; use crate::clipboard; use crate::clipboard::{RdpClipboardTransaction, WasmClipboard, WasmClipboardBackend, WasmClipboardBackendMessage}; use crate::error::IronError; +use crate::extension::Extension; use crate::image::extract_partial_image; use crate::input::InputTransaction; use crate::network_client::WasmNetworkClient; @@ -208,15 +208,13 @@ impl iron_remote_desktop::SessionBuilder for SessionBuilder { } fn extension(&self, value: JsValue) -> Self { - match serde_wasm_bindgen::from_value::(value) { - Ok(value) => match value { - Extension::KdcProxyUrl(kdc_proxy_url) => self.0.borrow_mut().kdc_proxy_url = Some(kdc_proxy_url), + match Extension::try_from_js_value(value) { + Ok(ext) => match ext { + Extension::KdcProxyUrl(kdc) => self.0.borrow_mut().kdc_proxy_url = Some(kdc), Extension::Pcb(pcb) => self.0.borrow_mut().pcb = Some(pcb), - Extension::DisplayControl(use_display_control) => { - self.0.borrow_mut().use_display_control = use_display_control - } + Extension::DisplayControl(dc) => self.0.borrow_mut().use_display_control = dc, }, - Err(error) => error!(%error, "Unsupported extension value"), + Err(error) => error!(?error), } self.clone() @@ -354,13 +352,6 @@ impl iron_remote_desktop::SessionBuilder for SessionBuilder { } } -#[derive(Debug, Serialize, Deserialize)] -enum Extension { - KdcProxyUrl(String), - Pcb(String), - DisplayControl(bool), -} - pub(crate) type FastPathInputEvents = smallvec::SmallVec<[FastPathInputEvent; 2]>; #[derive(Debug)] diff --git a/web-client/iron-remote-desktop-rdp/src/interfaces/Extension.ts b/web-client/iron-remote-desktop-rdp/src/interfaces/Extension.ts deleted file mode 100644 index c912a2808..000000000 --- a/web-client/iron-remote-desktop-rdp/src/interfaces/Extension.ts +++ /dev/null @@ -1,28 +0,0 @@ -type ExtensionValue = { Pcb: string } | { KdcProxyUrl: string } | { DisplayControl: boolean }; - -export class Extension { - static init(ident: string, value: unknown): ExtensionValue { - switch (ident) { - case 'Pcb': - if (typeof value === 'string') { - return { Pcb: value }; - } else { - throw new Error('Pcb must be a string'); - } - case 'KdcProxyUrl': - if (typeof value === 'string') { - return { KdcProxyUrl: value }; - } else { - throw new Error('KdcProxyUrl must be a string'); - } - case 'DisplayControl': - if (typeof value === 'boolean') { - return { DisplayControl: value }; - } else { - throw new Error('DisplayControl must be a boolean'); - } - default: - throw new Error(`Invalid extension type: ${ident}`); - } - } -} diff --git a/web-client/iron-remote-desktop-rdp/src/main.ts b/web-client/iron-remote-desktop-rdp/src/main.ts index feab35f48..42ae5f253 100644 --- a/web-client/iron-remote-desktop-rdp/src/main.ts +++ b/web-client/iron-remote-desktop-rdp/src/main.ts @@ -10,7 +10,7 @@ import init, { ClipboardTransaction, ClipboardContent, } from '../../../crates/ironrdp-web/pkg/ironrdp_web'; -import { Extension } from './interfaces/Extension'; +import { preConnectionBlob, kdcProxyUrl, displayControl } from './services/ExtensionBuilders'; export default { init, @@ -24,5 +24,6 @@ export default { ClipboardContent, Session, SessionTerminationInfo, - Extension, }; + +export { preConnectionBlob, kdcProxyUrl, displayControl }; diff --git a/web-client/iron-remote-desktop-rdp/src/services/ExtensionBuilders.ts b/web-client/iron-remote-desktop-rdp/src/services/ExtensionBuilders.ts new file mode 100644 index 000000000..07c37cab1 --- /dev/null +++ b/web-client/iron-remote-desktop-rdp/src/services/ExtensionBuilders.ts @@ -0,0 +1,13 @@ +import { DisplayControl, KdcProxyUrl, Pcb } from '../../../../crates/ironrdp-web/pkg'; + +export function preConnectionBlob(value: string): Pcb { + return Pcb.new(value); +} + +export function displayControl(value: boolean): DisplayControl { + return DisplayControl.new(value); +} + +export function kdcProxyUrl(value: string): KdcProxyUrl { + return KdcProxyUrl.new(value); +} diff --git a/web-client/iron-remote-desktop/src/interfaces/Extension.ts b/web-client/iron-remote-desktop/src/interfaces/Extension.ts index 7c792c15c..ad711ea55 100644 --- a/web-client/iron-remote-desktop/src/interfaces/Extension.ts +++ b/web-client/iron-remote-desktop/src/interfaces/Extension.ts @@ -1,5 +1 @@ -import type { ExtensionValue } from './ExtensionValue'; - -export interface Extension { - init(ident: string, value: unknown): ExtensionValue; -} +export type Extension = unknown; diff --git a/web-client/iron-remote-desktop/src/interfaces/ExtensionValue.ts b/web-client/iron-remote-desktop/src/interfaces/ExtensionValue.ts deleted file mode 100644 index a43a26eba..000000000 --- a/web-client/iron-remote-desktop/src/interfaces/ExtensionValue.ts +++ /dev/null @@ -1 +0,0 @@ -export type ExtensionValue = unknown; diff --git a/web-client/iron-remote-desktop/src/interfaces/RemoteDesktopModule.ts b/web-client/iron-remote-desktop/src/interfaces/RemoteDesktopModule.ts index c12bddca3..48151b70d 100644 --- a/web-client/iron-remote-desktop/src/interfaces/RemoteDesktopModule.ts +++ b/web-client/iron-remote-desktop/src/interfaces/RemoteDesktopModule.ts @@ -7,7 +7,6 @@ import type { SessionBuilder } from './SessionBuilder'; import type { SessionTerminationInfo } from './SessionTerminationInfo'; import type { ClipboardTransaction } from './ClipboardTransaction'; import type { ClipboardContent } from './ClipboardContent'; -import type { Extension } from './Extension'; export interface RemoteDesktopModule { init: () => Promise; @@ -21,5 +20,4 @@ export interface RemoteDesktopModule { SessionTerminationInfo: SessionTerminationInfo; ClipboardTransaction: ClipboardTransaction; ClipboardContent: ClipboardContent; - Extension: Extension; } diff --git a/web-client/iron-remote-desktop/src/services/Config.ts b/web-client/iron-remote-desktop/src/services/Config.ts index b3adf647b..c60a7c87f 100644 --- a/web-client/iron-remote-desktop/src/services/Config.ts +++ b/web-client/iron-remote-desktop/src/services/Config.ts @@ -1,5 +1,5 @@ import type { DesktopSize } from '../interfaces/DesktopSize'; -import type { ExtensionValue } from '../interfaces/ExtensionValue'; +import type { Extension } from '../interfaces/Extension'; export class Config { readonly username: string; @@ -9,7 +9,7 @@ export class Config { readonly serverDomain: string; readonly authToken: string; readonly desktopSize?: DesktopSize; - readonly extensions: ExtensionValue[]; + readonly extensions: Extension[]; constructor( userData: { username: string; password: string }, @@ -17,7 +17,7 @@ export class Config { configOptions: { destination: string; serverDomain: string; - extensions: ExtensionValue[]; + extensions: Extension[]; desktopSize?: DesktopSize; }, ) { diff --git a/web-client/iron-remote-desktop/src/services/ConfigBuilder.ts b/web-client/iron-remote-desktop/src/services/ConfigBuilder.ts index ad291ac51..3a559d4d6 100644 --- a/web-client/iron-remote-desktop/src/services/ConfigBuilder.ts +++ b/web-client/iron-remote-desktop/src/services/ConfigBuilder.ts @@ -1,8 +1,6 @@ import type { DesktopSize } from '../interfaces/DesktopSize'; import { Config } from './Config'; -import type { ExtensionValue } from '../interfaces/ExtensionValue'; - -type ExtensionConstructor = (ident: string, value: unknown) => ExtensionValue; +import type { Extension } from '../interfaces/Extension'; /** * Builder class for creating Config objects with a fluent interface. @@ -19,8 +17,6 @@ type ExtensionConstructor = (ident: string, value: unknown) => ExtensionValue; * ``` */ export class ConfigBuilder { - private extensionConstructor: ExtensionConstructor; - private username: string = ''; private password: string = ''; private destination: string = ''; @@ -29,16 +25,12 @@ export class ConfigBuilder { private authToken: string = ''; private desktopSize?: DesktopSize; - private extensions: ExtensionValue[] = []; + private extensions: Extension[] = []; /** * Creates a new ConfigBuilder instance. - * - * @param extensionConstructor - Function that creates extension values from identifiers and values. */ - constructor(extensionConstructor: ExtensionConstructor) { - this.extensionConstructor = extensionConstructor; - } + constructor() {} /** * Optional parameter @@ -109,12 +101,11 @@ export class ConfigBuilder { /** * Optional parameter * - * @param ident - The identifier for the extension - * @param value - The value for the extension + * @param value - The extension value * @returns The builder instance for method chaining */ - withExtension(ident: string, value: unknown): ConfigBuilder { - this.extensions.push(this.extensionConstructor(ident, value)); + withExtension(value: Extension): ConfigBuilder { + this.extensions.push(value); return this; } diff --git a/web-client/iron-remote-desktop/src/services/remote-desktop.service.ts b/web-client/iron-remote-desktop/src/services/remote-desktop.service.ts index c4e451725..7b74899f0 100644 --- a/web-client/iron-remote-desktop/src/services/remote-desktop.service.ts +++ b/web-client/iron-remote-desktop/src/services/remote-desktop.service.ts @@ -137,7 +137,7 @@ export class RemoteDesktopService { } configBuilder(): ConfigBuilder { - return new ConfigBuilder(this.module.Extension.init); + return new ConfigBuilder(); } connect(config: Config): Observable { diff --git a/web-client/iron-svelte-client/src/lib/login/login.svelte b/web-client/iron-svelte-client/src/lib/login/login.svelte index e2c49ac1b..3a08fc767 100644 --- a/web-client/iron-svelte-client/src/lib/login/login.svelte +++ b/web-client/iron-svelte-client/src/lib/login/login.svelte @@ -2,6 +2,7 @@ import { currentSession, userInteractionService } from '../../services/session.service'; import { catchError, filter } from 'rxjs/operators'; import type { UserInteraction, NewSessionInfo } from '../../../static/iron-remote-desktop'; + import { preConnectionBlob, displayControl, kdcProxyUrl } from '../../../static/iron-remote-desktop-rdp'; import { from, of } from 'rxjs'; import { toast } from '$lib/messages/message-store'; import { showLogin } from '$lib/login/login-store'; @@ -125,14 +126,14 @@ .withServerDomain(domain) .withAuthToken(authtoken) .withDesktopSize(desktopSize) - .withExtension('DisplayControl', true); + .withExtension(displayControl(true)); if (pcb !== '') { - configBuilder.withExtension('Pcb', pcb); + configBuilder.withExtension(preConnectionBlob(pcb)); } if (kdc_proxy_url !== '') { - configBuilder.withExtension('KdcProxyUrl', kdc_proxy_url); + configBuilder.withExtension(kdcProxyUrl(kdc_proxy_url)); } const config = configBuilder.build(); diff --git a/web-client/iron-svelte-client/src/lib/popup-screen/popup-screen.svelte b/web-client/iron-svelte-client/src/lib/popup-screen/popup-screen.svelte index aa016a73d..82b0105e7 100644 --- a/web-client/iron-svelte-client/src/lib/popup-screen/popup-screen.svelte +++ b/web-client/iron-svelte-client/src/lib/popup-screen/popup-screen.svelte @@ -3,6 +3,7 @@ import { setCurrentSessionActive, userInteractionService } from '../../services/session.service'; import type { UserInteraction } from '../../../static/iron-remote-desktop'; import IronRdp from '../../../static/iron-remote-desktop-rdp'; + import { preConnectionBlob, displayControl, kdcProxyUrl } from '../../../static/iron-remote-desktop-rdp'; let uiService: UserInteraction; let cursorOverrideActive = false; @@ -45,14 +46,14 @@ .withServerDomain(domain) .withAuthToken(authtoken) .withDesktopSize(desktopSize) - .withExtension('DisplayControl', true); + .withExtension(displayControl(true)); if (pcb !== '') { - configBuilder.withExtension('Pcb', pcb); + configBuilder.withExtension(preConnectionBlob(pcb)); } if (kdc_proxy_url !== '') { - configBuilder.withExtension('KdcProxyUrl', kdc_proxy_url); + configBuilder.withExtension(kdcProxyUrl(kdc_proxy_url)); } const config = configBuilder.build();