...
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 serde::{Deserialize, Serialize};
|
||||||
use std::env;
|
use std::env;
|
||||||
|
|
||||||
|
#[cfg(feature = "gitea")]
|
||||||
|
use oauth2::{basic::BasicClient, AuthUrl, ClientId, ClientSecret, RedirectUrl, TokenUrl};
|
||||||
|
|
||||||
/// Gitea OAuth configuration
|
/// Gitea OAuth configuration
|
||||||
|
#[cfg(feature = "gitea")]
|
||||||
#[derive(Clone, Debug)]
|
#[derive(Clone, Debug)]
|
||||||
pub struct GiteaOAuthConfig {
|
pub struct GiteaOAuthConfig {
|
||||||
/// OAuth client
|
/// OAuth client
|
||||||
@ -11,6 +15,7 @@ pub struct GiteaOAuthConfig {
|
|||||||
pub instance_url: String,
|
pub instance_url: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "gitea")]
|
||||||
impl GiteaOAuthConfig {
|
impl GiteaOAuthConfig {
|
||||||
/// Creates a new Gitea OAuth configuration
|
/// Creates a new Gitea OAuth configuration
|
||||||
pub fn new() -> Self {
|
pub fn new() -> Self {
|
||||||
@ -48,6 +53,7 @@ impl GiteaOAuthConfig {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Gitea user information structure
|
/// Gitea user information structure
|
||||||
|
#[cfg(feature = "gitea")]
|
||||||
#[derive(Debug, Deserialize, Serialize)]
|
#[derive(Debug, Deserialize, Serialize)]
|
||||||
pub struct GiteaUser {
|
pub struct GiteaUser {
|
||||||
/// User ID
|
/// User ID
|
||||||
|
@ -1,15 +1,21 @@
|
|||||||
use actix_web::{web, HttpRequest, HttpResponse, Responder, Result, http::header, cookie::Cookie};
|
use actix_web::{web, HttpRequest, HttpResponse, Responder, Result, http::header, cookie::Cookie};
|
||||||
use actix_session::Session;
|
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::models::user::{User, UserRole};
|
||||||
use crate::controllers::auth::AuthController;
|
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
|
/// Controller for handling Gitea authentication
|
||||||
|
#[cfg(feature = "gitea")]
|
||||||
pub struct GiteaAuthController;
|
pub struct GiteaAuthController;
|
||||||
|
|
||||||
|
#[cfg(feature = "gitea")]
|
||||||
impl GiteaAuthController {
|
impl GiteaAuthController {
|
||||||
/// Initiate the OAuth flow
|
/// Initiate the OAuth flow
|
||||||
pub async fn login(
|
pub async fn login(
|
||||||
@ -207,6 +213,7 @@ impl GiteaAuthController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Query parameters for the OAuth callback
|
/// Query parameters for the OAuth callback
|
||||||
|
#[cfg(feature = "gitea")]
|
||||||
#[derive(serde::Deserialize)]
|
#[derive(serde::Deserialize)]
|
||||||
pub struct CallbackQuery {
|
pub struct CallbackQuery {
|
||||||
pub code: String,
|
pub code: String,
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
// Export controllers
|
// Export controllers
|
||||||
pub mod auth;
|
pub mod auth;
|
||||||
pub mod debug;
|
pub mod debug;
|
||||||
|
#[cfg(feature = "gitea")]
|
||||||
pub mod gitea_auth;
|
pub mod gitea_auth;
|
||||||
pub mod home;
|
pub mod home;
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
|
#[cfg(feature = "gitea")]
|
||||||
use crate::config::oauth::GiteaOAuthConfig;
|
use crate::config::oauth::GiteaOAuthConfig;
|
||||||
use crate::controllers::auth::AuthController;
|
use crate::controllers::auth::AuthController;
|
||||||
use crate::controllers::debug::DebugController;
|
use crate::controllers::debug::DebugController;
|
||||||
|
#[cfg(feature = "gitea")]
|
||||||
use crate::controllers::gitea_auth::GiteaAuthController;
|
use crate::controllers::gitea_auth::GiteaAuthController;
|
||||||
use crate::controllers::home::HomeController;
|
use crate::controllers::home::HomeController;
|
||||||
use crate::middleware::JwtAuth;
|
use crate::middleware::JwtAuth;
|
||||||
@ -10,9 +12,6 @@ use actix_web::web;
|
|||||||
|
|
||||||
/// Configures all application routes
|
/// Configures all application routes
|
||||||
pub fn configure_routes(cfg: &mut web::ServiceConfig) {
|
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
|
// Configure session middleware with the consistent key
|
||||||
let session_middleware =
|
let session_middleware =
|
||||||
SessionMiddleware::builder(CookieSessionStore::default(), SESSION_KEY.clone())
|
SessionMiddleware::builder(CookieSessionStore::default(), SESSION_KEY.clone())
|
||||||
@ -27,29 +26,35 @@ pub fn configure_routes(cfg: &mut web::ServiceConfig) {
|
|||||||
)
|
)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
// Public routes that don't require authentication
|
let mut scope = web::scope("")
|
||||||
cfg.service(
|
.wrap(session_middleware)
|
||||||
web::scope("")
|
// Home routes
|
||||||
.wrap(session_middleware)
|
.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())
|
.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", web::get().to(GiteaAuthController::login))
|
||||||
.route(
|
.route(
|
||||||
"/auth/gitea/callback",
|
"/auth/gitea/callback",
|
||||||
web::get().to(GiteaAuthController::callback),
|
web::get().to(GiteaAuthController::callback),
|
||||||
)
|
);
|
||||||
// Debug routes
|
}
|
||||||
.route("/debug", web::get().to(DebugController::debug_info)),
|
|
||||||
);
|
cfg.service(scope);
|
||||||
|
|
||||||
// Protected routes that require authentication
|
// Protected routes that require authentication
|
||||||
cfg.service(
|
cfg.service(
|
||||||
|
@ -25,6 +25,7 @@
|
|||||||
|
|
||||||
<hr>
|
<hr>
|
||||||
|
|
||||||
|
{% if gitea_enabled %}
|
||||||
<div class="text-center">
|
<div class="text-center">
|
||||||
<p>Or login with:</p>
|
<p>Or login with:</p>
|
||||||
<a href="/auth/gitea" class="btn btn-secondary">
|
<a href="/auth/gitea" class="btn btn-secondary">
|
||||||
@ -33,6 +34,7 @@
|
|||||||
Login with Gitea
|
Login with Gitea
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
<hr>
|
<hr>
|
||||||
|
|
||||||
|
@ -34,6 +34,7 @@
|
|||||||
|
|
||||||
<hr>
|
<hr>
|
||||||
|
|
||||||
|
{% if gitea_enabled %}
|
||||||
<div class="text-center">
|
<div class="text-center">
|
||||||
<p>Or register with:</p>
|
<p>Or register with:</p>
|
||||||
<a href="/auth/gitea" class="btn btn-secondary">
|
<a href="/auth/gitea" class="btn btn-secondary">
|
||||||
@ -42,6 +43,7 @@
|
|||||||
Register with Gitea
|
Register with Gitea
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
<hr>
|
<hr>
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user