Initial skeleton
commit
6fcee7e1cf
@ -0,0 +1,83 @@
|
||||
from marshmallow_dataclass import dataclass, class_schema
|
||||
from flask import Flask
|
||||
from flask_smorest import Api, Blueprint
|
||||
## from authlib.integrations.flask_oauth2 import ResourceProtector, current_token
|
||||
|
||||
|
||||
## # Define a protected resource with JWT validation
|
||||
## resource_protector = ResourceProtector()
|
||||
|
||||
## def validate_token():
|
||||
## token = current_token
|
||||
## claims = jwt.decode(token['access_token'], verify=False)
|
||||
## issuer = claims['iss']
|
||||
## jwks_uri = issuer + '/.well-known/jwks.json'
|
||||
## # perform JWK set discovery and verification
|
||||
## # return True if the token is valid, False otherwise
|
||||
## return True
|
||||
|
||||
|
||||
@dataclass
|
||||
class FileTransfer:
|
||||
s3: str
|
||||
pesit: str
|
||||
|
||||
FileTransferSchema = class_schema(FileTransfer)()
|
||||
|
||||
transfer_blp = Blueprint('transfer', 'transfer')
|
||||
|
||||
|
||||
@transfer_blp.route('/send', methods=['POST'])
|
||||
@transfer_blp.arguments(FileTransferSchema, location='json')
|
||||
@transfer_blp.response(200, description="Success")
|
||||
@transfer_blp.response(400, description="Bad Request")
|
||||
def send_file(transfer: FileTransfer):
|
||||
"""Send a file from S3 to PeSIT.
|
||||
|
||||
:param transfer: A JSON object with "source" and "destination" fields.
|
||||
:type transfer: FileTransfer
|
||||
:return: A message indicating success or failure.
|
||||
:rtype: str
|
||||
"""
|
||||
|
||||
print("SEND")
|
||||
|
||||
@transfer_blp.route('/receive', methods=['POST'])
|
||||
@transfer_blp.arguments(FileTransferSchema, location='json')
|
||||
@transfer_blp.response(200, description="Success")
|
||||
@transfer_blp.response(400, description="Bad Request")
|
||||
def receive_file(transfer: FileTransfer):
|
||||
"""Receive a file from PeSIT to S3"
|
||||
|
||||
:param transfer: A JSON object with "source" and "destination" fields.
|
||||
:type transfer: FileTransfer
|
||||
:return: A message indicating success or failure.
|
||||
:rtype: str
|
||||
"""
|
||||
|
||||
print("RECEIVE")
|
||||
|
||||
app = Flask(__name__)
|
||||
app.config["API_TITLE"] = "S3/PeSIT proxy"
|
||||
app.config["API_VERSION"] = "v1"
|
||||
app.config["OPENAPI_VERSION"] = "3.0.2"
|
||||
app.config["OPENAPI_URL_PREFIX"] = "oapi"
|
||||
app.config["OPENAPI_REDOC_PATH"] = "redoc"
|
||||
app.config["OPENAPI_REDOC_URL"] = "https://rebilly.github.io/ReDoc/releases/latest/redoc.min.js"
|
||||
app.config["OPENAPI_SWAGGER_UI_PATH"] = "swagger"
|
||||
app.config["OPENAPI_SWAGGER_UI_URL"] = "https://cdn.jsdelivr.net/npm/swagger-ui-dist/"
|
||||
|
||||
# OpenAPI endpoints: /oapi/openapi.json
|
||||
# /oapi/redoc
|
||||
# /opai/swagger
|
||||
|
||||
api = Api(app)
|
||||
|
||||
# register the transfer blueprint
|
||||
api.register_blueprint(transfer_blp)
|
||||
|
||||
def main(debug: bool = False):
|
||||
app.run(debug=debug)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main(debug=True)
|
@ -0,0 +1,12 @@
|
||||
[project]
|
||||
name = "pesit"
|
||||
version = "0.0.1"
|
||||
dependencies = [
|
||||
"flask",
|
||||
"flask_smorest",
|
||||
"marshmallow-dataclass",
|
||||
"authlib",
|
||||
]
|
||||
|
||||
[project.scripts]
|
||||
pesit_proxy = "pesit.proxy:main"
|
Loading…
Reference in New Issue