Projekt

Obecné

Profil

Stáhnout (3.55 KB) Statistiky
| Větev: | Tag: | Revize:
1 62d64d21 Stanislav Král
import os
2 1fa243ca Jan Pašek
3
from flask import Flask, redirect
4
from injector import Injector
5 0cf35f70 Stanislav Král
from flask_injector import FlaskInjector
6 1fa243ca Jan Pašek
7
from src.config import configuration
8
from src.config.connection_provider import ConnectionProvider
9 5b57121e Captain_Trojan
from src.controllers.certificates_controller import CertController
10 81dbb479 Jan Pašek
from src.services.cryptography import CryptographyService, CryptographyException
11 6e333f54 Stanislav Král
12 61535019 Stanislav Král
app = Flask(__name__)
13 6e333f54 Stanislav Král
14
15
@app.route('/')
16
def index():
17 2e646e3b Jan Pašek
    return redirect("/static/index.html")
18 6e333f54 Stanislav Král
19
20 5b57121e Captain_Trojan
@app.route('/api/certificates', methods=["POST"])
21 0cf35f70 Stanislav Král
def create_certificate(certificate_controller: CertController):
22 1fa243ca Jan Pašek
    return certificate_controller.create_certificate()
23 5b57121e Captain_Trojan
24
25
@app.route('/api/certificates', methods=["GET"])
26 0cf35f70 Stanislav Král
def get_cert_list(certificate_controller: CertController):
27 1fa243ca Jan Pašek
    return certificate_controller.get_certificate_list()
28 5b57121e Captain_Trojan
29
30 fb987403 Captain_Trojan
@app.route('/api/certificates/<id>', methods=["GET"])
31 0cf35f70 Stanislav Král
def get_cert(id, certificate_controller: CertController):
32 1fa243ca Jan Pašek
    return certificate_controller.get_certificate_by_id(id)
33 fb987403 Captain_Trojan
34
35 5b6d9513 Captain_Trojan
@app.route('/api/certificates/<id>/details', methods=["GET"])
36 0cf35f70 Stanislav Král
def get_cert_details(id, certificate_controller: CertController):
37 1fa243ca Jan Pašek
    return certificate_controller.get_certificate_details_by_id(id)
38 5b6d9513 Captain_Trojan
39
40 d53c2fdc Captain_Trojan
@app.route('/api/certificates/<id>/root', methods=["GET"])
41 0cf35f70 Stanislav Král
def get_cert_root(id, certificate_controller: CertController):
42 1fa243ca Jan Pašek
    return certificate_controller.get_certificate_root_by_id(id)
43 d53c2fdc Captain_Trojan
44
45 aa740737 Captain_Trojan
@app.route('/api/certificates/<id>/chain', methods=["GET"])
46 0cf35f70 Stanislav Král
def get_cert_chain(id, certificate_controller: CertController):
47 1fa243ca Jan Pašek
    return certificate_controller.get_certificate_trust_chain_by_id(id)
48
49
50 cfda1725 Stanislav Král
@app.route('/api/certificates/<id>/public_key', methods=["GET"])
51
def get_public_key_of_a_certificate(id, certificate_controller: CertController):
52
    return certificate_controller.get_public_key_of_a_certificate(id)
53
54 61535019 Stanislav Král
def initialize_app(application) -> bool:
55 81dbb479 Jan Pašek
    """
56
    Initializes the application
57
        -   configure dependency injection
58
        -   check whether OpenSSL is on the system
59 61535019 Stanislav Král
    :param application Flask Application to be initialized.
60
    :return: boolean flag indicating whether initialization was successful or not
61 81dbb479 Jan Pašek
    """
62 1fa243ca Jan Pašek
63 0cf35f70 Stanislav Král
    modules = [configuration.configure_env_variable, ConnectionProvider]
64
    injector = Injector(modules)
65 61535019 Stanislav Král
    FlaskInjector(app=application, modules=modules)
66 aa740737 Captain_Trojan
67 81dbb479 Jan Pašek
    # There's a little dependency on the CryptoService, which is not a pretty thing from
68
    # architectural point of view. However it is only a minimal piece of code and
69
    # it makes sense to do it in this way instead of trying to run openssl via subprocess here
70
    cryptography_service = injector.get(CryptographyService)
71
    try:
72
        # if version string is returned, OpenSSL is present on the system
73
        print(f"Using {cryptography_service.get_openssl_version()}")
74
        # TODO log the version instead of prining it out
75
        return True
76
    except CryptographyException:
77
        # If getting the version string throws an exception the OpenSSL is not available
78
        print("OpenSSL was not located on the system. Application will now exit.")
79
        # TODO add logging here
80
        return False
81
82 aa740737 Captain_Trojan
83 61535019 Stanislav Král
# app initialization must follow endpoint declaration (after all Flask decoration)
84
with app.app_context():
85
    if not initialize_app(app):
86
        # TODO log this
87
        print("Failed to initialize app, aborting...")
88
        exit(-1)
89
90 6e333f54 Stanislav Král
if __name__ == '__main__':
91 1fa243ca Jan Pašek
    app_host = "0.0.0.0"
92
    app_port = 5000
93 62d64d21 Stanislav Král
94 9832694f Stanislav Král
    # TODO better load this from config.py
95 62d64d21 Stanislav Král
    if "FLASK_HOST" in os.environ:
96 1fa243ca Jan Pašek
        app_host = os.environ["FLASK_HOST"]
97 62d64d21 Stanislav Král
98
    if "FLASK_PORT" in os.environ:
99 1fa243ca Jan Pašek
        app_host = os.environ["FLASK_PORT"]
100 62d64d21 Stanislav Král
101 1fa243ca Jan Pašek
    app.run(host=app_host, port=app_port)