-
Notifications
You must be signed in to change notification settings - Fork 0
/
app.py
75 lines (60 loc) · 1.5 KB
/
app.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
"""
PyCryptoPro API
Application
"""
import connexion
from flask import Response, json
from injector import Binder
from flask_injector import FlaskInjector
from pycryptopro import (
CryptoProService,
CryptoProviderFactory,
Config,
CryptoProException
)
def crypto_pro_error(exception: CryptoProException) -> Response:
"""
Handles CryptoPro exceptions
"""
return Response(
response=json.dumps({
'code': exception.code,
'message': exception.message,
}),
status=400,
mimetype="application/json"
)
def get_config() -> Config:
"""
Gets config
"""
return Config({
'cert_manager_path': '/opt/cprocsp/bin/amd64/certmgr',
'cryptocp_path': '/opt/cprocsp/bin/amd64/cryptcp',
'temp_path': '/tmp',
'storage_name': 'ca',
'sign_storage_name': 'uMy',
'sign_storage_pin': '123'
})
def configure(binder: Binder) -> Binder:
"""
Sets DI configurations
"""
config = get_config()
provider_factory = CryptoProviderFactory(config)
binder.bind(
CryptoProService,
to=CryptoProService(provider_factory, config),
)
return binder
def create_app():
"""
Creates application
"""
app = connexion.App(__name__)
app.add_api('api.yaml')
app.add_error_handler(CryptoProException, crypto_pro_error)
FlaskInjector(app=app.app, modules=[configure])
return app
if __name__ == '__main__':
create_app().run(port=5000)