Skip to content
Snippets Groups Projects
proxy.rs 631 B
Newer Older
insert's avatar
insert committed
use actix_web::{web::Query, HttpResponse, Responder};
insert's avatar
insert committed
use serde::Deserialize;

use crate::util::request::fetch;
use crate::util::result::Error;

#[derive(Deserialize)]
pub struct Parameters {
    url: String,
}

pub async fn get(info: Query<Parameters>) -> Result<impl Responder, Error> {
    let url = info.into_inner().url;
    let (resp, mime) = fetch(&url).await?;

    if let mime::IMAGE = mime.type_() {
insert's avatar
insert committed
        let body = resp
            .bytes()
            .await
            .map_err(|_| Error::FailedToConsumeBytes)?;
        Ok(HttpResponse::Ok().body(body))
insert's avatar
insert committed
    } else {
insert's avatar
insert committed
        Err(Error::NotAllowedToProxy)
insert's avatar
insert committed
    }
}