Skip to main content

IDP Authentication - Hexagonal Architecture Implementation

Project description

FastAPI

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 optionally entity_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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

idp_authentication-0.1.8.tar.gz (20.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

idp_authentication-0.1.8-py3-none-any.whl (37.7 kB view details)

Uploaded Python 3

File details

Details for the file idp_authentication-0.1.8.tar.gz.

File metadata

  • Download URL: idp_authentication-0.1.8.tar.gz
  • Upload date:
  • Size: 20.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.7.1 CPython/3.11.8 Linux/6.5.0-17-generic

File hashes

Hashes for idp_authentication-0.1.8.tar.gz
Algorithm Hash digest
SHA256 7139eab8730bd50f06ba672e1bd0194057ef29fc17e6f01f45ae20c37e433292
MD5 62f10b2565e8c184c65da73ffdf6e99b
BLAKE2b-256 ca7c5aaf3710dac44850c38fd660c923e6cd3e8001fc11c94f27e1ac9486942a

See more details on using hashes here.

File details

Details for the file idp_authentication-0.1.8-py3-none-any.whl.

File metadata

  • Download URL: idp_authentication-0.1.8-py3-none-any.whl
  • Upload date:
  • Size: 37.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.7.1 CPython/3.11.8 Linux/6.5.0-17-generic

File hashes

Hashes for idp_authentication-0.1.8-py3-none-any.whl
Algorithm Hash digest
SHA256 f57a1fb7e548460bdf4e0303336a13a0ff5d1b59d8ce6dda9bdeab11a3a699be
MD5 50b5f7788947dc7ab1d429949a8483b6
BLAKE2b-256 1649a633a65c6324e76268c9fa581b61e19139e69773689e144a817e4e02f903

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page