ores.iam.core

Table of Contents

1. Diagram

ores.iam.core component diagram

Figure 1: ores.iam.core

2. Summary

ores.iam.core provides identity and access management for ORE Studio: user account lifecycle (creation, listing, deletion), secure password authentication (scrypt), account locking on failed login attempts, session and role management, and multi-tenancy / multi-party support. Business logic is exposed as NATS message handlers in the 0x2000–0x2FFF range. A synthetic- data generator produces test accounts for development and CI use.

3. Inputs

  • NATS request messages from UI clients and peer services (account CRUD, login, authorisation queries, bootstrap, reset) in the 0x2000–0x2FFF range.
  • PostgreSQL connections to ores_iam_* tables with temporal versioning.

4. Outputs

  • Account, role, party, session, and tenant records persisted to the ores_iam schema with bitemporal history.
  • Authentication tokens and session state returned to callers via NATS.
  • NATS response messages for all IAM operations.

5. Entry points

  • include/ores.iam.core/ores.iam.hpp — aggregate include.
  • include/ores.iam.core/messaging/registrar.hpp — registers all NATS handlers (account, auth, session, role, tenant, bootstrap, reset).
  • include/ores.iam.core/service/account_operations_service.hpp — account management entry point.
  • include/ores.iam.core/service/authorization_service.hpp — authorisation and role-check entry point.

6. Dependencies

  • ores.iam.api — shared domain types and NATS protocol schemas.
  • ores.dq — ORM base classes and data-quality infrastructure.
  • soci — SQL ORM for PostgreSQL persistence.
  • nats.c — NATS messaging client.
  • libsodium / scrypt — secure password hashing.

7. Build dependencies

What the shared profile cannot know, declared here rather than hand-edited into the generated build file. Each block is spliced into its generated file after the profile's baseline.

8. See also

9. Test dependencies

The suites link what the profile cannot know about.

find_package(Immer CONFIG REQUIRED)

target_link_libraries(${lib_target_name}
    PUBLIC
        ores.iam.api.lib
        ores.geo.lib
        ores.variability.core.lib
        ores.database.lib
        ores.dq.api.lib
        ores.eventing.api.lib
        ores.eventing.core.lib
        ores.platform.lib
        ores.security.lib
        ores.nats.lib
        ores.workflow.api.lib
        ores.assets.api.lib
        ores.reporting.api.lib
        ores.scheduler.api.lib
    PRIVATE
        ores.history.core.lib
        ores.iam.client.lib
        ores.inbox.api.lib
        ores.service.lib
        ores.utility.lib
        ores.refdata.api.lib
        ores.refdata.core.lib
        ores.synthetic.api.lib
        ores.synthetic.core.lib
        ores.marketdata.api.lib
        ores.marketdata.core.lib
        faker-cxx::faker-cxx
        libfort::fort
        immer)
target_link_libraries(${tests_target_name}
    PRIVATE
        ${lib_target_name}
        ores.refdata.core.lib
        ores.assets.core.lib
        ores.telemetry.core.lib
        ores.inbox.api.lib
        ores.inbox.core.lib
        ores.service.lib
        ores.utility.lib
        ores.testing.lib
        Catch2::Catch2
        faker-cxx::faker-cxx
        ores.openssl_cleanup
        Threads::Threads)

Emacs 29.3 (Org mode 9.6.15)