/
__init__.py
67 lines (47 loc) · 1.91 KB
/
__init__.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
# -*- coding: utf-8 -*-
from flask import jsonify, request
import traceback
from lapdance import factory
from lapdance.core import cors, swagger
from lapdance.exceptions import LapdanceError
from ldap3.core.exceptions import LDAPException, LDAPOperationResult
from .users import bp as users_bp
from .groups import bp as groups_bp
def log_traceback(app, exception):
tb = traceback.format_tb(exception.__traceback__)
app.logger.debug(''.join(tb))
def register_blueprints(app, blueprints):
for bp in blueprints:
app.register_blueprint(bp, url_prefix='/{0}/{1}'.format('api', bp.name))
def create_app(*args, **kwargs):
app = factory.create_app(__name__, *args, **kwargs)
cors.init_app(app)
# Attach bundles
register_blueprints(app, [users_bp, groups_bp])
# Init swagger and inject model props
swagger.init_app(app)
@app.errorhandler(LDAPException)
def handle_ldap_error(error):
status = 400
if isinstance(error, LDAPOperationResult):
errmsg = error.__dict__
[errmsg.pop(k) for k in ['dn', 'response']]
else:
status = 500
errmsg = "LDAP error: {0}".format(error)
if app.config['DEBUG']:
log_traceback(app, error)
app.logger.error(errmsg)
response = errmsg if app.config.get('LAPDANCE_SHOW_LDAP_ERROR_DETAILS') else 'Error performing LDAP operation'
return jsonify(code=status, message=response), status
@app.errorhandler(LapdanceError)
def handle_invalid_usage(error):
msg = "{0} (path: {1}, method: {2})".format(error.message, request.path, request.method)
if app.config['DEBUG']:
log_traceback(app, error)
if str(error.status_code)[0] == '4': # Log info on HTTP 4xx
app.logger.info(msg)
else:
app.logger.warning(msg)
return jsonify(error.to_dict()), error.status_code
return app