|
1 | 1 | import json
|
2 | 2 |
|
3 | 3 | from flask import Flask, make_response, jsonify, Response, request, redirect
|
| 4 | +from werkzeug.datastructures import Headers |
4 | 5 |
|
5 | 6 | app = Flask(__name__)
|
6 | 7 |
|
@@ -117,7 +118,7 @@ def response_modification1(): # $requestHandler
|
117 | 118 | @app.route("/content-type/response-modification2") # $routeSetup="/content-type/response-modification2"
|
118 | 119 | def response_modification2(): # $requestHandler
|
119 | 120 | resp = make_response("<h1>hello</h1>") # $HttpResponse mimetype=text/html responseBody="<h1>hello</h1>"
|
120 |
| - resp.headers["content-type"] = "text/plain" # $ MISSING: HttpResponse mimetype=text/plain |
| 121 | + resp.headers["content-type"] = "text/plain" # $ headerWriteName=unsanitized headerWriteValue=sanitized MISSING: HttpResponse mimetype=text/plain |
121 | 122 | return resp # $ SPURIOUS: HttpResponse mimetype=text/html responseBody=resp
|
122 | 123 |
|
123 | 124 |
|
@@ -147,23 +148,23 @@ def Response3(): # $requestHandler
|
147 | 148 | @app.route("/content-type/Response4") # $routeSetup="/content-type/Response4"
|
148 | 149 | def Response4(): # $requestHandler
|
149 | 150 | # note: capitalization of Content-Type does not matter
|
150 |
| - resp = Response("<h1>hello</h1>", headers={"Content-TYPE": "text/plain"}) # $HttpResponse responseBody="<h1>hello</h1>" SPURIOUS: mimetype=text/html MISSING: mimetype=text/plain |
| 151 | + resp = Response("<h1>hello</h1>", headers={"Content-TYPE": "text/plain"}) # $ headerWriteBulk headerWriteName=unsanitized headerWriteValue=sanitized HttpResponse responseBody="<h1>hello</h1>" SPURIOUS: mimetype=text/html MISSING: mimetype=text/plain |
151 | 152 | return resp # $ SPURIOUS: HttpResponse mimetype=text/html responseBody=resp
|
152 | 153 |
|
153 | 154 |
|
154 | 155 | @app.route("/content-type/Response5") # $routeSetup="/content-type/Response5"
|
155 | 156 | def Response5(): # $requestHandler
|
156 | 157 | # content_type argument takes priority (and result is text/plain)
|
157 | 158 | # note: capitalization of Content-Type does not matter
|
158 |
| - resp = Response("<h1>hello</h1>", headers={"Content-TYPE": "text/html"}, content_type="text/plain; charset=utf-8") # $HttpResponse mimetype=text/plain responseBody="<h1>hello</h1>" |
| 159 | + resp = Response("<h1>hello</h1>", headers={"Content-TYPE": "text/html"}, content_type="text/plain; charset=utf-8") # $ headerWriteBulk headerWriteName=unsanitized headerWriteValue=sanitized HttpResponse mimetype=text/plain responseBody="<h1>hello</h1>" |
159 | 160 | return resp # $ SPURIOUS: HttpResponse mimetype=text/html responseBody=resp
|
160 | 161 |
|
161 | 162 |
|
162 | 163 | @app.route("/content-type/Response6") # $routeSetup="/content-type/Response6"
|
163 | 164 | def Response6(): # $requestHandler
|
164 | 165 | # mimetype argument takes priority over header (and result is text/plain)
|
165 | 166 | # note: capitalization of Content-Type does not matter
|
166 |
| - resp = Response("<h1>hello</h1>", headers={"Content-TYPE": "text/html"}, mimetype="text/plain") # $HttpResponse mimetype=text/plain responseBody="<h1>hello</h1>" |
| 167 | + resp = Response("<h1>hello</h1>", headers={"Content-TYPE": "text/html"}, mimetype="text/plain") # $ headerWriteBulk headerWriteName=unsanitized headerWriteValue=sanitized HttpResponse mimetype=text/plain responseBody="<h1>hello</h1>" |
167 | 168 | return resp # $ SPURIOUS: HttpResponse mimetype=text/html responseBody=resp
|
168 | 169 |
|
169 | 170 |
|
@@ -207,12 +208,44 @@ def setting_cookie(): # $requestHandler
|
207 | 208 | resp = make_response() # $ HttpResponse mimetype=text/html
|
208 | 209 | resp.set_cookie("key", "value") # $ CookieWrite CookieName="key" CookieValue="value"
|
209 | 210 | resp.set_cookie(key="key", value="value") # $ CookieWrite CookieName="key" CookieValue="value"
|
210 |
| - resp.headers.add("Set-Cookie", "key2=value2") # $ MISSING: CookieWrite CookieRawHeader="key2=value2" |
| 211 | + resp.headers.add("Set-Cookie", "key2=value2") # $ headerWriteName=unsanitized headerWriteValue=sanitized MISSING: CookieWrite CookieRawHeader="key2=value2" |
211 | 212 | resp.delete_cookie("key3") # $ CookieWrite CookieName="key3"
|
212 | 213 | resp.delete_cookie(key="key3") # $ CookieWrite CookieName="key3"
|
213 | 214 | return resp # $ SPURIOUS: HttpResponse mimetype=text/html responseBody=resp
|
214 | 215 |
|
215 | 216 | ################################################################################
|
| 217 | +# Headers |
| 218 | +################################################################################ |
| 219 | + |
| 220 | +@app.route("/headers") # $routeSetup="/headers" |
| 221 | +def headers(): # $requestHandler |
| 222 | + resp1 = Response() # $ HttpResponse mimetype=text/html |
| 223 | + resp1.headers['X-MyHeader'] = 'a' # $ headerWriteName=unsanitized headerWriteValue=sanitized |
| 224 | + resp2 = make_response() # $ HttpResponse mimetype=text/html |
| 225 | + resp2.headers['X-MyHeader'] = 'a' # $ headerWriteName=unsanitized headerWriteValue=sanitized |
| 226 | + resp2.headers.extend({'X-MyHeader2': 'b'}) # $ headerWriteBulk headerWriteName=unsanitized headerWriteValue=sanitized |
| 227 | + resp3 = make_response("hello", 200, {'X-MyHeader3': 'c'}) # $ HttpResponse mimetype=text/html responseBody="hello" headerWriteBulk headerWriteName=unsanitized headerWriteValue=sanitized |
| 228 | + resp4 = make_response("hello", {'X-MyHeader4': 'd'}) # $ HttpResponse mimetype=text/html responseBody="hello" headerWriteBulk headerWriteName=unsanitized headerWriteValue=sanitized |
| 229 | + return resp4 # $ SPURIOUS: HttpResponse mimetype=text/html responseBody=resp4 |
| 230 | + |
| 231 | +@app.route("/werkzeug-headers") # $routeSetup="/werkzeug-headers" |
| 232 | +def werkzeug_headers(): # $requestHandler |
| 233 | + response = Response() # $ HttpResponse mimetype=text/html |
| 234 | + headers = Headers() |
| 235 | + headers.add("X-MyHeader1", "a") # $ headerWriteName=unsanitized headerWriteValue=sanitized |
| 236 | + headers.add_header("X-MyHeader2", "b") # $ headerWriteName=unsanitized headerWriteValue=sanitized |
| 237 | + headers.set("X-MyHeader3", "c") # $ headerWriteName=unsanitized headerWriteValue=sanitized |
| 238 | + headers.setdefault("X-MyHeader4", "d") # $ headerWriteName=unsanitized headerWriteValue=sanitized |
| 239 | + headers.__setitem__("X-MyHeader5", "e") # $ headerWriteName=unsanitized headerWriteValue=sanitized |
| 240 | + headers["X-MyHeader6"] = "f" # $ headerWriteName=unsanitized headerWriteValue=sanitized |
| 241 | + h1 = {"X-MyHeader7": "g"} |
| 242 | + headers.extend(h1) # $ headerWriteBulk headerWriteName=unsanitized headerWriteValue=sanitized |
| 243 | + h2 = [("X-MyHeader8", "h")] |
| 244 | + headers.extend(h2) # $ headerWriteBulk headerWriteName=unsanitized headerWriteValue=sanitized |
| 245 | + response.headers = headers |
| 246 | + return response # $ SPURIOUS: HttpResponse mimetype=text/html responseBody=response |
| 247 | + |
| 248 | +################################################################################ |
216 | 249 |
|
217 | 250 |
|
218 | 251 | if __name__ == "__main__":
|
|
0 commit comments