Verified Commit 55742586 authored by Dan Jones's avatar Dan Jones
Browse files

refactor: add options to generate schema script

parent b34b33b0
......@@ -14,11 +14,18 @@ from formats.alert import alert_schema
from flasgger import Swagger
from flask import Flask
import argparse
import json
import os
app = Flask(__name__)
url_prefix = os.getenv("URL_PREFIX", "")
# Enable running on domain sub-path
URL_PREFIX = os.getenv("URL_PREFIX", "")
# Allow env override of default host
FLASK_HOST = os.getenv("FLASK_HOST", "localhost")
# Allow env override of default port
FLASK_PORT = os.getenv("FLASK_PORT", 5000)
swagger_config = {
"openapi": "3.0.2",
......@@ -35,7 +42,7 @@ swagger_config = {
"route": "/soar_protocol.json",
}
],
"url_prefix": url_prefix,
"url_prefix": URL_PREFIX,
"paths": {},
"components": {
"schemas": {
......@@ -103,11 +110,49 @@ swagger_config = {
},
}
swag = Swagger(app, config=swagger_config, merge=True)
def serve():
"""
Run as local flask app on port 5000
"""
app = Flask(__name__)
Swagger(app, config=swagger_config, merge=True)
app.run(debug=False, host=FLASK_HOST, port=FLASK_PORT)
def write_schema(swagger_config, file_path):
"""
Dump schema to specified file
"""
json_schema = json.dumps(swagger_config, indent=2)
with open(file_path, "w") as f:
f.write(json_schema)
def get_options():
"""
Parse script arguments
"""
parser = argparse.ArgumentParser(description="Generate the schema",
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument("-s", "--serve", dest="run_flask", action="store_true", help="Run flask app", default=False)
parser.add_argument("-f", "--file", dest="output_file", action="store_true", help="Save output to schema file", default=False)
args = parser.parse_args()
config = vars(args)
# If no flag is specified default to running the flask server
if (all(v is False for v in config.values())):
config["run_flask"] = True
return config
flask_host = os.getenv(
"FLASK_HOST", "localhost"
) # Sets to whatever FLASK_HOST is, or defaults to localhost
if __name__ == "__main__":
app.run(debug=False, host=flask_host)
# Parse script args
config = get_options()
# Output compiled schema
if config.get("output_file"):
write_schema(swagger_config, "project/soar/swagger.json")
# Run flask app
if config.get("run_flask"):
serve()
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment