Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(885)

Side by Side Diff: pkg/shelf/lib/src/response.dart

Issue 596573002: pkg/shelf Include default bodies for 'Not Found' and 'Forbidden' Response (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: changelog tweaks and ready for publish Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « pkg/shelf/CHANGELOG.md ('k') | pkg/shelf/pubspec.yaml » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library shelf.response; 5 library shelf.response;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 import 'dart:convert'; 8 import 'dart:convert';
9 9
10 import 'package:http_parser/http_parser.dart'; 10 import 'package:http_parser/http_parser.dart';
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
137 Response.notModified({Map<String, String> headers, 137 Response.notModified({Map<String, String> headers,
138 Map<String, Object> context}) 138 Map<String, Object> context})
139 : this(304, headers: _addHeader( 139 : this(304, headers: _addHeader(
140 headers, 'date', formatHttpDate(new DateTime.now())), 140 headers, 'date', formatHttpDate(new DateTime.now())),
141 context: context); 141 context: context);
142 142
143 /// Constructs a 403 Forbidden response. 143 /// Constructs a 403 Forbidden response.
144 /// 144 ///
145 /// This indicates that the server is refusing to fulfill the request. 145 /// This indicates that the server is refusing to fulfill the request.
146 /// 146 ///
147 /// [body] is the response body. It may be either a [String], a 147 /// [body] is the response body. It may be a [String], a [Stream<List<int>>],
148 /// [Stream<List<int>>], or `null` to indicate no body. If it's a [String], 148 /// or `null`. If it's a [String], [encoding] is used to encode it to a
149 /// [encoding] is used to encode it to a [Stream<List<int>>]. It defaults to 149 /// [Stream<List<int>>]. The default encoding is UTF-8. If it's `null` or not
150 /// UTF-8. 150 /// passed, a default error message is used.
151 /// 151 ///
152 /// If [encoding] is passed, the "encoding" field of the Content-Type header 152 /// If [encoding] is passed, the "encoding" field of the Content-Type header
153 /// in [headers] will be set appropriately. If there is no existing 153 /// in [headers] will be set appropriately. If there is no existing
154 /// Content-Type header, it will be set to "application/octet-stream". 154 /// Content-Type header, it will be set to "application/octet-stream".
155 Response.forbidden(body, {Map<String, String> headers, 155 Response.forbidden(body, {Map<String, String> headers,
156 Encoding encoding, Map<String, Object> context}) 156 Encoding encoding, Map<String, Object> context})
157 : this(403, body: body, headers: headers, 157 : this(403,
158 headers: body == null ? _adjustErrorHeaders(headers) : headers,
159 body: body == null ? 'Forbidden' : body,
158 context: context); 160 context: context);
159 161
160 /// Constructs a 404 Not Found response. 162 /// Constructs a 404 Not Found response.
161 /// 163 ///
162 /// This indicates that the server didn't find any resource matching the 164 /// This indicates that the server didn't find any resource matching the
163 /// requested URI. 165 /// requested URI.
164 /// 166 ///
165 /// [body] is the response body. It may be either a [String], a 167 /// [body] is the response body. It may be a [String], a [Stream<List<int>>],
166 /// [Stream<List<int>>], or `null` to indicate no body. If it's a [String], 168 /// or `null`. If it's a [String], [encoding] is used to encode it to a
167 /// [encoding] is used to encode it to a [Stream<List<int>>]. It defaults to 169 /// [Stream<List<int>>]. The default encoding is UTF-8. If it's `null` or not
168 /// UTF-8. 170 /// passed, a default error message is used.
169 /// 171 ///
170 /// If [encoding] is passed, the "encoding" field of the Content-Type header 172 /// If [encoding] is passed, the "encoding" field of the Content-Type header
171 /// in [headers] will be set appropriately. If there is no existing 173 /// in [headers] will be set appropriately. If there is no existing
172 /// Content-Type header, it will be set to "application/octet-stream". 174 /// Content-Type header, it will be set to "application/octet-stream".
173 Response.notFound(body, {Map<String, String> headers, Encoding encoding, 175 Response.notFound(body, {Map<String, String> headers, Encoding encoding,
174 Map<String, Object> context}) 176 Map<String, Object> context})
175 : this(404, body: body, headers: headers, 177 : this(404,
178 headers: body == null ? _adjustErrorHeaders(headers) : headers,
179 body: body == null ? 'Not Found' : body,
176 context: context); 180 context: context);
177 181
178 /// Constructs a 500 Internal Server Error response. 182 /// Constructs a 500 Internal Server Error response.
179 /// 183 ///
180 /// This indicates that the server had an internal error that prevented it 184 /// This indicates that the server had an internal error that prevented it
181 /// from fulfilling the request. 185 /// from fulfilling the request.
182 /// 186 ///
183 /// [body] is the response body. It may be either a [String], a 187 /// [body] is the response body. It may be a [String], a [Stream<List<int>>],
184 /// [Stream<List<int>>], or `null` to indicate no body. If it's `null` or not 188 /// or `null`. If it's a [String], [encoding] is used to encode it to a
185 /// passed, a default error message is used. If it's a [String], [encoding] is 189 /// [Stream<List<int>>]. The default encoding is UTF-8. If it's `null` or not
186 /// used to encode it to a [Stream<List<int>>]. It defaults to UTF-8. 190 /// passed, a default error message is used.
187 /// 191 ///
188 /// If [encoding] is passed, the "encoding" field of the Content-Type header 192 /// If [encoding] is passed, the "encoding" field of the Content-Type header
189 /// in [headers] will be set appropriately. If there is no existing 193 /// in [headers] will be set appropriately. If there is no existing
190 /// Content-Type header, it will be set to "application/octet-stream". 194 /// Content-Type header, it will be set to "application/octet-stream".
191 Response.internalServerError({body, Map<String, String> headers, 195 Response.internalServerError({body, Map<String, String> headers,
192 Encoding encoding, Map<String, Object> context}) 196 Encoding encoding, Map<String, Object> context})
193 : this(500, 197 : this(500,
194 headers: body == null ? _adjust500Headers(headers) : headers, 198 headers: body == null ? _adjustErrorHeaders(headers) : headers,
195 body: body == null ? 'Internal Server Error' : body, 199 body: body == null ? 'Internal Server Error' : body,
196 context: context); 200 context: context);
197 201
198 /// Constructs an HTTP response with the given [statusCode]. 202 /// Constructs an HTTP response with the given [statusCode].
199 /// 203 ///
200 /// [statusCode] must be greater than or equal to 100. 204 /// [statusCode] must be greater than or equal to 100.
201 /// 205 ///
202 /// [body] is the response body. It may be either a [String], a 206 /// [body] is the response body. It may be either a [String], a
203 /// [Stream<List<int>>], or `null` to indicate no body. If it's `null` or not 207 /// [Stream<List<int>>], or `null` to indicate no body.
204 /// passed, a default error message is used. If it's a [String], [encoding] is 208 /// If it's a [String], [encoding] is used to encode it to a
205 /// used to encode it to a [Stream<List<int>>]. It defaults to UTF-8. 209 /// [Stream<List<int>>]. The default encoding is UTF-8.
206 /// 210 ///
207 /// If [encoding] is passed, the "encoding" field of the Content-Type header 211 /// If [encoding] is passed, the "encoding" field of the Content-Type header
208 /// in [headers] will be set appropriately. If there is no existing 212 /// in [headers] will be set appropriately. If there is no existing
209 /// Content-Type header, it will be set to "application/octet-stream". 213 /// Content-Type header, it will be set to "application/octet-stream".
210 Response(this.statusCode, {body, Map<String, String> headers, 214 Response(this.statusCode, {body, Map<String, String> headers,
211 Encoding encoding, Map<String, Object> context}) 215 Encoding encoding, Map<String, Object> context})
212 : super(_bodyToStream(body, encoding), 216 : super(_bodyToStream(body, encoding),
213 headers: _adjustHeaders(headers, encoding), 217 headers: _adjustHeaders(headers, encoding),
214 context: context) { 218 context: context) {
215 if (statusCode < 100) { 219 if (statusCode < 100) {
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
276 String value) { 280 String value) {
277 headers = headers == null ? {} : new Map.from(headers); 281 headers = headers == null ? {} : new Map.from(headers);
278 headers[name] = value; 282 headers[name] = value;
279 return headers; 283 return headers;
280 } 284 }
281 285
282 /// Adds content-type information to [headers]. 286 /// Adds content-type information to [headers].
283 /// 287 ///
284 /// Returns a new map without modifying [headers]. This is used to add 288 /// Returns a new map without modifying [headers]. This is used to add
285 /// content-type information when creating a 500 response with a default body. 289 /// content-type information when creating a 500 response with a default body.
286 Map<String, String> _adjust500Headers(Map<String, String> headers) { 290 Map<String, String> _adjustErrorHeaders(Map<String, String> headers) {
287 if (headers == null || headers['content-type'] == null) { 291 if (headers == null || headers['content-type'] == null) {
288 return _addHeader(headers, 'content-type', 'text/plain'); 292 return _addHeader(headers, 'content-type', 'text/plain');
289 } 293 }
290 294
291 var contentType = new MediaType.parse(headers['content-type']) 295 var contentType = new MediaType.parse(headers['content-type'])
292 .change(mimeType: 'text/plain'); 296 .change(mimeType: 'text/plain');
293 return _addHeader(headers, 'content-type', contentType.toString()); 297 return _addHeader(headers, 'content-type', contentType.toString());
294 } 298 }
295 299
296 /// Converts [location], which may be a [String] or a [Uri], to a [String]. 300 /// Converts [location], which may be a [String] or a [Uri], to a [String].
297 /// 301 ///
298 /// Throws an [ArgumentError] if [location] isn't a [String] or a [Uri]. 302 /// Throws an [ArgumentError] if [location] isn't a [String] or a [Uri].
299 String _locationToString(location) { 303 String _locationToString(location) {
300 if (location is String) return location; 304 if (location is String) return location;
301 if (location is Uri) return location.toString(); 305 if (location is Uri) return location.toString();
302 306
303 throw new ArgumentError('Response location must be a String or Uri, was ' 307 throw new ArgumentError('Response location must be a String or Uri, was '
304 '"$location".'); 308 '"$location".');
305 } 309 }
OLDNEW
« no previous file with comments | « pkg/shelf/CHANGELOG.md ('k') | pkg/shelf/pubspec.yaml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698