Add IP location service
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2022-11-12 17:01:45 +01:00
parent 42d2c20ce3
commit bfe65b0216
278 changed files with 119 additions and 34 deletions

View File

@ -27,9 +27,35 @@ pub struct AppConfig {
/// Proxy IP, might end with a star "*"
#[clap(short, long, env)]
pub proxy_ip: Option<String>,
/// IP location service API
///
/// Up instance of IP location service : https://gitlab.com/pierre42100/iplocationserver
///
/// Example: "https://api.geoip.rs"
#[arg(long, short, env)]
pub ip_location_service: Option<String>,
}
lazy_static::lazy_static! {
static ref ARGS: AppConfig = {
let mut config = AppConfig::parse();
// In debug mode only, use dummy token
if cfg!(debug_assertions) && config.token_key.is_empty() {
config.token_key = String::from_utf8_lossy(&[32; 64]).to_string();
}
config
};
}
impl AppConfig {
/// Get parsed command line arguments
pub fn get() -> &'static AppConfig {
&ARGS
}
pub fn secure_cookie(&self) -> bool {
self.website_origin.starts_with("https:")
}
@ -58,3 +84,14 @@ impl AppConfig {
self.website_origin.split('/').nth(2).unwrap_or(APP_NAME)
}
}
#[cfg(test)]
mod test {
use crate::data::app_config::AppConfig;
#[test]
fn verify_cli() {
use clap::CommandFactory;
AppConfig::command().debug_assert()
}
}

View File

@ -1,7 +1,7 @@
use std::net::IpAddr;
use actix_web::dev::Payload;
use actix_web::{web, Error, FromRequest, HttpRequest};
use actix_web::{Error, FromRequest, HttpRequest};
use futures_util::future::{ready, Ready};
use crate::data::app_config::AppConfig;
@ -22,7 +22,9 @@ impl FromRequest for RemoteIP {
#[inline]
fn from_request(req: &HttpRequest, _: &mut Payload) -> Self::Future {
let config: &web::Data<AppConfig> = req.app_data().expect("AppData undefined!");
ready(Ok(RemoteIP(get_remote_ip(req, config.proxy_ip.as_deref()))))
ready(Ok(RemoteIP(get_remote_ip(
req,
AppConfig::get().proxy_ip.as_deref(),
))))
}
}