mirror of
https://codeberg.org/likwid/likwid.git
synced 2026-06-25 07:27:42 +00:00
Verified changes: - modify backend/src/api/analytics.rs - modify backend/src/api/approvals.rs - modify backend/src/api/auth.rs - modify backend/src/api/comments.rs - modify backend/src/api/communities.rs - modify backend/src/api/conflicts.rs - modify backend/src/api/delegation.rs - modify backend/src/api/deliberation.rs - modify backend/src/api/demo.rs - modify backend/src/api/exports.rs - modify backend/src/api/federation.rs - modify backend/src/api/gitlab.rs - modify backend/src/api/invitations.rs - modify backend/src/api/lifecycle.rs - modify backend/src/api/mod.rs - modify backend/src/api/moderation.rs - modify backend/src/api/moderation_ledger.rs - modify backend/src/api/notifications.rs - modify backend/src/api/permissions.rs - modify backend/src/api/plugins.rs - modify backend/src/api/proposals.rs - modify backend/src/api/roles.rs - modify backend/src/api/self_moderation.rs - modify backend/src/api/settings.rs - modify backend/src/api/users.rs - modify backend/src/api/voting_config.rs - modify backend/src/api/workflows.rs - modify backend/src/auth/jwt.rs - modify backend/src/auth/middleware.rs - modify backend/src/auth/mod.rs - modify backend/src/demo/mod.rs - modify backend/src/main.rs - modify backend/src/models/community.rs - modify backend/src/models/mod.rs - modify backend/src/models/proposal.rs - modify backend/src/models/user.rs - modify backend/src/plugins/builtin/conflict_resolution.rs - modify backend/src/plugins/builtin/decision_workflows.rs - modify backend/src/plugins/builtin/federation.rs - modify backend/src/plugins/builtin/governance_analytics.rs - modify backend/src/plugins/builtin/moderation_ledger.rs - modify backend/src/plugins/builtin/proposal_lifecycle.rs - modify backend/src/plugins/builtin/public_data_export.rs - modify backend/src/plugins/builtin/self_moderation.rs - modify backend/src/plugins/builtin/structured_deliberation.rs - modify backend/src/plugins/hooks.rs - modify backend/src/plugins/manager.rs - modify backend/src/plugins/wasm/host_api.rs - modify backend/src/plugins/wasm/plugin.rs - modify backend/src/plugins/wasm/runtime.rs - modify backend/src/rate_limit.rs - modify backend/src/voting/mod.rs - modify backend/src/voting/quadratic.rs - modify backend/src/voting/ranked_choice.rs - modify backend/src/voting/schulze.rs - modify backend/src/voting/star.rs Diffstat: - 56 files changed, 2697 insertions(+), 1629 deletions(-)
49 lines
1.3 KiB
Rust
49 lines
1.3 KiB
Rust
use axum::{
|
|
extract::FromRequestParts,
|
|
http::{request::Parts, StatusCode},
|
|
};
|
|
use std::sync::Arc;
|
|
use uuid::Uuid;
|
|
|
|
use super::jwt::{verify_token, Claims};
|
|
use crate::config::Config;
|
|
|
|
pub struct AuthUser {
|
|
pub user_id: Uuid,
|
|
pub username: String,
|
|
}
|
|
|
|
impl<S> FromRequestParts<S> for AuthUser
|
|
where
|
|
S: Send + Sync,
|
|
{
|
|
type Rejection = (StatusCode, &'static str);
|
|
|
|
async fn from_request_parts(parts: &mut Parts, _state: &S) -> Result<Self, Self::Rejection> {
|
|
let auth_header = parts
|
|
.headers
|
|
.get("Authorization")
|
|
.and_then(|value| value.to_str().ok())
|
|
.ok_or((StatusCode::UNAUTHORIZED, "Missing authorization header"))?;
|
|
|
|
let token = auth_header.strip_prefix("Bearer ").ok_or((
|
|
StatusCode::UNAUTHORIZED,
|
|
"Invalid authorization header format",
|
|
))?;
|
|
|
|
let secret = parts
|
|
.extensions
|
|
.get::<Arc<Config>>()
|
|
.map(|c| c.jwt_secret.clone())
|
|
.or_else(|| std::env::var("JWT_SECRET").ok())
|
|
.unwrap_or_else(|| "dev-secret-change-in-production".to_string());
|
|
|
|
let claims: Claims = verify_token(token, &secret)
|
|
.map_err(|_| (StatusCode::UNAUTHORIZED, "Invalid token"))?;
|
|
|
|
Ok(AuthUser {
|
|
user_id: claims.sub,
|
|
username: claims.username,
|
|
})
|
|
}
|
|
}
|