File indexing completed on 2024-04-28 03:54:48

0001 # This file is part of KDE
0002 # SPDX-FileCopyrightText: 2023 Nicolas Fella <nicolas.fella@gmx.de>
0003 #
0004 # SPDX-License-Identifier: LGPL-2.0-or-later
0005 
0006 from flask import Flask
0007 from flask import Response, redirect, request
0008 from flask_httpauth import HTTPBasicAuth
0009 import datetime
0010 
0011 app = Flask(__name__)
0012 auth = HTTPBasicAuth()
0013 
0014 @app.route("/mime/html", methods = ['GET'])
0015 def mime_html():
0016     return "<p>Hello, World!</p>"
0017 
0018 @app.route("/mime/calendar", methods = ['GET'])
0019 def mime_calendar():
0020     return Response("bla", mimetype='text/calendar')
0021 
0022 @app.route("/get/html", methods = ['GET'])
0023 def get_html():
0024     return "<p>Hello, World!</p>"
0025 
0026 @app.route("/get/calendar", methods = ['GET'])
0027 def get_calendar():
0028     data = "Some data\nthat\nhas\nnew\nlines\n"
0029     resp = Response(data, mimetype='text/calendar')
0030     return resp
0031 
0032 # Redirection
0033 
0034 # GET
0035 
0036 @app.route("/get/redirected", methods = ['GET'])
0037 def get_redirected():
0038     return "Itsa me, redirected\n"
0039 
0040 @app.route("/get/permanent_redirected", methods = ['GET'])
0041 def get_redirected_permanent():
0042     return "Itsa me, redirected permanently\n"
0043 
0044 # 301
0045 @app.route("/get/permanent_redirect", methods = ['GET'])
0046 def get_redirect_permanent():
0047     return redirect("/get/permanent_redirected", code=301)
0048 
0049 # 302
0050 @app.route("/get/redirect", methods = ['GET'])
0051 def get_redirect():
0052     return redirect("/get/redirected", code=302)
0053 
0054 # 303
0055 @app.route("/get/redirect_303", methods = ['GET'])
0056 def get_redirect_303():
0057     return redirect('/get/redirected', code=303)
0058 
0059 # 307
0060 @app.route("/get/redirect_307", methods = ['GET'])
0061 def get_redirect_307():
0062     return redirect('/get/redirected', code=307)
0063 
0064 # 308
0065 @app.route("/get/redirect_308", methods = ['GET'])
0066 def get_redirect_308():
0067     return redirect('/get/permanent_redirected', code=308)
0068 
0069 # POST
0070 
0071 @app.route("/post/redirected", methods = ['POST'])
0072 def post_redirected():
0073     return "Itsa me, redirected\n"
0074 
0075 @app.route("/post/permanent_redirected", methods = ['POST'])
0076 def post_redirected_permanent():
0077     return "Itsa me, redirected permanently\n"
0078 
0079 # 301
0080 @app.route("/post/permanent_redirect", methods = ['POST'])
0081 def post_redirect_permanent():
0082     return redirect('/get/permanent_redirected', code=301)
0083 
0084 # 302
0085 @app.route("/post/redirect", methods = ['POST'])
0086 def post_redirect():
0087     return redirect('/get/redirected', code=302)
0088 
0089 # 303
0090 @app.route("/post/redirect_303", methods = ['POST'])
0091 def post_redirect_303():
0092     return redirect('/get/redirected', code=303)
0093 
0094 # 307
0095 @app.route("/post/redirect_307", methods = ['POST'])
0096 def post_redirect_307():
0097     return redirect('/post/redirected', code=307)
0098 
0099 # 308
0100 @app.route("/post/redirect_308", methods = ['POST'])
0101 def post_redirect_308():
0102     return redirect('/post/permanent_redirected', code=308)
0103 
0104 # PUT
0105 
0106 @app.route("/put/redirected", methods = ['PUT'])
0107 def put_redirected():
0108     return "Itsa me, redirected\n"
0109 
0110 @app.route("/put/permanent_redirected", methods = ['PUT'])
0111 def put_redirected_permanent():
0112     return "Itsa me, redirected permanently\n"
0113 
0114 # 301
0115 @app.route("/put/permanent_redirect", methods = ['PUT'])
0116 def put_redirect_permanent():
0117     return redirect('/get/permanent_redirected', code=301)
0118 
0119 # 302
0120 @app.route("/put/redirect", methods = ['PUT'])
0121 def put_redirect():
0122     return redirect('/get/redirected', code=302)
0123 
0124 # 303
0125 @app.route("/put/redirect_303", methods = ['PUT'])
0126 def put_redirect_303():
0127     return redirect('/get/redirected', code=303)
0128 
0129 # 307
0130 @app.route("/put/redirect_307", methods = ['PUT'])
0131 def put_redirect_307():
0132     return redirect('/put/redirected', code=307)
0133 
0134 # 308
0135 @app.route("/put/redirect_308", methods = ['PUT'])
0136 def put_redirect_308():
0137     return redirect('/put/permanent_redirected', code=308)
0138 
0139 
0140 @app.route("/put/bla", methods = ['PUT'])
0141 def put_bla():
0142 
0143     if request.content_type != "text/html":
0144         return Response("", status=400)
0145 
0146     print("data", request.data)
0147     return request.data
0148 
0149 @app.route("/post/bla", methods = ['POST'])
0150 def post_bla():
0151     return "Got data of type " + request.content_type + ": " + request.data.decode('utf-8')
0152 
0153 # @app.route("/post/redirect", methods = ['POST'])
0154 # def post_redirect():
0155 #     return redirect("/post/bla", code=308)
0156 
0157 @app.route("/cookies/none", methods = ['GET'])
0158 def cookies_none():
0159     data = "Hello\n"
0160 
0161     resp = Response(data, mimetype='text/plain')
0162 
0163     return resp
0164 
0165 @app.route("/cookies/somecookie", methods = ['GET'])
0166 def cookies_somecookie():
0167     data = "Hello\n"
0168 
0169     resp = Response(data, mimetype='text/plain')
0170 
0171     expires_date = datetime.datetime(2045, 5, 13, 18, 52, 0)
0172 
0173     resp.set_cookie('userID', value="1234",  expires=expires_date, path="/get/calendar", domain="localhost", secure=False, httponly=True)
0174 
0175     return resp
0176 
0177 @app.route("/cookies/twocookies", methods = ['GET'])
0178 def cookies_twocookies():
0179     data = "Hello\n"
0180 
0181     resp = Response(data, mimetype='text/plain')
0182 
0183     expires_date = datetime.datetime(2045, 5, 13, 18, 52, 0)
0184 
0185     resp.set_cookie('userID', value="1234", expires=expires_date, path="/get/calendar", domain="localhost", secure=False, httponly=True)
0186     resp.set_cookie('konqi', value="Yo",  expires=expires_date, path="/get/text", domain="localhost", secure=False, httponly=True)
0187 
0188     return resp
0189 
0190 @app.route("/cookies/showsent", methods = ['GET'])
0191 def cookies_showsent():
0192     data = ""
0193     for key in request.cookies:
0194         data += key + ":" + request.cookies[key] + "\n"
0195 
0196     resp = Response(data, mimetype='text/plain')
0197     return resp
0198 
0199 @auth.verify_password
0200 def verify_password(username, password):
0201     return username == "nico" and password == "1234"
0202 
0203 @app.route('/auth/test')
0204 @auth.login_required
0205 def index():
0206     return "Hello"
0207 
0208 @app.route("/useragent/enforce")
0209 def useragent_enforce():
0210     ua = request.headers.get('User-Agent')
0211 
0212     print("ua:", ua)
0213 
0214     if ua == "my test UA":
0215         return "Hello"
0216     else:
0217         return Response("", status=400)
0218 
0219 @app.route("/error/no", methods = ['GET', 'PUT'])
0220 def error_no():
0221     return "Hello"
0222 
0223 @app.route("/error/400", methods = ['GET', 'PUT'])
0224 def error_400():
0225     return Response("", status=400)
0226 
0227 @app.route("/error/403", methods = ['GET', 'PUT'])
0228 def error_403():
0229     return Response("", status=403)
0230 
0231 @app.route("/error/405", methods = ['GET', 'PUT'])
0232 def error_405():
0233     return Response("", status=405)
0234 
0235 @app.route("/error/451", methods = ['GET', 'PUT'])
0236 def error_451():
0237     return Response("", status=451)
0238 
0239 @app.route("/error/500", methods = ['GET', 'PUT'])
0240 def error_500():
0241     return Response("", status=500)
0242 
0243 @app.route("/error/502", methods = ['GET', 'PUT'])
0244 def error_502():
0245     return Response("", status=502)
0246 
0247 @app.route("/error/507", methods = ['GET', 'PUT'])
0248 def error_507():
0249     return Response("", status=507)
0250 
0251 @app.route("/accept/rss")
0252 def accept_rss():
0253 
0254     accept = request.headers.get('Accept')
0255 
0256     if accept == "application/rss+xml;q=0.9, application/atom+xml;q=0.9, text/*;q=0.8, */*;q=0.7":
0257         return "Hello"
0258     else:
0259         return Response("", status=400)
0260 
0261 @app.route("/referrer/test")
0262 def referrer_test():
0263 
0264     if request.referrer == "http://kde.org":
0265         return "Hello"
0266     else:
0267         return Response("", status=400)
0268 
0269 @app.route("/headers/pineapple")
0270 def headers_ananas():
0271     pineapple = request.headers.get('Pineapple')
0272 
0273     if pineapple == "Ananas":
0274         return "Hello"
0275     else:
0276         return Response("", status=400)
0277 
0278 @app.route("/headers/pizza")
0279 def headers_pizza():
0280     pineapple = request.headers.get('Pineapple')
0281     pizza = request.headers.get('Pizza')
0282 
0283     if pineapple == "Ananas" and pizza == "yes":
0284         return "🤌"
0285     else:
0286         return Response("", status=400)