urlscan/api/submission/
mod.rs

1use crate::{UrlScanClient, error::UrlScanError, http::post};
2
3/// Submission model containing information about the successfull submission
4pub mod model;
5pub use model::Submission;
6use reqwest::header::{HeaderMap, HeaderValue};
7
8impl UrlScanClient {
9    /// Scans a given URL with a specific visibility.
10    /// The URLScan.io API has different request limits of visibility, more for public scans then for private ones.
11    /// However, for security researchers it is recommend to use a private visibility when investigating potentially malicious URLs.
12    pub fn scan_url(&self, url: &str, visibility: &str, _tags: Vec<String>) -> Result<Submission, UrlScanError> {
13        let request_url = format!("{}{}scan/", &self.domain, &self.endpoint);
14
15        let mut headers = HeaderMap::new();
16        headers.insert("Content-Type", HeaderValue::from_str("application/json").unwrap());
17        headers.insert("API-Key", HeaderValue::from_str(&self.api_key).unwrap());
18
19        let body = format!("{{\"url\": \"{}\", \"visibility\": \"{}\", \"tags\": [] }}", url, visibility);
20
21        post::<Submission>(&request_url, headers, body)
22    }
23
24    /*pub fn scan_urls(&self, urls: Vec<String>) -> Vec<Result<Submission, UrlScanError>> {
25        let mut results = Vec::new();
26        for url in urls {
27            let result = self.scan_url(&url);
28            results.push(result);
29        }
30        results
31    }*/
32}