Skip to content

Commit

Permalink
Merge pull request #100 from javad-zobeidi/dev
Browse files Browse the repository at this point in the history
Nested route group issue (#98)
  • Loading branch information
javad-zobeidi authored Jul 25, 2024
2 parents 42622e5 + 54d63f3 commit 9b8f9d2
Show file tree
Hide file tree
Showing 5 changed files with 37 additions and 26 deletions.
1 change: 0 additions & 1 deletion lib/src/authentication/authenticate.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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');
}
Expand Down
12 changes: 4 additions & 8 deletions lib/src/http/middleware/middleware.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
5 changes: 2 additions & 3 deletions lib/src/http/middleware/middleware_handler.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,7 @@ import 'middleware.dart';

Future<void> middlewareHandler(
List<Middleware> 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);
}
5 changes: 2 additions & 3 deletions lib/src/http/middleware/web_socket_middleware_handler.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,7 @@ import 'middleware.dart';

Future<void> webSocketMiddlewareHandler(
List<WebSocketMiddleware> 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);
}
40 changes: 29 additions & 11 deletions lib/src/route/router.dart
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ class Router {
String? _prefix;
String? _groupPrefix;
String? _groupDomain;
List<Middleware>? _groupMiddleware;
final List<Middleware> _groupMiddleware = [];

final List<RouteData> _routes = [];

Expand Down Expand Up @@ -69,10 +69,10 @@ class Router {
/// Adds middleware to the last added route.
Router middleware([List<Middleware>? 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;
}
Expand All @@ -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";
Expand Down Expand Up @@ -254,16 +254,34 @@ class Router {
static void group(
Function callBack, {
String? prefix,
List<Middleware>? middleware,
List<Middleware> 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<Middleware> 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;
}
}

0 comments on commit 9b8f9d2

Please sign in to comment.