route_provider 3.1.6+1 route_provider: ^3.1.6+1 copied to clipboard
Provides backend routing for http-servers. Split routes into separates parts: authentification, controller for data processing and response for outputting the results.
import 'dart:async';
import 'dart:io';
import 'package:route_provider/route_provider.dart';
class RouteControllerError extends RouteController {
RouteControllerError();
@override
Future<Map> execute(HttpRequest request, Map params,
{AuthResponse authResponse}) async {
throw new RouteError(HttpStatus.notFound, "ERROR");
}
}
class APIController extends RestApiController {
@override
Future<Map> onGet(HttpRequest request, Map params,
{AuthResponse authResponse}) async {
throw new RouteError(HttpStatus.internalServerError, 'Not supported');
}
}
class MyAuth implements Auth {
bool authed = false;
MyAuth({this.authed: false});
@override
Future<AuthResponse> isAuthed(HttpRequest request, Map params) async =>
this.authed ? new AuthResponse() : null;
}
Future main() async {
HttpServer server = await HttpServer.bind(InternetAddress.loopbackIPv4, 4040);
new RouteProvider(server)
..route(
url: '/',
responser: new FileResponse("docroot/home.html"),
auth: new MyAuth(authed: true))
..route(
url: '/',
responser: new FolderResponse("docroot/"),
auth: new MyAuth(authed: true))
..route(
url: '/img',
responser: new FolderResponse("docroot/assets/img"),
auth: new MyAuth(authed: true))
..route(
url: '/assets/**',
responser: new FolderResponse("docroot/assets/"),
auth: new MyAuth(authed: true))
..route(
url: '/js/**',
responser: new FolderResponse("docroot/code/"),
auth: new MyAuth(authed: true))
..route(
url: '/error',
controller: new RouteControllerError(),
responser: new FileResponse("docroot/home.html"),
auth: new MyAuth(authed: true))
..route(
url: '/error2',
controller: new APIController(),
responser: new FileResponse("docroot/home.html"),
auth: new MyAuth(authed: true))
..route(
url: '/noauth',
controller: new APIController(),
responser: new FileResponse("docroot/home.html"),
auth: new MyAuth(authed: false))
..start();
print('listening on localhost, port ${server.port}');
}