feat: check if provided URL points to a Gitea instance
This commit is contained in:
parent
8a305d6db1
commit
9d137f8dcf
1 changed files with 32 additions and 0 deletions
|
@ -23,6 +23,7 @@ use crate::data::Data;
|
||||||
use crate::gitea::SearchResults;
|
use crate::gitea::SearchResults;
|
||||||
|
|
||||||
const REPO_SEARCH_PATH: &str = "/api/v1/repos/search";
|
const REPO_SEARCH_PATH: &str = "/api/v1/repos/search";
|
||||||
|
const GITEA_NODEINFO: &str = "/api/v1/nodeinfo";
|
||||||
|
|
||||||
impl Data {
|
impl Data {
|
||||||
pub async fn crawl(&self, hostname: &str) -> Vec<SearchResults> {
|
pub async fn crawl(&self, hostname: &str) -> Vec<SearchResults> {
|
||||||
|
@ -58,6 +59,31 @@ impl Data {
|
||||||
page += 1;
|
page += 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// purpose: interact with instance running on provided hostname and verify if the instance is a
|
||||||
|
/// Gitea instance.
|
||||||
|
///
|
||||||
|
/// will get nodeinfo information, which contains an identifier to uniquely identify Gitea
|
||||||
|
pub async fn is_gitea(&self, hostname: &str) -> bool {
|
||||||
|
const GITEA_IDENTIFIER: &str = "gitea";
|
||||||
|
let mut url = Url::parse(hostname).unwrap();
|
||||||
|
url.set_path(GITEA_NODEINFO);
|
||||||
|
|
||||||
|
let res: serde_json::Value = self
|
||||||
|
.client
|
||||||
|
.get(url)
|
||||||
|
.send()
|
||||||
|
.await
|
||||||
|
.unwrap()
|
||||||
|
.json()
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
if let serde_json::Value::String(software) = &res["software"]["name"] {
|
||||||
|
software == GITEA_IDENTIFIER
|
||||||
|
} else {
|
||||||
|
false
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
@ -66,6 +92,12 @@ mod tests {
|
||||||
use crate::settings::Settings;
|
use crate::settings::Settings;
|
||||||
pub const GITEA_HOST: &str = "http://localhost:8080";
|
pub const GITEA_HOST: &str = "http://localhost:8080";
|
||||||
|
|
||||||
|
#[actix_rt::test]
|
||||||
|
async fn is_gitea_works() {
|
||||||
|
let data = Data::new(Settings::new().unwrap()).await;
|
||||||
|
assert!(data.is_gitea(GITEA_HOST).await);
|
||||||
|
}
|
||||||
|
|
||||||
#[actix_rt::test]
|
#[actix_rt::test]
|
||||||
async fn crawl_gitea() {
|
async fn crawl_gitea() {
|
||||||
let data = Data::new(Settings::new().unwrap()).await;
|
let data = Data::new(Settings::new().unwrap()).await;
|
||||||
|
|
Loading…
Add table
Reference in a new issue