feat: Adds middleware to routes
This commit is contained in:
@@ -1,10 +1,18 @@
|
||||
import DatabaseClient
|
||||
import DatabaseClientLive
|
||||
import Dependencies
|
||||
import Fluent
|
||||
import SharedModels
|
||||
import Vapor
|
||||
|
||||
private let apiMiddleware: [any Middleware] = [
|
||||
UserPasswordAuthenticator(),
|
||||
UserTokenAuthenticator(),
|
||||
User.guardMiddleware()
|
||||
]
|
||||
|
||||
extension ApiRoute {
|
||||
var middleware: [any Middleware]? { apiMiddleware }
|
||||
|
||||
func handle(request: Request) async throws -> any AsyncResponseEncodable {
|
||||
switch self {
|
||||
case let .employee(route):
|
||||
@@ -22,6 +30,7 @@ extension ApiRoute {
|
||||
}
|
||||
|
||||
extension ApiRoute.EmployeeApiRoute {
|
||||
|
||||
func handle(request: Request) async throws -> any AsyncResponseEncodable {
|
||||
@Dependency(\.database) var database
|
||||
switch self {
|
||||
@@ -44,6 +53,7 @@ extension ApiRoute.EmployeeApiRoute {
|
||||
}
|
||||
|
||||
extension ApiRoute.PurchaseOrderApiRoute {
|
||||
|
||||
func handle(request: Request) async throws -> any AsyncResponseEncodable {
|
||||
@Dependency(\.database.purchaseOrders) var purchaseOrders
|
||||
switch self {
|
||||
@@ -67,6 +77,7 @@ extension ApiRoute.PurchaseOrderApiRoute {
|
||||
|
||||
// TODO: Add Login.
|
||||
extension ApiRoute.UserApiRoute {
|
||||
|
||||
func handle(request: Request) async throws -> any AsyncResponseEncodable {
|
||||
@Dependency(\.database.users) var users
|
||||
switch self {
|
||||
|
||||
@@ -1,10 +1,30 @@
|
||||
import DatabaseClient
|
||||
import DatabaseClientLive
|
||||
import Dependencies
|
||||
import Elementary
|
||||
import SharedModels
|
||||
import Vapor
|
||||
|
||||
private let viewProtectedMiddleware: [any Middleware] = [
|
||||
UserPasswordAuthenticator(),
|
||||
UserSessionAuthenticator(),
|
||||
User.redirectMiddleware { req in
|
||||
"/login?next=\(req.url)"
|
||||
}
|
||||
]
|
||||
|
||||
extension SharedModels.ViewRoute {
|
||||
|
||||
var middleware: [any Middleware]? {
|
||||
switch self {
|
||||
case let .employee(route): return route.middleware
|
||||
case .login: return nil
|
||||
case let .purchaseOrder(route): return route.middleware
|
||||
case let .user(route): return route.middleware
|
||||
case let .vendor(route): return route.middleware
|
||||
case let .vendorBranch(route): return route.middleware
|
||||
}
|
||||
}
|
||||
|
||||
func handle(request: Request) async throws -> any AsyncResponseEncodable {
|
||||
@Dependency(\.database.users) var users
|
||||
switch self {
|
||||
@@ -68,6 +88,8 @@ extension SharedModels.ViewRoute.EmployeeRoute {
|
||||
}
|
||||
}
|
||||
|
||||
var middleware: [any Middleware]? { viewProtectedMiddleware }
|
||||
|
||||
func handle(request: Request) async throws -> any AsyncResponseEncodable {
|
||||
@Dependency(\.database.employees) var employees
|
||||
|
||||
@@ -133,6 +155,8 @@ extension SharedModels.ViewRoute.PurchaseOrderRoute {
|
||||
try await mainPage(html, page: 1, limit: 25)
|
||||
}
|
||||
|
||||
var middleware: [any Middleware]? { viewProtectedMiddleware }
|
||||
|
||||
func handle(request: Vapor.Request) async throws -> any AsyncResponseEncodable {
|
||||
@Dependency(\.database.purchaseOrders) var purchaseOrders
|
||||
switch self {
|
||||
@@ -220,6 +244,10 @@ extension SharedModels.ViewRoute.UserRoute {
|
||||
}
|
||||
}
|
||||
|
||||
var middleware: [any Middleware]? {
|
||||
viewProtectedMiddleware
|
||||
}
|
||||
|
||||
func handle(request: Request) async throws -> any AsyncResponseEncodable {
|
||||
@Dependency(\.database.users) var users
|
||||
switch self {
|
||||
@@ -271,6 +299,8 @@ extension SharedModels.ViewRoute.VendorRoute {
|
||||
}
|
||||
}
|
||||
|
||||
var middleware: [any Middleware]? { viewProtectedMiddleware }
|
||||
|
||||
func handle(request: Request) async throws -> any AsyncResponseEncodable {
|
||||
@Dependency(\.database) var database
|
||||
|
||||
@@ -318,6 +348,8 @@ extension SharedModels.ViewRoute.VendorRoute {
|
||||
|
||||
extension SharedModels.ViewRoute.VendorBranchRoute {
|
||||
|
||||
var middleware: [any Middleware]? { viewProtectedMiddleware }
|
||||
|
||||
func handle(request: Request) async throws -> any AsyncResponseEncodable {
|
||||
@Dependency(\.database) var database
|
||||
|
||||
|
||||
Reference in New Issue
Block a user