99 lines
5.3 KiB
Rust
99 lines
5.3 KiB
Rust
use actix_web::web;
|
|
use actix_session::{SessionMiddleware, storage::CookieSessionStore};
|
|
use crate::controllers::home::HomeController;
|
|
use crate::controllers::auth::AuthController;
|
|
use crate::controllers::ticket::TicketController;
|
|
use crate::controllers::calendar::CalendarController;
|
|
use crate::controllers::governance::GovernanceController;
|
|
use crate::controllers::flow::FlowController;
|
|
use crate::controllers::contract::ContractController;
|
|
use crate::middleware::JwtAuth;
|
|
use crate::SESSION_KEY;
|
|
|
|
/// Configures all application routes
|
|
pub fn configure_routes(cfg: &mut web::ServiceConfig) {
|
|
// Configure session middleware with the consistent key
|
|
let session_middleware = SessionMiddleware::builder(
|
|
CookieSessionStore::default(),
|
|
SESSION_KEY.clone()
|
|
)
|
|
.cookie_secure(false) // Set to true in production with HTTPS
|
|
.build();
|
|
|
|
// Public routes that don't require authentication
|
|
cfg.service(
|
|
web::scope("")
|
|
.wrap(session_middleware)
|
|
// Home routes
|
|
.route("/", web::get().to(HomeController::index))
|
|
.route("/about", web::get().to(HomeController::about))
|
|
.route("/contact", web::get().to(HomeController::contact))
|
|
.route("/contact", web::post().to(HomeController::submit_contact))
|
|
|
|
// 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))
|
|
|
|
// Protected routes that require authentication
|
|
// These routes will be protected by the JwtAuth middleware in the main.rs file
|
|
.route("/editor", web::get().to(HomeController::editor))
|
|
|
|
// Ticket routes
|
|
.route("/tickets", web::get().to(TicketController::list_tickets))
|
|
.route("/tickets/new", web::get().to(TicketController::new_ticket))
|
|
.route("/tickets", web::post().to(TicketController::create_ticket))
|
|
.route("/tickets/{id}", web::get().to(TicketController::show_ticket))
|
|
.route("/tickets/{id}/comment", web::post().to(TicketController::add_comment))
|
|
.route("/tickets/{id}/status/{status}", web::post().to(TicketController::update_status))
|
|
.route("/my-tickets", web::get().to(TicketController::my_tickets))
|
|
|
|
// Calendar routes
|
|
.route("/calendar", web::get().to(CalendarController::calendar))
|
|
.route("/calendar/events/new", web::get().to(CalendarController::new_event))
|
|
.route("/calendar/events", web::post().to(CalendarController::create_event))
|
|
.route("/calendar/events/{id}/delete", web::post().to(CalendarController::delete_event))
|
|
|
|
// Governance routes
|
|
.route("/governance", web::get().to(GovernanceController::index))
|
|
.route("/governance/proposals", web::get().to(GovernanceController::proposals))
|
|
.route("/governance/proposals/{id}", web::get().to(GovernanceController::proposal_detail))
|
|
.route("/governance/proposals/{id}/vote", web::post().to(GovernanceController::submit_vote))
|
|
.route("/governance/create-proposal", web::get().to(GovernanceController::create_proposal_form))
|
|
.route("/governance/create-proposal", web::post().to(GovernanceController::submit_proposal))
|
|
.route("/governance/my-votes", web::get().to(GovernanceController::my_votes))
|
|
|
|
// Flow routes
|
|
.service(
|
|
web::scope("/flows")
|
|
.route("", web::get().to(FlowController::index))
|
|
.route("/list", web::get().to(FlowController::list_flows))
|
|
.route("/{id}", web::get().to(FlowController::flow_detail))
|
|
.route("/{id}/advance", web::post().to(FlowController::advance_flow_step))
|
|
.route("/{id}/stuck", web::post().to(FlowController::mark_flow_step_stuck))
|
|
.route("/{id}/step/{step_id}/log", web::post().to(FlowController::add_log_to_flow_step))
|
|
.route("/create", web::get().to(FlowController::create_flow_form))
|
|
.route("/create", web::post().to(FlowController::create_flow))
|
|
.route("/my-flows", web::get().to(FlowController::my_flows))
|
|
)
|
|
|
|
// Contract routes
|
|
.service(
|
|
web::scope("/contracts")
|
|
.route("", web::get().to(ContractController::index))
|
|
.route("/list", web::get().to(ContractController::list))
|
|
.route("/my", web::get().to(ContractController::my_contracts))
|
|
.route("/{id}", web::get().to(ContractController::detail))
|
|
.route("/create", web::get().to(ContractController::create_form))
|
|
.route("/create", web::post().to(ContractController::create))
|
|
)
|
|
);
|
|
|
|
// Keep the /protected scope for any future routes that should be under that path
|
|
cfg.service(
|
|
web::scope("/protected")
|
|
.wrap(JwtAuth) // Apply JWT authentication middleware
|
|
);
|
|
} |