Skip to content

Commit ab88d94

Browse files
committed
Python: Add flask_admin tests
1 parent c2632cf commit ab88d94

File tree

5 files changed

+74
-0
lines changed

5 files changed

+74
-0
lines changed

python/ql/test/library-tests/frameworks/flask_admin/ConceptsTest.expected

Whitespace-only changes.
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import python
2+
import experimental.meta.ConceptsTest
3+
4+
class DedicatedResponseTest extends HttpServerHttpResponseTest {
5+
DedicatedResponseTest() { file.getShortName() = "response_test.py" }
6+
}
7+
8+
class OtherResponseTest extends HttpServerHttpResponseTest {
9+
OtherResponseTest() { not this instanceof DedicatedResponseTest }
10+
11+
override string getARelevantTag() { result = "HttpResponse" }
12+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
argumentToEnsureNotTaintedNotMarkedAsSpurious
2+
untaintedArgumentToEnsureTaintedNotMarkedAsMissing
3+
failures
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
import experimental.meta.InlineTaintTest
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
from flask import Flask, redirect
2+
from flask.views import MethodView
3+
import flask_admin
4+
5+
ensure_tainted = ensure_not_tainted = print
6+
7+
8+
app = Flask(__name__)
9+
10+
# unknown at least for our current analysis
11+
foo = "'/foo'"
12+
UNKNOWN_ROUTE = eval(foo) # $ getCode=foo
13+
14+
15+
class ExampleClass(flask_admin.BaseView):
16+
@flask_admin.expose('/')
17+
def foo(self): # $ MISSING: requestHandler
18+
return "foo"
19+
20+
@flask_admin.expose(url='/bar/<arg>')
21+
def bar(self, arg): # $ MISSING: requestHandler
22+
ensure_tainted(arg) # $ MISSING: tainted
23+
return "bar: " + arg
24+
25+
@flask_admin.expose_plugview("/flask-class")
26+
@flask_admin.expose_plugview(url="/flask-class/<arg>")
27+
class Nested(MethodView):
28+
def get(self, cls, arg="default"): # $ requestHandler routedParameter=arg SPURIOUS: routedParameter=cls
29+
assert isinstance(cls, ExampleClass)
30+
ensure_tainted(arg) # $ tainted
31+
ensure_not_tainted(cls) # $ SPURIOUS: tainted
32+
return "GET: " + arg
33+
34+
def post(self, cls, arg): # $ requestHandler routedParameter=arg SPURIOUS: routedParameter=cls
35+
assert isinstance(cls, ExampleClass)
36+
ensure_tainted(arg) # $ tainted
37+
ensure_not_tainted(cls) # $ SPURIOUS: tainted
38+
return "POST: " + arg
39+
40+
@flask_admin.expose_plugview(UNKNOWN_ROUTE)
41+
class WithUnknownRoute(MethodView):
42+
def get(self, cls, maybeRouted): # $ requestHandler routedParameter=maybeRouted SPURIOUS: routedParameter=cls
43+
ensure_tainted(maybeRouted) # $ tainted
44+
ensure_not_tainted(cls) # $ SPURIOUS: tainted
45+
return "ok"
46+
47+
48+
@app.route('/') # $ routeSetup="/"
49+
def index(): # $ requestHandler
50+
return redirect('/admin') # $ HttpRedirectResponse HttpResponse redirectLocation='/admin'
51+
52+
53+
if __name__ == "__main__":
54+
admin = flask_admin.Admin(app, name="Some Admin Interface")
55+
admin.add_view(ExampleClass())
56+
57+
print(app.url_map)
58+
app.run(debug=True)

0 commit comments

Comments
 (0)