Moved user and group management in the core submodule

This commit is contained in:
Éloi Rivard 2023-04-09 13:34:38 +02:00
parent ac64f034f3
commit 08f8bfbfdb
36 changed files with 69 additions and 70 deletions

View file

@ -115,16 +115,16 @@ def setup_themer(app):
def setup_blueprints(app):
import canaille.account
import canaille.admin
import canaille.groups
import canaille.core.account
import canaille.core.admin
import canaille.core.groups
import canaille.oidc.blueprints
app.url_map.strict_slashes = False
app.register_blueprint(canaille.account.bp)
app.register_blueprint(canaille.admin.bp)
app.register_blueprint(canaille.groups.bp)
app.register_blueprint(canaille.core.account.bp)
app.register_blueprint(canaille.core.admin.bp)
app.register_blueprint(canaille.core.groups.bp)
app.register_blueprint(canaille.oidc.blueprints.bp)
@ -174,7 +174,7 @@ def create_app(config=None, validate=True):
try:
from .oidc.oauth import setup_oauth
from .ldap_backend.backend import init_backend
from .i18n import setup_i18n
from .utils.i18n import setup_i18n
setup_logging(app)
init_backend(app)

View file

@ -112,7 +112,7 @@ if HAS_FAKER: # pragma: no branch
Populate the database with generated random users.
"""
from canaille.populate import fake_users
from canaille.core.populate import fake_users
fake_users(ctx.obj["number"])
@ -130,6 +130,6 @@ if HAS_FAKER: # pragma: no branch
Populate the database with generated random groups.
"""
from canaille.populate import fake_groups
from canaille.core.populate import fake_groups
fake_groups(ctx.obj["number"], nb_users_max)

View file

View file

@ -6,6 +6,18 @@ from typing import List
import pkg_resources
import wtforms
from canaille.utils import b64_to_obj
from canaille.utils import default_fields
from canaille.utils import login_placeholder
from canaille.utils import obj_to_b64
from canaille.utils import profile_hash
from canaille.utils.flask import current_user
from canaille.utils.flask import permissions_needed
from canaille.utils.flask import render_htmx_template
from canaille.utils.flask import request_is_htmx
from canaille.utils.flask import smtp_needed
from canaille.utils.flask import user_needed
from canaille.utils.forms import TableForm
from flask import abort
from flask import Blueprint
from flask import current_app
@ -33,18 +45,6 @@ from .mails import send_password_initialization_mail
from .mails import send_password_reset_mail
from .models import Group
from .models import User
from .utils import b64_to_obj
from .utils import default_fields
from .utils import login_placeholder
from .utils import obj_to_b64
from .utils import profile_hash
from .utils.flask import current_user
from .utils.flask import permissions_needed
from .utils.flask import render_htmx_template
from .utils.flask import request_is_htmx
from .utils.flask import smtp_needed
from .utils.flask import user_needed
from .utils.forms import TableForm
bp = Blueprint("account", __name__)

View file

@ -1,5 +1,5 @@
from canaille.mails import profile_hash
from canaille.mails import send_test_mail
from canaille.core.mails import profile_hash
from canaille.core.mails import send_test_mail
from canaille.utils import obj_to_b64
from canaille.utils.flask import permissions_needed
from canaille.utils.forms import HTMXForm

View file

@ -1,16 +1,16 @@
import wtforms.form
from canaille.utils.forms import HTMXBaseForm
from canaille.utils.forms import HTMXForm
from canaille.utils.forms import is_uri
from canaille.utils.i18n import native_language_name_from_code
from flask import current_app
from flask import g
from flask_babel import lazy_gettext as _
from flask_wtf.file import FileAllowed
from flask_wtf.file import FileField
from .i18n import native_language_name_from_code
from .models import Group
from .models import User
from .utils.forms import HTMXBaseForm
from .utils.forms import HTMXForm
from .utils.forms import is_uri
def unique_login(form, field):

View file

@ -1,3 +1,6 @@
from canaille.utils.flask import permissions_needed
from canaille.utils.flask import render_htmx_template
from canaille.utils.forms import TableForm
from flask import abort
from flask import Blueprint
from flask import flash
@ -11,9 +14,6 @@ from .forms import CreateGroupForm
from .forms import EditGroupForm
from .models import Group
from .models import User
from .utils.flask import permissions_needed
from .utils.flask import render_htmx_template
from .utils.forms import TableForm
bp = Blueprint("groups", __name__, url_prefix="/groups")

View file

@ -1,3 +1,4 @@
from canaille.utils import profile_hash
from canaille.utils.mails import logo
from canaille.utils.mails import send_email
from flask import current_app
@ -5,8 +6,6 @@ from flask import url_for
from flask_babel import gettext as _
from flask_themer import render_template
from .utils import profile_hash
def send_test_mail(email):
base_url = url_for("account.index", _external=True)

View file

@ -1,9 +1,8 @@
import ldap.filter
from canaille.ldap_backend.ldapobject import LDAPObject
from flask import current_app
from flask import session
from .ldap_backend.ldapobject import LDAPObject
class User(LDAPObject):
DEFAULT_OBJECT_CLASS = "inetOrgPerson"

View file

@ -2,9 +2,9 @@ import random
import faker
import ldap
from canaille.i18n import available_language_codes
from canaille.models import Group
from canaille.models import User
from canaille.core.models import Group
from canaille.core.models import User
from canaille.utils.i18n import available_language_codes
from faker.config import AVAILABLE_LOCALES

View file

@ -11,8 +11,8 @@ from flask_babel import gettext as _
def setup_ldap_models(config):
from .ldapobject import LDAPObject
from ..models import Group
from ..models import User
from canaille.core.models import Group
from canaille.core.models import User
LDAPObject.root_dn = config["LDAP"]["ROOT_DN"]
@ -112,7 +112,8 @@ def init_backend(app):
def validate_configuration(config):
from canaille.models import User, Group
from canaille.core.models import Group
from canaille.core.models import User
try:
conn = ldap.initialize(config["LDAP"]["URI"])

View file

@ -6,6 +6,8 @@ from authlib.jose import JsonWebKey
from authlib.jose import jwt
from authlib.oauth2 import OAuth2Error
from canaille import csrf
from canaille.core.forms import FullLoginForm
from canaille.core.models import User
from flask import abort
from flask import Blueprint
from flask import current_app
@ -19,8 +21,6 @@ from flask_babel import gettext as _
from flask_themer import render_template
from werkzeug.datastructures import CombinedMultiDict
from ..forms import FullLoginForm
from ..models import User
from ..utils.flask import current_user
from ..utils.flask import set_parameter_in_url_query
from .forms import AuthorizeForm

View file

@ -26,11 +26,11 @@ from authlib.oidc.core.grants import OpenIDCode as _OpenIDCode
from authlib.oidc.core.grants import OpenIDHybridGrant as _OpenIDHybridGrant
from authlib.oidc.core.grants import OpenIDImplicitGrant as _OpenIDImplicitGrant
from authlib.oidc.core.grants.util import generate_id_token
from canaille.core.models import User
from flask import current_app
from flask import request
from werkzeug.security import gen_salt
from ..models import User
from .models import AuthorizationCode
from .models import Client
from .models import Token

View file

@ -3,7 +3,7 @@ import hashlib
import json
import re
from canaille.models import User
from canaille.core.models import User
from flask import current_app
from flask import request
from flask_babel import gettext as _

View file

@ -3,7 +3,7 @@ from functools import wraps
from urllib.parse import urlsplit
from urllib.parse import urlunsplit
from canaille.models import User
from canaille.core.models import User
from flask import abort
from flask import current_app
from flask import render_template

View file

@ -1,8 +1,8 @@
import math
import wtforms
from canaille.i18n import DEFAULT_LANGUAGE_CODE
from canaille.i18n import locale_selector
from canaille.utils.i18n import DEFAULT_LANGUAGE_CODE
from canaille.utils.i18n import locale_selector
from flask import abort
from flask import current_app
from flask import make_response

View file

@ -27,7 +27,7 @@ def setup_i18n(app):
def locale_selector():
from .utils.flask import current_user
from .flask import current_user
user = current_user()
available_language_codes = getattr(g, "available_language_codes", [])

View file

@ -1,7 +1,7 @@
from canaille.commands import cli
from canaille.models import Group
from canaille.models import User
from canaille.populate import fake_users
from canaille.core.models import Group
from canaille.core.models import User
from canaille.core.populate import fake_users
def test_populate_users(testclient, slapd_connection):

View file

@ -2,9 +2,9 @@ import ldap.ldapobject
import pytest
import slapd
from canaille import create_app
from canaille.core.models import Group
from canaille.core.models import User
from canaille.ldap_backend.backend import setup_ldap_models
from canaille.models import Group
from canaille.models import User
from canaille.oidc.installation import setup_ldap_tree
from flask import g
from flask_webtest import TestApp

0
tests/core/__init__.py Normal file
View file

View file

@ -1,6 +1,6 @@
from unittest import mock
from canaille.models import User
from canaille.core.models import User
def test_index(testclient, user):

View file

@ -1,7 +1,7 @@
from canaille.models import Group
from canaille.models import User
from canaille.populate import fake_groups
from canaille.populate import fake_users
from canaille.core.models import Group
from canaille.core.models import User
from canaille.core.populate import fake_groups
from canaille.core.populate import fake_users
def test_no_group(app, slapd_connection):

View file

@ -1,7 +1,7 @@
import datetime
from canaille.account import Invitation
from canaille.models import User
from canaille.core.account import Invitation
from canaille.core.models import User
def test_invitation(testclient, logged_admin, foo_group, smtpd):

View file

@ -1,4 +1,4 @@
from canaille.account import profile_hash
from canaille.core.account import profile_hash
def test_password_reset(testclient, user):

View file

@ -1,4 +1,4 @@
from canaille.models import User
from canaille.core.models import User
def test_user_creation_edition_and_deletion(

View file

@ -1,4 +1,4 @@
from canaille.populate import fake_users
from canaille.core.populate import fake_users
from webtest import Upload

View file

@ -1,6 +1,6 @@
import datetime
from canaille.models import User
from canaille.core.models import User
from webtest import Upload

View file

@ -1,6 +1,6 @@
from unittest import mock
from canaille.models import User
from canaille.core.models import User
def test_edition(

View file

@ -1,14 +1,14 @@
import datetime
import ldap.dn
from canaille.core.models import Group
from canaille.core.models import User
from canaille.ldap_backend.backend import setup_ldap_models
from canaille.ldap_backend.ldapobject import LDAPObject
from canaille.ldap_backend.ldapobject import python_attrs_to_ldap
from canaille.ldap_backend.utils import ldap_to_python
from canaille.ldap_backend.utils import python_to_ldap
from canaille.ldap_backend.utils import Syntax
from canaille.models import Group
from canaille.models import User
def test_object_creation(slapd_connection):

View file

@ -5,7 +5,7 @@ from urllib.parse import urlsplit
import freezegun
from authlib.jose import jwt
from authlib.oauth2.rfc7636 import create_s256_code_challenge
from canaille.models import User
from canaille.core.models import User
from canaille.oidc.models import AuthorizationCode
from canaille.oidc.models import Consent
from canaille.oidc.models import Token

View file

@ -36,7 +36,7 @@ def test_ldap_connection_remote_ldap_wrong_credentials(testclient, configuration
def test_ldap_cannot_create_users(testclient, configuration, slapd_connection):
from canaille.models import User
from canaille.core.models import User
def fake_init(*args, **kwarg):
raise ldap.INSUFFICIENT_ACCESS
@ -50,7 +50,7 @@ def test_ldap_cannot_create_users(testclient, configuration, slapd_connection):
def test_ldap_cannot_create_groups(testclient, configuration, slapd_connection):
from canaille.models import Group
from canaille.core.models import Group
def fake_init(*args, **kwarg):
raise ldap.INSUFFICIENT_ACCESS

0
tests/utils/__init__.py Normal file
View file