Skip to content

Commit 88a3a58

Browse files
authored
Fix: GET results for scans (#2080)
* Fix: GET /scans/*/results?range=<from>-<to> * Fix: GET scans/*/results/<id>
1 parent 2785af8 commit 88a3a58

File tree

2 files changed

+54
-46
lines changed
  • rust
    • crates/greenbone-scanner-framework/src
    • src/openvasd/scans

2 files changed

+54
-46
lines changed

rust/crates/greenbone-scanner-framework/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -338,6 +338,7 @@ impl RuntimeBuilder<runtime_builder_states::Start> {
338338
.add_request_handler(GetScansIdHandler::from(value.clone()))
339339
.add_request_handler(GetScansIdResultsHandler::from(value.clone()))
340340
.add_request_handler(GetScansIdStatusHandler::from(value.clone()))
341+
.add_request_handler(GetScansIdResultsIdHandler::from(value.clone()))
341342
.add_request_handler(PostScansIdHandler::from(value.clone()))
342343
.add_request_handler(DeleteScansIdHandler::from(value));
343344

rust/src/openvasd/scans/mod.rs

Lines changed: 53 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -518,58 +518,65 @@ where
518518
from: Option<usize>,
519519
to: Option<usize>,
520520
) -> StreamResult<'static, models::Result, GetScansIDResultsError> {
521-
let q = match (from, to) {
522-
(None, None) => {
523-
r#"
524-
SELECT id, result_id, type, ip_address, hostname, oid, port, protocol, message,
525-
detail_name, detail_value,
526-
source_type, source_name, source_description
527-
FROM results
528-
WHERE id = ?"#
529-
}
530-
(Some(_), None) => {
531-
r#"
532-
SELECT id, result_id, type, ip_address, hostname, oid, port, protocol, message,
533-
detail_name, detail_value,
534-
source_type, source_name, source_description
535-
FROM results
536-
WHERE id = ?
537-
AND result_id >= ?"#
538-
}
539-
(None, Some(_)) => {
540-
r#"
541-
SELECT id, result_id, type, ip_address, hostname, oid, port, protocol, message,
542-
detail_name, detail_value,
543-
source_type, source_name, source_description
544-
FROM results
545-
WHERE id = ?
546-
AND result_id <= ?"#
547-
}
548-
(Some(_), Some(_)) => {
549-
r#"
550-
SELECT id, result_id, type, ip_address, hostname, oid, port, protocol, message,
551-
detail_name, detail_value,
552-
source_type, source_name, source_description
553-
FROM results
554-
WHERE id = ?
555-
AND result_id <= ?
556-
AND result_id >= ?"#
557-
}
521+
const SQL_BASE: &str = r#"
522+
SELECT id, result_id, type, ip_address, hostname, oid, port, protocol, message,
523+
detail_name, detail_value,
524+
source_type, source_name, source_description
525+
FROM results
526+
WHERE id = ?
527+
"#;
528+
529+
const SQL_BASE_AND_GTE: &str = r#"
530+
SELECT id, result_id, type, ip_address, hostname, oid, port, protocol, message,
531+
detail_name, detail_value,
532+
source_type, source_name, source_description
533+
FROM results
534+
WHERE id = ?
535+
AND result_id >= ?
536+
"#;
537+
538+
const SQL_BASE_AND_LTE: &str = r#"
539+
SELECT id, result_id, type, ip_address, hostname, oid, port, protocol, message,
540+
detail_name, detail_value,
541+
source_type, source_name, source_description
542+
FROM results
543+
WHERE id = ?
544+
AND result_id <= ?
545+
"#;
546+
547+
const SQL_BASE_AND_GTE_LTE: &str = r#"
548+
SELECT id, result_id, type, ip_address, hostname, oid, port, protocol, message,
549+
detail_name, detail_value,
550+
source_type, source_name, source_description
551+
FROM results
552+
WHERE id = ?
553+
AND result_id >= ?
554+
AND result_id <= ?
555+
"#;
556+
557+
let sql: &'static str = match (from, to) {
558+
(None, None) => SQL_BASE,
559+
(Some(_), None) => SQL_BASE_AND_GTE,
560+
(None, Some(_)) => SQL_BASE_AND_LTE,
561+
(Some(_), Some(_)) => SQL_BASE_AND_GTE_LTE,
558562
};
559-
let mut q = query(q).bind(id);
560-
if let Some(from) = from {
561-
q = q.bind(from as i64);
563+
let mut query = sqlx::query(sql).bind(id);
564+
565+
if let Some(from_id) = from {
566+
query = query.bind(from_id as i64);
562567
}
563-
if let Some(to) = to {
564-
q = q.bind(to as i64);
568+
if let Some(to_id) = to {
569+
query = query.bind(to_id as i64);
565570
}
566571

567-
Box::new(q.fetch(&self.pool).map(|r| {
568-
r.map(row_to_result)
569-
.map_err(|e| GetScansIDResultsError::External(Box::new(e)))
570-
}))
572+
let result = query.fetch(&self.pool).map(|x| {
573+
x.map(row_to_result)
574+
.map_err(GetScansIDResultsError::from_external)
575+
});
576+
Box::new(result)
571577
}
572578
}
579+
573580
impl<E> GetScansIdResultsId for Endpoints<E>
574581
where
575582
E: Send + Sync,

0 commit comments

Comments
 (0)