IDP Authentication - Hexagonal Architecture Implementation
Project description
IDP Authentication hexagonal architecture implementation
Purpose
This project handles the authentication process of the Cardo platform. It is a hexagonal architecture implementation, which means that the business logic is independent of the framework used to implement the API.
Architecture
The architecture is based on the Hexagonal Architecture.
The main idea is to separate the business logic from the framework and the infrastructure.
The business logic is implemented in the domain
module. This module is independent of the infrastructure.
The infrastructure is implemented infrastructure
module.
The app
which uses this package itself is the entry point of the application. It is the only module that depends on the framework.
Project layout
idp_authentication/
├── infrastructure
│ ├── custom_orm_column_types.py
│ ├── database.py
│ ├── orm.py
├── users
│ ├── adapters
│ │ ├── orm.py
│ │ ├── unit_of_work.py
│ │ ├── events
│ │ ├── repositories
│ ├── base_classes
│ │ ├── base_entity.py
│ │ ├── base_repository.py
│ ├── di
│ │ ├── containers.py
│ ├── domain
│ │ ├── entities
│ │ ├── ports
│ │ ├── use_cases
│ ├── infrastructure
│ │ ├── database
│ │ │ ├── sqlalchemy
│ │ ├── faust
│ │ │ ├── faust_app.py
│ ├── tests
│ │ ├── domain
│ │ │ ├── __init__.py
Requirements
Python 3.9+
IDP Authentication requires the following to be implemented:
Installation
Since this is a private repository, you need to install the package with the following command:
pip install git+ssh://git@github.com/CardoAI/idp-authentication.git@main
Example
Usage
Inside your application container:
from dependency_injector import providers
from idp_authentication.users.di.containers import UsersModuleDIContainer
users_module = providers.Container(
UsersModuleDIContainer,
config=config,
database=database,
)
Extending default config
from idp_authentication.config import Config
class TestConfig(Config):
APP_IDENTIFIER = "test"
TENANTS = ["default"]
ROLES = [TEST_ROLE_1, TEST_ROLE_2]
APP_ENTITY_TYPES = ["app_entity_1", "app_entity_2"]
class Config:
env_file_encoding = "utf-8"
use_enum_values = True
Configuration example
from dependency_injector import containers, providers
from idp_authentication.users.di.containers import UsersModuleDIContainer
class YourTestContainer(containers.DeclarativeContainer):
config = providers.Configuration(pydantic_settings=[TestConfig()])
url = get_test_memory_db_uri()
database = providers.Singleton(
Database,
)
users_module = providers.Container(
UsersModuleDIContainer,
config=config,
database=database,
)
Usage example
def container():
container = YourTestContainer()
container.wire(packages=["idp_authentication"]) # Wire IDPAuthentication
container.users_module.start_mappers() # Start Users Module mapper
yield container
App Entity
To declare a new AppEntity, the Entity class should:
- Inherit from the class
AppEntity
- Declare the properties
idp_identifier
,idp_label
and optionallyentity_type
- Example:
from idp_authentication.users.domain.entities.app_entity import AppEntity class TestEntity(AppEntity): @property def idp_identifier(self): return self.id @property def idp_label(self): return self.name @property def entity_type(self): return "test"
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file idp_authentication-0.2.5.tar.gz
.
File metadata
- Download URL: idp_authentication-0.2.5.tar.gz
- Upload date:
- Size: 54.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.9.19
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 11e24f91cd80836b3e6b34d2c5a43a2f95e205f014c93a3d3d83c47e05b5d51d |
|
MD5 | 697a4eb32d750fdbae413f16144a99a6 |
|
BLAKE2b-256 | 020a130ca54ed9a384e98c67bf7398b0cb238e3c441f3c2e6a33e4018226e838 |
File details
Details for the file idp_authentication-0.2.5-py3-none-any.whl
.
File metadata
- Download URL: idp_authentication-0.2.5-py3-none-any.whl
- Upload date:
- Size: 40.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.9.19
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1a6763cbdde7abeade07d12236ad43503096356df2837e7a3c3a9b933634b834 |
|
MD5 | 45f1c2b4ec9af889847f6ec77c8dd01d |
|
BLAKE2b-256 | 747d3f6a38751e89d73e04302b1505af9581897ad62b00d9d7879d7c8131bf4b |