· 5 years ago · Dec 17, 2020, 09:08 PM
1from flask import Flask, request, Response
2from flask_sqlalchemy import SQLAlchemy
3from sqlalchemy import exc
4import random, string
5import json
6import os.path
7app = Flask(__name__)
8app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
9db = SQLAlchemy(app)
10
11class User(db.Model):
12 id=db.Column(db.Integer, nullable=False, primary_key=True, autoincrement=True)
13 api_key=db.Column(db.String,nullable=False)
14 files = db.relationship("File", backref="user", lazy=True)
15class File(db.Model):
16 id=db.Column(db.String, nullable=False, primary_key=True )
17 user_id=db.Column(db.Integer, db.ForeignKey('user.id'))
18
19if(not os.path.exists('test.db')):
20
21 db.create_all()
22
23@app.route("/upload/<string:id>", methods=["POST"])
24def upload_file(id):
25 user = User.query.filter_by(api_key=request.headers.get('api-key')).first()
26 if(user is None):
27 return "invalid API Key", 403
28 try:
29 file = File(id = id, user_id = user.id)
30 db.session.add(file)
31 #upload file to s3 with the id
32 db.session.commit()
33 return "File created", 200
34 except exc.IntegrityError:
35 message="A file with the same id already exists"
36 return message
37
38@app.route("/files", methods=["GET"])
39def list_files():
40 user = User.query.filter_by(api_key=request.headers.get('api-key')).first()
41 if user is not None:
42 files = []
43 for file in user.files:
44 files.append(file.id)
45 return json.dumps(files)
46 else:
47 return "Invalid API Key", 403
48
49@app.route("/files/<string:id>", methods=["GET"])
50def download_file(id):
51 file = File.query.filter_by(id = id).first()
52 user = User.query.filter_by(api_key=request.headers.get('api-key')).first()
53 if user is None or file.user_id != user.id:
54 return "Bad Request", 403
55 else:
56 #get the file with id from S3
57 pass
58@app.route("/delete/<string:id>", methods=["DELETE"])
59def delete_file(id):
60 file = File.query.filter_by(id = id).first()
61 user = User.query.filter_by(api_key=request.headers.get('api-key')).first()
62 if user is None or file.user_id != user.id:
63 return "Bad Request", 403
64 else:
65 #delete file from S3
66 db.session.delete(file)
67 db.session.commit()
68