diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 00000000..de2210c9 --- /dev/null +++ b/.travis.yml @@ -0,0 +1 @@ +language: dart \ No newline at end of file diff --git a/README.md b/README.md index 5391e72b..68fd6f97 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ # Body Parser -![version 1.0.0-dev+1](https://img.shields.io/badge/version-1.0.0--dev-red.svg) +![version 1.0.0-dev+2](https://img.shields.io/badge/version-1.0.0--dev+2-red.svg) +![build status](https://travis-ci.org/thosakwe/body_parser.svg) **NOT YET PRODUCTION READY** diff --git a/lib/src/parse_body.dart b/lib/src/parse_body.dart index e9c953ca..0b611efb 100644 --- a/lib/src/parse_body.dart +++ b/lib/src/parse_body.dart @@ -17,42 +17,48 @@ import 'map_from_uri.dart'; Future parseBody(HttpRequest request) async { var result = new BodyParseResult(); - if (request.headers.contentType != null) { - if (request.headers.contentType.primaryType == 'multipart' && - request.headers.contentType.parameters.containsKey('boundary')) { - var parts = request - .transform(new MimeMultipartTransformer( - request.headers.contentType.parameters['boundary'])) - .map((part) => - HttpMultipartFormData.parse(part, defaultEncoding: UTF8)); + try { + if (request.headers.contentType != null) { + if (request.headers.contentType.primaryType == 'multipart' && + request.headers.contentType.parameters.containsKey('boundary')) { + var parts = request + .transform(new MimeMultipartTransformer( + request.headers.contentType.parameters['boundary'])) + .map((part) => + HttpMultipartFormData.parse(part, defaultEncoding: UTF8)); - await for (HttpMultipartFormData part in parts) { - if (part.isBinary || part.contentDisposition.parameters.containsKey("filename")) { - BytesBuilder builder = await part.fold(new BytesBuilder(), (BytesBuilder b, d) => b..add(d is! String ? d : d.codeUnits)); - var upload = new FileUploadInfo( - mimeType: part.contentType.mimeType, - name: part.contentDisposition.parameters['name'], - filename: part.contentDisposition.parameters['filename'] ?? 'file', - data: builder.takeBytes()); - result.files.add(upload); - } else if (part.isText) { - var text = await part.join(); - buildMapFromUri(result.body, '${part.contentDisposition.parameters["name"]}=$text'); - } else { - print("Found something else : ${part.contentDisposition}"); + await for (HttpMultipartFormData part in parts) { + if (part.isBinary || + part.contentDisposition.parameters.containsKey("filename")) { + BytesBuilder builder = await part.fold(new BytesBuilder(), + (BytesBuilder b, d) => b..add(d is! String ? d : d.codeUnits)); + var upload = new FileUploadInfo( + mimeType: part.contentType.mimeType, + name: part.contentDisposition.parameters['name'], + filename: + part.contentDisposition.parameters['filename'] ?? 'file', + data: builder.takeBytes()); + result.files.add(upload); + } else if (part.isText) { + var text = await part.join(); + buildMapFromUri(result.body, + '${part.contentDisposition.parameters["name"]}=$text'); + } } + } else if (request.headers.contentType.mimeType == + ContentType.JSON.mimeType) { + result.body + .addAll(JSON.decode(await request.transform(UTF8.decoder).join())); + } else if (request.headers.contentType.mimeType == + 'application/x-www-form-urlencoded') { + String body = await request.transform(UTF8.decoder).join(); + buildMapFromUri(result.body, body); } - } else if (request.headers.contentType.mimeType == - ContentType.JSON.mimeType) { - result.body - .addAll(JSON.decode(await request.transform(UTF8.decoder).join())); - } else if (request.headers.contentType.mimeType == - 'application/x-www-form-urlencoded') { - String body = await request.transform(UTF8.decoder).join(); - buildMapFromUri(result.body, body); + } else if (request.uri.hasQuery) { + buildMapFromUri(result.query, request.uri.query); } - } else if (request.uri.hasQuery) { - buildMapFromUri(result.query, request.uri.query); + } catch (e) { + // } return result; diff --git a/pubspec.yaml b/pubspec.yaml index 93b5f323..ee5c25f2 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: body_parser author: Tobe O -version: 1.0.0-dev+1 +version: 1.0.0-dev+2 description: Parse request bodies and query strings in Dart. homepage: https://github.com/thosakwe/body_parser dependencies: diff --git a/test/all_tests.dart b/test/all_test.dart similarity index 100% rename from test/all_tests.dart rename to test/all_test.dart