...
This commit is contained in:
parent
d98a2ac802
commit
4274fdaf93
@ -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>
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user