121 lines
3.6 KiB
Python
121 lines
3.6 KiB
Python
from flask import Flask, request
|
|
from flask_restful import Resource, Api
|
|
from sqlalchemy import create_engine
|
|
from json import dumps
|
|
from flask.json import jsonify
|
|
|
|
db_connect = create_engine('sqlite:///chinook.db')
|
|
app = Flask(__name__)
|
|
api = Api(app)
|
|
|
|
class Employees(Resource):
|
|
def get(self):
|
|
conn = db_connect.connect() # connect to database
|
|
query = conn.execute("select * from employees") # This line performs query and returns json result
|
|
return {'employees': [i[0] for i in query.cursor.fetchall()]} # Fetches first column that is Employee ID
|
|
|
|
class Tracks(Resource):
|
|
def get(self):
|
|
conn = db_connect.connect()
|
|
query = conn.execute("select trackid, name, composer, unitprice from tracks;")
|
|
result = {'data': [dict(zip(tuple (query.keys()) ,i)) for i in query.cursor]}
|
|
return jsonify(result)
|
|
|
|
class Employees_Name(Resource):
|
|
def get(self, employee_id):
|
|
conn = db_connect.connect()
|
|
query = conn.execute("select * from employees where EmployeeId =%d " %int(employee_id))
|
|
result = {'data': [dict(zip(tuple (query.keys()) ,i)) for i in query.cursor]}
|
|
return jsonify(result)
|
|
|
|
|
|
@app.route("/")
|
|
def hello():
|
|
return """
|
|
<pre>
|
|
|
|
|
|
Join the game
|
|
|
|
- Create an on account.ungleich.ch
|
|
-> creates ldap account
|
|
|
|
Creating the game:
|
|
|
|
- Create IPv6 only VM + http proxy
|
|
- Intro on main page
|
|
- Score list below
|
|
- Users can be clicked
|
|
|
|
</pre>
|
|
|
|
"""
|
|
|
|
|
|
api.add_resource(Employees, '/employees') # Route_1
|
|
api.add_resource(Employees_Name, '/employees/<employee_id>') # Route_3
|
|
#api.add_resource(Tracks, '/tracks') # Route_2
|
|
|
|
|
|
|
|
|
|
# def get_ip_address():
|
|
# args = self.require_args("network", "user")
|
|
|
|
# # Needs to be fixed with ungleich-otp
|
|
# username=args['user']
|
|
|
|
# if request.method == 'GET':
|
|
# return Response("""
|
|
# This is an easy level - just register any /64 network
|
|
# that you fully control. After submission the game server will generate
|
|
# a random IPv6 address in this network.
|
|
# """)
|
|
|
|
# client = etcd.Client(port=2379)
|
|
# try:
|
|
# data = client.read("/ungleichgame/v1/{}/network".format(username))
|
|
# # FIXME: differentiate keynotfound and other errors
|
|
# except Exception as e:
|
|
# return Response(status=400, response="Cannot read your network, try registering first (error: {})".format(e))
|
|
|
|
# return Response("data={}".format(data.value))
|
|
# address = get_random_ip(data.value)
|
|
# # FIXME: catch errors
|
|
# client.write("/ungleichgame/v1/{}/address".format(username), address)
|
|
|
|
# return Response("Your IPv6 address for this game is {}. Make it pingable and post to /level/1/result".format(address))
|
|
|
|
# @app.route("/level/2", methods=['GET', 'POST']) # post for username
|
|
# def pingme():
|
|
# parser = reqparse.RequestParser()
|
|
# parser.add_argument('user', required=True)
|
|
# args = parser.parse_args()
|
|
|
|
# # Needs to be fixed with ungleich-otp
|
|
# username=args['user']
|
|
|
|
# if request.method == 'GET':
|
|
# return Response("""
|
|
# Proof that you can really control the network that you submitted:
|
|
|
|
# - Setup the IPv6 address to be ping6 able globally
|
|
# - POST to this address when it is configured
|
|
# """)
|
|
|
|
# if request.method == 'POST':
|
|
# try:
|
|
# data = client.read("/ungleichgame/v1/{}/address".format(username), address)
|
|
# except Exception as e:
|
|
# return Response(status=400,
|
|
# response="""
|
|
# You need to register a network before trying to be reachable.
|
|
# Please go back to Level 1 for registering your network.
|
|
# """)
|
|
# return Response("something good")
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
app.run(port='5002')
|