refactor: LDAP backend initialization

This commit is contained in:
Éloi Rivard 2023-12-27 10:57:22 +01:00
parent a237fa0198
commit e8b620588e
No known key found for this signature in database
GPG key ID: 7EDA204EA57DD184
10 changed files with 15 additions and 34 deletions

View file

@ -128,8 +128,6 @@ def create_app(config=None, validate=True, backend=None):
try: try:
setup_logging(app) setup_logging(app)
backend = setup_backend(app, backend) backend = setup_backend(app, backend)
if app.debug:
backend.install(app.config, True)
setup_flask_converters(app) setup_flask_converters(app)
setup_blueprints(app) setup_blueprints(app)
setup_jinja(app) setup_jinja(app)

View file

@ -8,4 +8,4 @@ class InstallationException(Exception):
def install(config, debug=False): def install(config, debug=False):
install_oidc(config, debug=debug) install_oidc(config, debug=debug)
BaseBackend.get().install(config, debug=debug) BaseBackend.get().install(config)

View file

@ -33,7 +33,7 @@ class BaseBackend:
self.teardown() self.teardown()
@classmethod @classmethod
def install(self, config, debug=False): def install(self, config):
""" """
This methods prepares the database to host canaille data. This methods prepares the database to host canaille data.
""" """

View file

@ -54,7 +54,7 @@ class Backend(BaseBackend):
setup_ldap_models(config) setup_ldap_models(config)
@classmethod @classmethod
def install(cls, config, debug=False): def install(cls, config):
cls.setup_schemas(config) cls.setup_schemas(config)
with cls(config).session(): with cls(config).session():
models.Token.install() models.Token.install()

View file

@ -3,7 +3,7 @@ from canaille.backends import BaseBackend
class Backend(BaseBackend): class Backend(BaseBackend):
@classmethod @classmethod
def install(cls, config, debug=False): def install(cls, config):
pass pass
def setup(self): def setup(self):

View file

@ -19,7 +19,7 @@ class Backend(BaseBackend):
db_session = None db_session = None
@classmethod @classmethod
def install(cls, config, debug=False): # pragma: no cover def install(cls, config): # pragma: no cover
engine = create_engine( engine = create_engine(
config["BACKENDS"]["SQL"]["SQL_DATABASE_URI"], config["BACKENDS"]["SQL"]["SQL_DATABASE_URI"],
echo=False, echo=False,

View file

@ -17,6 +17,7 @@ schemas = [
"ldif/memberof-config.ldif", "ldif/memberof-config.ldif",
"ldif/refint-config.ldif", "ldif/refint-config.ldif",
"ldif/ppolicy-config.ldif", "ldif/ppolicy-config.ldif",
"../canaille/backends/ldap/schemas/oauth2-openldap.ldif",
] ]
slapd = slapd.Slapd( slapd = slapd.Slapd(
@ -30,35 +31,18 @@ slapd = slapd.Slapd(
slapd.start() slapd.start()
try: try:
suffix_dc = slapd.suffix.split(",")[0][3:] slapd.init_tree()
slapd.ldapadd(
"\n".join(
[
"dn: " + slapd.suffix,
"objectClass: dcObject",
"objectClass: organization",
"dc: " + suffix_dc,
"o: " + suffix_dc,
"",
"dn: " + slapd.root_dn,
"objectClass: applicationProcess",
"cn: " + slapd.root_cn,
]
)
+ "\n"
)
for ldif in ( for ldif in (
"ldif/ppolicy.ldif", "ldif/ppolicy.ldif",
"ldif/bootstrap-users-tree.ldif", "ldif/bootstrap-users-tree.ldif",
"ldif/bootstrap-oidc-tree.ldif", "ldif/bootstrap-oidc-tree.ldif",
): ):
with open(ldif) as fd:
try: try:
slapd.ldapadd(fd.read()) slapd.ldapadd(None, ["-f", ldif])
except RuntimeError: except RuntimeError:
pass pass
slapd.logger.info("slapd initialized: all ldif files loaded")
slapd.wait() slapd.wait()
finally: finally:
slapd.stop() slapd.stop()

View file

@ -18,8 +18,7 @@ def slapd_server():
"demo/ldif/bootstrap-users-tree.ldif", "demo/ldif/bootstrap-users-tree.ldif",
"demo/ldif/bootstrap-oidc-tree.ldif", "demo/ldif/bootstrap-oidc-tree.ldif",
): ):
with open(ldif) as fd: slapd.ldapadd(None, ["-f", ldif])
slapd.ldapadd(fd.read())
yield slapd yield slapd
finally: finally:
slapd.stop() slapd.stop()

View file

@ -25,8 +25,7 @@ def slapd_server():
"demo/ldif/bootstrap-users-tree.ldif", "demo/ldif/bootstrap-users-tree.ldif",
"demo/ldif/bootstrap-users.ldif", "demo/ldif/bootstrap-users.ldif",
): ):
with open(ldif) as fd: slapd.ldapadd(None, ["-f", ldif])
slapd.ldapadd(fd.read())
yield slapd yield slapd
finally: finally:

View file

@ -127,6 +127,7 @@ def configuration(smtpd):
@pytest.fixture @pytest.fixture
def app(configuration, backend): def app(configuration, backend):
app = create_app(configuration, backend=backend) app = create_app(configuration, backend=backend)
backend.install(app.config)
with app.test_request_context(): with app.test_request_context():
yield app yield app