Skip to content

Commit f2ccad6

Browse files
authored
fix(ssh): failure create https connection to keycloak (#149)
The omnect-cli is not able to create ssh connections, as it cannot create secure connections to the keycloak server to retrieve an access token. This regression was introduced when default features were disabled for all dependencies. One consequence of this action was, that reqwest did no longer ship with tls support. We therefore re-enable said feature.
1 parent bd818b1 commit f2ccad6

File tree

11 files changed

+246
-118
lines changed

11 files changed

+246
-118
lines changed

Cargo.lock

Lines changed: 112 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ license = "MIT OR Apache-2.0"
77
name = "omnect-cli"
88
readme = "README.md"
99
repository = "https://github.com/omnect/omnect-cli"
10-
version = "0.26.2"
10+
version = "0.26.3"
1111

1212
[dependencies]
1313
actix-web = "4.11"
@@ -47,7 +47,7 @@ num_cpus = { version = "1.17", default-features = false }
4747
oauth2 = { version = "5.0", default-features = false, features = ["reqwest"] }
4848
open = { version = "5.3", default-features = false }
4949
regex = { version = "1.11", default-features = false }
50-
reqwest = { version = "0.12", default-features = false, features = ["json"] }
50+
reqwest = { version = "0.12", default-features = false, features = ["json", "native-tls"] }
5151
serde = { version = "1.0", default-features = false, features = ["derive"] }
5252
serde_json = { version = "1.0", default-features = false }
5353
serde_path_to_error = { version = "0.1", default-features = false }

src/auth.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,12 @@ use tokio::sync::{mpsc, oneshot};
44

55
use anyhow::Result;
66

7-
use actix_web::{error, get, web, App, HttpServer};
7+
use actix_web::{App, HttpServer, error, get, web};
88
use serde::Deserialize;
99

10-
use oauth2::basic::BasicClient;
1110
use oauth2::{
1211
AuthUrl, AuthorizationCode, ClientId, CsrfToken, PkceCodeChallenge, RedirectUrl, TokenResponse,
13-
TokenUrl,
12+
TokenUrl, basic::BasicClient,
1413
};
1514

1615
#[derive(Deserialize)]

src/device_update.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use anyhow::{Context, Result};
22
use azure_identity::{ClientSecretCredential, TokenCredentialOptions};
33
use azure_iot_deviceupdate::DeviceUpdateClient;
4-
use azure_storage::{shared_access_signature::service_sas::BlobSasPermissions, StorageCredentials};
4+
use azure_storage::{StorageCredentials, shared_access_signature::service_sas::BlobSasPermissions};
55
use azure_storage_blobs::prelude::{BlobServiceClient, ContainerClient};
66
use base64::prelude::*;
77
use log::{debug, info};

src/file/mod.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,17 @@ pub mod compression;
22
pub mod functions;
33
use super::validators::{
44
device_update,
5-
identity::{validate_identity, IdentityConfig, IdentityType},
5+
identity::{IdentityConfig, IdentityType, validate_identity},
66
ssh::validate_ssh_pub_key,
77
};
88
use crate::file::functions::{FileCopyFromParams, FileCopyToParams, Partition};
99
use anyhow::{Context, Result};
1010
use log::warn;
1111
use regex::Regex;
12-
use std::fs;
13-
use std::path::{Path, PathBuf};
12+
use std::{
13+
fs,
14+
path::{Path, PathBuf},
15+
};
1416

1517
pub fn set_iotedge_gateway_config(
1618
config_file: &Path,

src/image.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use std::path::Path;
22

3-
use crate::file::functions::read_file_from_image;
43
use crate::file::functions::Partition;
4+
use crate::file::functions::read_file_from_image;
55
use anyhow::{Context, Result};
66
use regex::Regex;
77
use std::sync::LazyLock;

src/lib.rs

Lines changed: 16 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -251,17 +251,14 @@ pub fn run() -> Result<()> {
251251
generate_bmap,
252252
compress_image,
253253
}) => {
254-
let cert_info = create_image_cert(
255-
&image,
256-
CertificateOptions {
257-
intermediate_full_chain_cert: &intermediate_full_chain_cert,
258-
intermediate_key: &intermediate_key,
259-
target_cert: "device_cert_path.pem",
260-
target_key: "device_key_path.key.pem",
261-
subject: &device_id,
262-
validity_days: days,
263-
},
264-
)
254+
let cert_info = create_image_cert(&image, CertificateOptions {
255+
intermediate_full_chain_cert: &intermediate_full_chain_cert,
256+
intermediate_key: &intermediate_key,
257+
target_cert: "device_cert_path.pem",
258+
target_key: "device_key_path.key.pem",
259+
subject: &device_id,
260+
validity_days: days,
261+
})
265262
.context("set_device_certificate: could not create certificate")?;
266263

267264
run_image_command(image, generate_bmap, compress_image, |img| {
@@ -282,17 +279,14 @@ pub fn run() -> Result<()> {
282279
generate_bmap,
283280
compress_image,
284281
}) => {
285-
let cert_info = create_image_cert(
286-
&image,
287-
CertificateOptions {
288-
intermediate_full_chain_cert: &intermediate_full_chain_cert,
289-
intermediate_key: &intermediate_key,
290-
target_cert: "edge_ca_cert_path.pem",
291-
target_key: "edge_ca_key_path.key.pem",
292-
subject: &device_id,
293-
validity_days: days,
294-
},
295-
)
282+
let cert_info = create_image_cert(&image, CertificateOptions {
283+
intermediate_full_chain_cert: &intermediate_full_chain_cert,
284+
intermediate_key: &intermediate_key,
285+
target_cert: "edge_ca_cert_path.pem",
286+
target_key: "edge_ca_key_path.key.pem",
287+
subject: &device_id,
288+
validity_days: days,
289+
})
296290
.context("set_edge_ca_certificate: could not create certificate")?;
297291

298292
run_image_command(image, generate_bmap, compress_image, |img| {

src/ssh.rs

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,14 @@
11
use std::convert::AsRef;
22
use std::fs;
3-
use std::io::prelude::*;
4-
use std::io::BufWriter;
3+
use std::io::{BufWriter, prelude::*};
54
use std::path::{Path, PathBuf};
65
use std::process::{Command, Stdio};
76
use std::str;
87

9-
use anyhow::anyhow;
10-
use anyhow::{Context, Result};
8+
use anyhow::{Context, Result, anyhow};
119
use directories::ProjectDirs;
1210
use oauth2::AccessToken;
13-
use serde::de::DeserializeOwned;
14-
use serde::{Deserialize, Serialize};
11+
use serde::{Deserialize, Serialize, de::DeserializeOwned};
1512
use url::Url;
1613

1714
static BACKEND_API_ENDPOINT: &str = "/api/devices/prepareSSHConnection";
@@ -192,9 +189,11 @@ async fn unpack_response<T: DeserializeOwned>(response: reqwest::Response) -> Re
192189
internal_message: String,
193190
}
194191

195-
anyhow::bail!(serde_json::from_str::<ErrorMessage>(&body)
196-
.map(|err| err.internal_message)
197-
.unwrap_or_else(|_| "unknown error type".to_string()))
192+
anyhow::bail!(
193+
serde_json::from_str::<ErrorMessage>(&body)
194+
.map(|err| err.internal_message)
195+
.unwrap_or_else(|_| "unknown error type".to_string())
196+
)
198197
} else {
199198
serde_json::from_str(&body).map_err(|_| anyhow!("unsupported reply."))
200199
}

0 commit comments

Comments
 (0)