From 7b4bafdf25b7ee8394fbfcd8bdc5603d75a1dd28 Mon Sep 17 00:00:00 2001 From: Javad Zobeidi Date: Thu, 25 Jul 2024 15:35:33 +0330 Subject: [PATCH 1/2] Fix Middleware handler issue --- lib/src/authentication/authenticate.dart | 1 - lib/src/http/middleware/middleware.dart | 12 ++++-------- lib/src/http/middleware/middleware_handler.dart | 5 ++--- .../middleware/web_socket_middleware_handler.dart | 5 ++--- 4 files changed, 8 insertions(+), 15 deletions(-) diff --git a/lib/src/authentication/authenticate.dart b/lib/src/authentication/authenticate.dart index 461101a..9061630 100644 --- a/lib/src/authentication/authenticate.dart +++ b/lib/src/authentication/authenticate.dart @@ -17,7 +17,6 @@ class Authenticate extends Middleware { } else { await Auth().guard(guard!).check(token ?? ''); } - return await next?.handle(req); } on JWTExpiredException { throw Unauthenticated(message: 'Token expired'); } diff --git a/lib/src/http/middleware/middleware.dart b/lib/src/http/middleware/middleware.dart index 3bbae47..fa18b67 100644 --- a/lib/src/http/middleware/middleware.dart +++ b/lib/src/http/middleware/middleware.dart @@ -4,18 +4,14 @@ import 'package:vania/vania.dart'; abstract class Middleware { Future handle(Request req); - Middleware? next; - void setNext(Middleware middleware) { - next = middleware; - } + @Deprecated('Will be deleted in the next versions') + Middleware? next; } abstract class WebSocketMiddleware { Future handle(HttpRequest req); - WebSocketMiddleware? next; - void setNext(WebSocketMiddleware middleware) { - next = middleware; - } + @Deprecated('Will be deleted in the next versions') + WebSocketMiddleware? next; } diff --git a/lib/src/http/middleware/middleware_handler.dart b/lib/src/http/middleware/middleware_handler.dart index 6895ee9..ea3c9af 100644 --- a/lib/src/http/middleware/middleware_handler.dart +++ b/lib/src/http/middleware/middleware_handler.dart @@ -3,8 +3,7 @@ import 'middleware.dart'; Future middlewareHandler( List middlewares, Request request) async { - for (int i = 0; i < middlewares.length - 1; i++) { - middlewares[i].setNext(middlewares[i + 1]); + for (Middleware middleware in middlewares) { + await middleware.handle(request); } - await middlewares.first.handle(request); } diff --git a/lib/src/http/middleware/web_socket_middleware_handler.dart b/lib/src/http/middleware/web_socket_middleware_handler.dart index 3bc09fc..148e830 100644 --- a/lib/src/http/middleware/web_socket_middleware_handler.dart +++ b/lib/src/http/middleware/web_socket_middleware_handler.dart @@ -3,8 +3,7 @@ import 'middleware.dart'; Future webSocketMiddlewareHandler( List middlewares, HttpRequest request) async { - for (int i = 0; i < middlewares.length - 1; i++) { - middlewares[i].setNext(middlewares[i + 1]); + for (WebSocketMiddleware middleware in middlewares) { + await middleware.handle(request); } - await middlewares.first.handle(request); } From 54d63f3de507971550eda3a1ec34a30b51b7d2a8 Mon Sep 17 00:00:00 2001 From: Javad Zobeidi Date: Thu, 25 Jul 2024 15:36:07 +0330 Subject: [PATCH 2/2] Fix Nested route group issue (#98) --- lib/src/route/router.dart | 40 ++++++++++++++++++++++++++++----------- 1 file changed, 29 insertions(+), 11 deletions(-) diff --git a/lib/src/route/router.dart b/lib/src/route/router.dart index 7158ef6..9b3a3b0 100644 --- a/lib/src/route/router.dart +++ b/lib/src/route/router.dart @@ -11,7 +11,7 @@ class Router { String? _prefix; String? _groupPrefix; String? _groupDomain; - List? _groupMiddleware; + final List _groupMiddleware = []; final List _routes = []; @@ -69,10 +69,10 @@ class Router { /// Adds middleware to the last added route. Router middleware([List? middleware]) { if (middleware != null) { - if (_routes.last.preMiddleware.isNotEmpty) { - middleware.addAll(_routes.last.preMiddleware); - } - _routes.last.preMiddleware = middleware; + _routes.last.preMiddleware = [ + ..._routes.last.preMiddleware, + ...middleware + ]; } return this; } @@ -81,7 +81,7 @@ class Router { Router prefix([String? prefix]) { if (prefix != null) { String basePath = _routes.last.path.startsWith('/') - ? _routes.last.path.replaceFirst('/', '') + ? _routes.last.path.substring(1) : _routes.last.path; _routes.last.path = prefix.endsWith("/") ? "$prefix$basePath" : "$prefix/$basePath"; @@ -254,16 +254,34 @@ class Router { static void group( Function callBack, { String? prefix, - List? middleware, + List middleware = const [], String? domain, }) { Router router = Router(); - router._groupPrefix = prefix; - router._groupMiddleware = middleware; router._groupDomain = domain; + + if (router._groupPrefix != null) { + if (prefix != null) { + router._groupPrefix = + "${router._groupPrefix}/$prefix".replaceAll(r'//', '/'); + } + } else { + router._groupPrefix = prefix; + } + List previousGroupMiddleware = + List.from(router._groupMiddleware); + router._groupMiddleware.addAll(middleware); + callBack(); - router._groupPrefix = null; - router._groupMiddleware = null; + + if (router._groupPrefix != null) { + router._groupPrefix = router._groupPrefix!.replaceAll("$prefix", ''); + } + + router._groupMiddleware + ..clear() + ..addAll(previousGroupMiddleware); + router._groupDomain = null; } }