Angel 2 updates

This commit is contained in:
Tobe O 2018-09-11 17:21:06 -04:00
parent 84f84f9b3b
commit 9df3bbf425
5 changed files with 44 additions and 35 deletions

2
.gitignore vendored
View file

@ -26,3 +26,5 @@ doc/api/
# Don't commit pubspec lock file
# (Library packages only! Remove pattern if developing an application package)
pubspec.lock
.dart_tool

View file

@ -1,16 +0,0 @@
import 'dart:io';
import 'package:angel_framework/angel_framework.dart';
import 'package:angel_user_agent/angel_user_agent.dart';
main() async {
var app = new Angel()..before.add(parseUserAgent(strict: true));
app.get(
'/',
(UserAgent ua) => ua.isChrome
? 'Woohoo! You are running Chrome.'
: 'Sorry, we only support Google Chrome.');
var server = await app.startServer(InternetAddress.ANY_IP_V4, 3000);
print('Listening at http://${server.address.address}:${server.port}');
}

25
example/example.dart Normal file
View file

@ -0,0 +1,25 @@
import 'dart:io';
import 'package:angel_framework/angel_framework.dart';
import 'package:angel_user_agent/angel_user_agent.dart';
import 'package:user_agent/user_agent.dart';
main() async {
var app = new Angel();
var http = new AngelHttp(app);
app.get(
'/',
waterfall([
parseUserAgent,
(req, res) {
var ua = req.container.make<UserAgent>();
return ua.isChrome
? 'Woohoo! You are running Chrome.'
: 'Sorry, we only support Google Chrome.';
},
]),
);
var server = await http.startServer(InternetAddress.anyIPv4, 3000);
print('Listening at http://${server.address.address}:${server.port}');
}

View file

@ -1,25 +1,23 @@
import 'package:angel_framework/angel_framework.dart';
import 'package:user_agent/user_agent.dart';
export 'package:user_agent/user_agent.dart';
/// Injects a [UserAgent] into requests.
/// Injects a [UserAgent] factory into requests.
///
/// If [strict] is `true`, then requests without a user agent will be rejected.
RequestMiddleware parseUserAgent({bool strict: true}) {
return (RequestContext req, res) async {
/// Because it is an injected factory, the user agent will not be
/// parsed until you request it via `req.container.make<UserAgent>()`.
bool parseUserAgent(RequestContext req, ResponseContext res) {
req.container.registerFactory<UserAgent>((container) {
var agentString = req.headers.value('user-agent');
if (agentString == null && strict) {
if (agentString?.trim()?.isNotEmpty != true) {
throw new AngelHttpException.badRequest(
message: 'User-Agent header is required.');
} else if (agentString != null) {
Map<String, List<String>> map = {};
req.headers.forEach((k, v) => map[k] = v);
var userAgent = new UserAgent(agentString);
container.registerSingleton<UserAgent>(userAgent);
return userAgent;
}
});
req.inject(UserAgent, new UserAgent(agentString, headers: map));
} else
req.inject(UserAgent, null);
return true;
};
return true;
}

View file

@ -1,10 +1,10 @@
name: angel_user_agent
version: 1.0.1
description: Middleware to inject a User Agent object into requests.
version: 2.0.0
description: Angel middleware to parse and inject a User Agent object into requests.
author: Tobe O <thosakwe@gmail.com>
homepage: https://github.com/angel-dart/user_agent
environment:
sdk: ">=1.19.0"
sdk: ">=2.0.0-dev <3.0.0"
dependencies:
angel_framework: ^1.0.0-dev
user_agent: ^1.0.0-beta
angel_framework: ^2.0.0-alpha
user_agent: ^2.0.0