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

@@ -23,7 +23,7 @@ use crate::data::user::User;
use crate::utils::string_utils::rand_str;
use crate::utils::time::time;
pub async fn get_configuration(req: HttpRequest, app_conf: web::Data<AppConfig>) -> impl Responder {
pub async fn get_configuration(req: HttpRequest) -> impl Responder {
let is_secure_request = req
.headers()
.get("HTTP_X_FORWARDED_PROTO")
@@ -45,8 +45,8 @@ pub async fn get_configuration(req: HttpRequest, app_conf: web::Data<AppConfig>)
);
HttpResponse::Ok().json(OpenIDConfig {
issuer: app_conf.website_origin.clone(),
authorization_endpoint: app_conf.full_url(AUTHORIZE_URI),
issuer: AppConfig::get().website_origin.clone(),
authorization_endpoint: AppConfig::get().full_url(AUTHORIZE_URI),
token_endpoint: curr_origin.clone() + TOKEN_URI,
userinfo_endpoint: curr_origin.clone() + USERINFO_URI,
jwks_uri: curr_origin + CERT_URI,
@@ -263,7 +263,6 @@ pub async fn token(
req: HttpRequest,
query: web::Form<TokenQuery>,
clients: web::Data<ClientManager>,
app_config: web::Data<AppConfig>,
sessions: web::Data<Addr<OpenIDSessionsActor>>,
users: web::Data<Addr<UsersActor>>,
jwt_signer: web::Data<JWTSigner>,
@@ -416,7 +415,7 @@ pub async fn token(
));
}
session.regenerate_access_and_refresh_tokens(&app_config, &jwt_signer)?;
session.regenerate_access_and_refresh_tokens(AppConfig::get(), &jwt_signer)?;
sessions
.send(openid_sessions_actor::UpdateSession(session.clone()))
@@ -435,7 +434,7 @@ pub async fn token(
// Generate id token
let id_token = IdToken {
issuer: app_config.website_origin.to_string(),
issuer: AppConfig::get().website_origin.to_string(),
subject_identifier: session.user.0,
audience: session.client.0.to_string(),
expiration_time: session.access_token_expire_at,
@@ -488,7 +487,7 @@ pub async fn token(
));
}
session.regenerate_access_and_refresh_tokens(&app_config, &jwt_signer)?;
session.regenerate_access_and_refresh_tokens(AppConfig::get(), &jwt_signer)?;
sessions
.send(openid_sessions_actor::UpdateSession(session.clone()))

View File

@@ -6,6 +6,7 @@ use crate::actors::bruteforce_actor::BruteForceActor;
use crate::actors::users_actor::UsersActor;
use crate::actors::{bruteforce_actor, users_actor};
use crate::constants::{APP_NAME, MAX_FAILED_LOGIN_ATTEMPTS, MIN_PASS_LEN};
use crate::data::app_config::AppConfig;
use crate::data::current_user::CurrentUser;
use crate::data::remote_ip::RemoteIP;
use crate::data::user::User;
@@ -18,6 +19,7 @@ pub(crate) struct BaseSettingsPage {
pub is_admin: bool,
pub user_name: String,
pub version: &'static str,
pub ip_location_api: Option<&'static str>,
}
impl BaseSettingsPage {
@@ -35,6 +37,7 @@ impl BaseSettingsPage {
is_admin: user.admin,
user_name: user.username.to_string(),
version: env!("CARGO_PKG_VERSION"),
ip_location_api: AppConfig::get().ip_location_service.as_deref(),
}
}
}

View File

@@ -1,6 +1,6 @@
use std::ops::Deref;
use actix_web::{web, HttpResponse, Responder};
use actix_web::{HttpResponse, Responder};
use askama::Template;
use qrcode_generator::QrCodeEcc;
@@ -48,14 +48,14 @@ pub async fn two_factors_route(user: CurrentUser) -> impl Responder {
}
/// Configure a new TOTP authentication factor
pub async fn add_totp_factor_route(
user: CurrentUser,
app_conf: web::Data<AppConfig>,
) -> impl Responder {
pub async fn add_totp_factor_route(user: CurrentUser) -> impl Responder {
let key = TotpKey::new_random();
let qr_code =
qrcode_generator::to_png_to_vec(key.url_for_user(&user, &app_conf), QrCodeEcc::Low, 1024);
let qr_code = qrcode_generator::to_png_to_vec(
key.url_for_user(&user, AppConfig::get()),
QrCodeEcc::Low,
1024,
);
let qr_code = match qr_code {
Ok(q) => q,
Err(e) => {
@@ -68,7 +68,7 @@ pub async fn add_totp_factor_route(
AddTotpPage {
_p: BaseSettingsPage::get("New authenticator app", &user, None, None),
qr_code: base64::encode(qr_code),
account_name: key.account_name(&user, &app_conf),
account_name: key.account_name(&user, AppConfig::get()),
secret_key: key.get_secret(),
}
.render()