Refactor dependencies to reduce code base size (#111)
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
Use crates to reduce code base size : * `actix-remote-ip` to safely determine user IP location * `light-openid` for the OpenID primitives & as client to handle federation Reviewed-on: #111
This commit is contained in:
@ -1,9 +1,9 @@
|
||||
use crate::actors::users_actor;
|
||||
use crate::actors::users_actor::UsersActor;
|
||||
use crate::data::action_logger::{Action, ActionLogger};
|
||||
use crate::data::remote_ip::RemoteIP;
|
||||
use actix::Addr;
|
||||
use actix_identity::Identity;
|
||||
use actix_remote_ip::RemoteIP;
|
||||
use actix_web::{web, HttpRequest, HttpResponse, Responder};
|
||||
use webauthn_rs::prelude::PublicKeyCredential;
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
use actix::Addr;
|
||||
use actix_identity::Identity;
|
||||
use actix_remote_ip::RemoteIP;
|
||||
use actix_web::{web, HttpRequest, HttpResponse, Responder};
|
||||
use askama::Template;
|
||||
use std::sync::Arc;
|
||||
@ -14,7 +15,6 @@ use crate::controllers::base_controller::{
|
||||
use crate::data::action_logger::{Action, ActionLogger};
|
||||
use crate::data::login_redirect::LoginRedirect;
|
||||
use crate::data::provider::{Provider, ProvidersManager};
|
||||
use crate::data::remote_ip::RemoteIP;
|
||||
use crate::data::session_identity::{SessionIdentity, SessionStatus};
|
||||
use crate::data::user::User;
|
||||
use crate::data::webauthn_manager::WebAuthManagerReq;
|
||||
|
@ -7,6 +7,7 @@ use actix_web::error::ErrorUnauthorized;
|
||||
use actix_web::{web, HttpRequest, HttpResponse, Responder};
|
||||
use base64::engine::general_purpose::STANDARD as BASE64_STANDARD;
|
||||
use base64::Engine as _;
|
||||
use light_openid::primitives::{OpenIDConfig, OpenIDTokenResponse, OpenIDUserInfo};
|
||||
|
||||
use crate::actors::openid_sessions_actor::{OpenIDSessionsActor, Session, SessionID};
|
||||
use crate::actors::users_actor::UsersActor;
|
||||
@ -20,7 +21,7 @@ use crate::data::code_challenge::CodeChallenge;
|
||||
use crate::data::current_user::CurrentUser;
|
||||
use crate::data::id_token::IdToken;
|
||||
use crate::data::jwt_signer::{JWTSigner, JsonWebKey};
|
||||
use crate::data::openid_primitive::{OpenIDConfig, OpenIDUserInfo, TokenResponse};
|
||||
|
||||
use crate::data::session_identity::SessionIdentity;
|
||||
use crate::data::user::User;
|
||||
use crate::utils::string_utils::rand_str;
|
||||
@ -51,15 +52,32 @@ pub async fn get_configuration(req: HttpRequest) -> impl Responder {
|
||||
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,
|
||||
userinfo_endpoint: Some(curr_origin.clone() + USERINFO_URI),
|
||||
jwks_uri: curr_origin + CERT_URI,
|
||||
scopes_supported: vec!["openid", "profile", "email"],
|
||||
response_types_supported: vec!["code", "id_token", "token id_token"],
|
||||
subject_types_supported: vec!["public"],
|
||||
id_token_signing_alg_values_supported: vec!["RS256"],
|
||||
token_endpoint_auth_methods_supported: vec!["client_secret_post", "client_secret_basic"],
|
||||
claims_supported: vec!["sub", "name", "given_name", "family_name", "email"],
|
||||
code_challenge_methods_supported: vec!["plain", "S256"],
|
||||
scopes_supported: Some(vec![
|
||||
"openid".to_string(),
|
||||
"profile".to_string(),
|
||||
"email".to_string(),
|
||||
]),
|
||||
response_types_supported: vec![
|
||||
"code".to_string(),
|
||||
"id_token".to_string(),
|
||||
"token id_token".to_string(),
|
||||
],
|
||||
subject_types_supported: vec!["public".to_string()],
|
||||
id_token_signing_alg_values_supported: vec!["RS256".to_string()],
|
||||
token_endpoint_auth_methods_supported: Some(vec![
|
||||
"client_secret_post".to_string(),
|
||||
"client_secret_basic".to_string(),
|
||||
]),
|
||||
claims_supported: Some(vec![
|
||||
"sub".to_string(),
|
||||
"name".to_string(),
|
||||
"given_name".to_string(),
|
||||
"family_name".to_string(),
|
||||
"email".to_string(),
|
||||
]),
|
||||
code_challenge_methods_supported: Some(vec!["plain".to_string(), "S256".to_string()]),
|
||||
})
|
||||
}
|
||||
|
||||
@ -438,7 +456,7 @@ pub async fn token(
|
||||
email: user.email,
|
||||
};
|
||||
|
||||
TokenResponse {
|
||||
OpenIDTokenResponse {
|
||||
access_token: session.access_token.expect("Missing access token!"),
|
||||
token_type: "Bearer".to_string(),
|
||||
refresh_token: Some(session.refresh_token),
|
||||
@ -488,7 +506,7 @@ pub async fn token(
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
TokenResponse {
|
||||
OpenIDTokenResponse {
|
||||
access_token: session.access_token.expect("Missing access token!"),
|
||||
token_type: "Bearer".to_string(),
|
||||
refresh_token: Some(session.refresh_token),
|
||||
|
@ -2,6 +2,7 @@ use std::sync::Arc;
|
||||
|
||||
use actix::Addr;
|
||||
use actix_identity::Identity;
|
||||
use actix_remote_ip::RemoteIP;
|
||||
use actix_web::{web, HttpRequest, HttpResponse, Responder};
|
||||
use askama::Template;
|
||||
|
||||
@ -16,7 +17,6 @@ use crate::data::action_logger::{Action, ActionLogger};
|
||||
use crate::data::login_redirect::LoginRedirect;
|
||||
use crate::data::provider::{ProviderID, ProvidersManager};
|
||||
use crate::data::provider_configuration::ProviderConfigurationHelper;
|
||||
use crate::data::remote_ip::RemoteIP;
|
||||
use crate::data::session_identity::{SessionIdentity, SessionStatus};
|
||||
|
||||
#[derive(askama::Template)]
|
||||
|
@ -1,4 +1,5 @@
|
||||
use actix::Addr;
|
||||
use actix_remote_ip::RemoteIP;
|
||||
use actix_web::{web, HttpResponse, Responder};
|
||||
use askama::Template;
|
||||
|
||||
@ -9,7 +10,7 @@ use crate::constants::{APP_NAME, MAX_FAILED_LOGIN_ATTEMPTS, MIN_PASS_LEN};
|
||||
use crate::data::action_logger::{Action, ActionLogger};
|
||||
use crate::data::app_config::AppConfig;
|
||||
use crate::data::current_user::CurrentUser;
|
||||
use crate::data::remote_ip::RemoteIP;
|
||||
|
||||
use crate::data::user::User;
|
||||
|
||||
pub(crate) struct BaseSettingsPage<'a> {
|
||||
@ -45,6 +46,7 @@ impl<'a> BaseSettingsPage<'a> {
|
||||
#[template(path = "settings/account_details.html")]
|
||||
struct AccountDetailsPage<'a> {
|
||||
_p: BaseSettingsPage<'a>,
|
||||
remote_ip: String,
|
||||
}
|
||||
|
||||
#[derive(Template)]
|
||||
@ -55,11 +57,12 @@ struct ChangePasswordPage<'a> {
|
||||
}
|
||||
|
||||
/// Account details page
|
||||
pub async fn account_settings_details_route(user: CurrentUser) -> impl Responder {
|
||||
pub async fn account_settings_details_route(user: CurrentUser, ip: RemoteIP) -> impl Responder {
|
||||
let user = user.into();
|
||||
HttpResponse::Ok().body(
|
||||
AccountDetailsPage {
|
||||
_p: BaseSettingsPage::get("Account details", &user, None, None),
|
||||
remote_ip: ip.0.to_string(),
|
||||
}
|
||||
.render()
|
||||
.unwrap(),
|
||||
|
Reference in New Issue
Block a user