...
This commit is contained in:
		| @@ -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 | ||||
|   | ||||
| @@ -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, | ||||
|   | ||||
| @@ -1,5 +1,6 @@ | ||||
| // Export controllers | ||||
| pub mod auth; | ||||
| pub mod debug; | ||||
| #[cfg(feature = "gitea")] | ||||
| pub mod gitea_auth; | ||||
| pub mod home; | ||||
|   | ||||
| @@ -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,29 +26,35 @@ pub fn configure_routes(cfg: &mut web::ServiceConfig) { | ||||
|             ) | ||||
|             .build(); | ||||
|  | ||||
|     // Public routes that don't require authentication | ||||
|     cfg.service( | ||||
|         web::scope("") | ||||
|             .wrap(session_middleware) | ||||
|     let mut scope = web::scope("") | ||||
|         .wrap(session_middleware) | ||||
|         // Home routes | ||||
|         .route("/", web::get().to(HomeController::index)) | ||||
|         .route("/about", web::get().to(HomeController::about)) | ||||
|         // Auth routes | ||||
|         .route("/login", web::get().to(AuthController::login_page)) | ||||
|         .route("/login", web::post().to(AuthController::login)) | ||||
|         .route("/register", web::get().to(AuthController::register_page)) | ||||
|         .route("/register", web::post().to(AuthController::register)) | ||||
|         .route("/logout", web::get().to(AuthController::logout)) | ||||
|         // 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()) | ||||
|             // Home routes | ||||
|             .route("/", web::get().to(HomeController::index)) | ||||
|             .route("/about", web::get().to(HomeController::about)) | ||||
|             // Auth routes | ||||
|             .route("/login", web::get().to(AuthController::login_page)) | ||||
|             .route("/login", web::post().to(AuthController::login)) | ||||
|             .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 | ||||
|             .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( | ||||
|   | ||||
| @@ -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> | ||||
|  | ||||
|   | ||||
| @@ -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> | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user