This commit is contained in:
despiegk 2025-05-08 06:28:24 +03:00
parent d98a2ac802
commit 4274fdaf93
6 changed files with 48 additions and 25 deletions

View File

@ -1,8 +1,12 @@
use oauth2::{basic::BasicClient, AuthUrl, ClientId, ClientSecret, RedirectUrl, TokenUrl};
#[cfg(feature = "gitea")]
use serde::{Deserialize, Serialize};
use std::env;
#[cfg(feature = "gitea")]
use oauth2::{basic::BasicClient, AuthUrl, ClientId, ClientSecret, RedirectUrl, TokenUrl};
/// Gitea OAuth configuration
#[cfg(feature = "gitea")]
#[derive(Clone, Debug)]
pub struct GiteaOAuthConfig {
/// OAuth client
@ -11,6 +15,7 @@ pub struct GiteaOAuthConfig {
pub instance_url: String,
}
#[cfg(feature = "gitea")]
impl GiteaOAuthConfig {
/// Creates a new Gitea OAuth configuration
pub fn new() -> Self {
@ -48,6 +53,7 @@ impl GiteaOAuthConfig {
}
/// Gitea user information structure
#[cfg(feature = "gitea")]
#[derive(Debug, Deserialize, Serialize)]
pub struct GiteaUser {
/// User ID

View File

@ -1,15 +1,21 @@
use actix_web::{web, HttpRequest, HttpResponse, Responder, Result, http::header, cookie::Cookie};
use actix_session::Session;
use oauth2::{AuthorizationCode, CsrfToken, Scope, TokenResponse};
use reqwest::Client;
use crate::config::oauth::GiteaOAuthConfig;
use crate::models::user::{User, UserRole};
use crate::controllers::auth::AuthController;
#[cfg(feature = "gitea")]
use oauth2::{AuthorizationCode, CsrfToken, Scope, TokenResponse};
#[cfg(feature = "gitea")]
use reqwest::Client;
#[cfg(feature = "gitea")]
use crate::config::oauth::GiteaOAuthConfig;
/// Controller for handling Gitea authentication
#[cfg(feature = "gitea")]
pub struct GiteaAuthController;
#[cfg(feature = "gitea")]
impl GiteaAuthController {
/// Initiate the OAuth flow
pub async fn login(
@ -207,6 +213,7 @@ impl GiteaAuthController {
}
/// Query parameters for the OAuth callback
#[cfg(feature = "gitea")]
#[derive(serde::Deserialize)]
pub struct CallbackQuery {
pub code: String,

View File

@ -1,5 +1,6 @@
// Export controllers
pub mod auth;
pub mod debug;
#[cfg(feature = "gitea")]
pub mod gitea_auth;
pub mod home;

View File

@ -1,6 +1,8 @@
#[cfg(feature = "gitea")]
use crate::config::oauth::GiteaOAuthConfig;
use crate::controllers::auth::AuthController;
use crate::controllers::debug::DebugController;
#[cfg(feature = "gitea")]
use crate::controllers::gitea_auth::GiteaAuthController;
use crate::controllers::home::HomeController;
use crate::middleware::JwtAuth;
@ -10,9 +12,6 @@ use actix_web::web;
/// Configures all application routes
pub fn configure_routes(cfg: &mut web::ServiceConfig) {
// Create the OAuth configuration
let oauth_config = web::Data::new(GiteaOAuthConfig::new());
// Configure session middleware with the consistent key
let session_middleware =
SessionMiddleware::builder(CookieSessionStore::default(), SESSION_KEY.clone())
@ -27,11 +26,8 @@ pub fn configure_routes(cfg: &mut web::ServiceConfig) {
)
.build();
// Public routes that don't require authentication
cfg.service(
web::scope("")
let mut scope = web::scope("")
.wrap(session_middleware)
.app_data(oauth_config.clone())
// Home routes
.route("/", web::get().to(HomeController::index))
.route("/about", web::get().to(HomeController::about))
@ -41,15 +37,24 @@ pub fn configure_routes(cfg: &mut web::ServiceConfig) {
.route("/register", web::get().to(AuthController::register_page))
.route("/register", web::post().to(AuthController::register))
.route("/logout", web::get().to(AuthController::logout))
// Gitea OAuth routes
// Debug routes
.route("/debug", web::get().to(DebugController::debug_info));
#[cfg(feature = "gitea")]
{
// Create the OAuth configuration
let oauth_config = web::Data::new(GiteaOAuthConfig::new());
// Gitea OAuth configuration and routes
scope = scope
.app_data(oauth_config.clone())
.route("/auth/gitea", web::get().to(GiteaAuthController::login))
.route(
"/auth/gitea/callback",
web::get().to(GiteaAuthController::callback),
)
// Debug routes
.route("/debug", web::get().to(DebugController::debug_info)),
);
}
cfg.service(scope);
// Protected routes that require authentication
cfg.service(

View File

@ -25,6 +25,7 @@
<hr>
{% if gitea_enabled %}
<div class="text-center">
<p>Or login with:</p>
<a href="/auth/gitea" class="btn btn-secondary">
@ -33,6 +34,7 @@
Login with Gitea
</a>
</div>
{% endif %}
<hr>

View File

@ -34,6 +34,7 @@
<hr>
{% if gitea_enabled %}
<div class="text-center">
<p>Or register with:</p>
<a href="/auth/gitea" class="btn btn-secondary">
@ -42,6 +43,7 @@
Register with Gitea
</a>
</div>
{% endif %}
<hr>