diff --git a/interfaces/auth_proxy/interface/v0/schema.py b/interfaces/auth_proxy/interface/v0/schema.py index 2143060f0..16777f60f 100644 --- a/interfaces/auth_proxy/interface/v0/schema.py +++ b/interfaces/auth_proxy/interface/v0/schema.py @@ -1,10 +1,7 @@ """This file defines the schemas for the provider and requirer sides of the auth_proxy interface. -It exposes two interfaces.schema_base.DataBagSchema subclasses called: -- ProviderSchema -- RequirerSchema Examples: - RequirerSchema: + Requirer: unit: app: { "providers": [ @@ -14,16 +11,15 @@ ] } - ProviderSchema: + Provider: unit: app: """ -from interface_tester.schema_base import DataBagSchema from pydantic import AnyHttpUrl, BaseModel, Field -class AuthProxyRequirer(BaseModel): +class RequirerAppData(BaseModel): protected_urls: list[AnyHttpUrl] = Field( description="List of urls to be protected by Identity and Access Proxy." ) @@ -35,11 +31,6 @@ class AuthProxyRequirer(BaseModel): ) -class ProviderSchema(DataBagSchema): - """Provider schema for auth_proxy.""" - - -class RequirerSchema(DataBagSchema): - """Requirer schema for auth_proxy.""" - - app: AuthProxyRequirer +ProviderAppData = None +ProviderUnitData = None +RequirerUnitData = None diff --git a/interfaces/forward_auth/interface/v0/schema.py b/interfaces/forward_auth/interface/v0/schema.py index 768572dad..c9b112132 100644 --- a/interfaces/forward_auth/interface/v0/schema.py +++ b/interfaces/forward_auth/interface/v0/schema.py @@ -2,12 +2,8 @@ # See LICENSE file for licensing details. """This file defines the schemas for the provider and requirer sides. -It exposes two interfaces.schema_base.DataBagSchema subclasses called: -- ProviderSchema -- RequirerSchema - Examples: - ProviderSchema: + Provider: unit: app: { "decisions_address": "https://oauth2-proxy-k8s-0.oauth2-proxy-k8s.namespace.svc.cluster.local", @@ -15,18 +11,17 @@ "headers": ["X-User", "X-Some-Header"] } - RequirerSchema: + Requirer: unit: app: { "ingress_app_names": ["charmed-app", "other-charmed-app"] } """ -from interface_tester.schema_base import DataBagSchema from pydantic import BaseModel, Field -class ForwardAuthProvider(BaseModel): +class ProviderAppData(BaseModel): """ForwardAuthProvider model.""" decisions_address: str = Field(description='The internal decisions endpoint address.') @@ -44,7 +39,7 @@ class ForwardAuthProvider(BaseModel): ) -class ForwardAuthRequirer(BaseModel): +class RequirerAppData(BaseModel): """ForwardAuthRequirer model.""" ingress_app_names: list[str] = Field( @@ -52,13 +47,5 @@ class ForwardAuthRequirer(BaseModel): ) -class ProviderSchema(DataBagSchema): - """Provider schema for forward_auth.""" - - app: ForwardAuthProvider - - -class RequirerSchema(DataBagSchema): - """Requirer schema for forward_auth.""" - - app: ForwardAuthRequirer +ProviderUnitData = None +RequirerUnitData = None diff --git a/interfaces/kratos_external_idp/interface/v0/schema.py b/interfaces/kratos_external_idp/interface/v0/schema.py index 75735a628..89d70cc7e 100644 --- a/interfaces/kratos_external_idp/interface/v0/schema.py +++ b/interfaces/kratos_external_idp/interface/v0/schema.py @@ -1,11 +1,9 @@ """This file defines the schemas for the provider and requirer sides of the kratos_external_idp interface. -It exposes two interfaces.schema_base.DataBagSchema subclasses called: -- ProviderSchema -- RequirerSchema +It defines models `ProviderAppData` and `RequirerAppData`. Examples: - ProviderSchema: + Provider: unit: app: { "providers":[ @@ -17,7 +15,7 @@ ] } - RequirerSchema: + Requirer: unit: app: { "providers": [ @@ -30,7 +28,6 @@ import textwrap from enum import Enum -from interface_tester.schema_base import DataBagSchema from pydantic import AnyHttpUrl, BaseModel, Field, field_validator @@ -129,63 +126,18 @@ def issuer_url_allowed(cls, v, info): return v -class KratosExternalIdpProviderData(BaseModel): +class ProviderAppAData(BaseModel): providers: list[ExternalIdpProvider] -class ProviderSchema(DataBagSchema): - """Provider schema for KratosExternalIdp. - This relation interface can be used to provide a set of client configurations to Kratos to connect with external providers. - """ - - app: KratosExternalIdpProviderData - - class Config: - schema_extra = { - "example": { - "unit": None, - "app": { - "providers": [ - { - "client_id": "client_id", - "client_secret": "cl1ent-s3cRet", - "secret_backend": "relation", - "tenant_id": "4242424242424242", - "provider": "microsoft", - } - ] - }, - } - } - - class ExternalIdpRequirer(BaseModel): redirect_uri: Url provider_id: str -class KratosExternalIdpRequirerData(BaseModel): +class RequirerAppData(BaseModel): providers: list[ExternalIdpRequirer] -class RequirerSchema(DataBagSchema): - """Requirer schema for KratosExternalIdp. - This relation interface can be used from Kratos to provide the redirect_uri of a client that will be used with an external provider. - """ - - app: KratosExternalIdpRequirerData - - class Config: - schema_extra = { - "example": { - "unit": None, - "app": { - "providers": [ - { - "redirect_uri": "https://example.kratos.com/self-service/methods/oidc/callback/microsoft", - "provider_id": "microsoft", - } - ] - }, - } - } +ProviderUnitData = None +RequirerUnitData = None diff --git a/interfaces/kratos_info/interface/v0/schema.py b/interfaces/kratos_info/interface/v0/schema.py index 5d3441d7d..883120b88 100644 --- a/interfaces/kratos_info/interface/v0/schema.py +++ b/interfaces/kratos_info/interface/v0/schema.py @@ -1,15 +1,9 @@ -"""This file defines the schemas for the provider and requirer sides of this relation interface. +"""This file defines the schemas for the provider and requirer sides of this relation interface.""" -It must expose two interfaces.schema_base.DataBagSchema subclasses called: -- ProviderSchema -- RequirerSchema -""" - -from interface_tester.schema_base import DataBagSchema from pydantic import AnyHttpUrl, BaseModel, Field -class KratosInfoProvider(BaseModel): +class ProviderAppData(BaseModel): admin_endpoint: AnyHttpUrl = Field(description="Kratos admin URL.") public_endpoint: AnyHttpUrl = Field(description="Kratos public URL.") login_browser_endpoint: AnyHttpUrl = Field( @@ -33,11 +27,6 @@ class KratosInfoProvider(BaseModel): ) -class ProviderSchema(DataBagSchema): - """The schema for the provider side of this interface.""" - - app: KratosInfoProvider - - -class RequirerSchema(DataBagSchema): - """The schema for the requirer side of this interface.""" +ProviderUnitData = None +RequirerAppData = None +RequirerUnitData = None diff --git a/interfaces/ldap/interface/v0/schema.py b/interfaces/ldap/interface/v0/schema.py index 649dd24d1..353ef8c65 100644 --- a/interfaces/ldap/interface/v0/schema.py +++ b/interfaces/ldap/interface/v0/schema.py @@ -1,21 +1,12 @@ # Copyright 2026 Canonical Ltd. # See LICENSE file for licensing details. -"""LDAP relation schema definitions. +"""LDAP relation schema definitions.""" -This file defines the schemas for the provider and requirer sides of this -relation interface. - -It must expose two interfaces.schema_base.DataBagSchema subclasses called: -- ProviderSchema -- RequirerSchema -""" - -from interface_tester.schema_base import DataBagSchema from pydantic import AnyUrl, BaseModel, Field -class LdapProviderData(BaseModel): +class ProviderAppData(BaseModel): """LDAP provider relation data schema.""" urls: list[AnyUrl] = Field( @@ -49,7 +40,7 @@ class LdapProviderData(BaseModel): ) -class LdapRequirerData(BaseModel): +class RequirerAppData(BaseModel): """LDAP requirer relation data schema.""" user: str | None = Field( @@ -60,13 +51,5 @@ class LdapRequirerData(BaseModel): ) -class ProviderSchema(DataBagSchema): - """The schema for the provider side of the ldap interface.""" - - app: LdapProviderData - - -class RequirerSchema(DataBagSchema): - """The schema for the requirer side of the ldap interface.""" - - app: LdapRequirerData +ProviderUnitData = None +RequirerUnitData = None diff --git a/interfaces/login_ui_endpoints/interface/v0/schema.py b/interfaces/login_ui_endpoints/interface/v0/schema.py index ef47b2aa8..00387b0e4 100644 --- a/interfaces/login_ui_endpoints/interface/v0/schema.py +++ b/interfaces/login_ui_endpoints/interface/v0/schema.py @@ -1,11 +1,9 @@ # Copyright 2023 Canonical # See LICENSE file for licensing details. """This file defines the schemas for the provider and requirer sides of the login_ui_endpoints interface. -It exposes two interfaces.schema_base.DataBagSchema subclasses called: -- ProviderSchema -- RequirerSchema + Examples: - ProviderSchema: + Provider: unit: app: {"consent_url": "http://identity-platform-login-ui-url/consent", "error_url": "http://identity-platform-login-ui-url/error", @@ -17,11 +15,10 @@ } """ -from interface_tester.schema_base import DataBagSchema from pydantic import BaseModel, Field -class MyProviderAppData(BaseModel): +class ProviderAppData(BaseModel): consent_url: str = Field( description="Endpoint Hydra forwards users for consent related operations." ) @@ -39,11 +36,6 @@ class MyProviderAppData(BaseModel): default_url: str = Field(description="Default Browser endpoint Kratos forwards users to.") -class ProviderSchema(DataBagSchema): - """Provider schema for login_ui_endpoints.""" - - app: MyProviderAppData - - -class RequirerSchema(DataBagSchema): - """Requirer schema for login_ui_endpoints.""" +ProviderUnitData = None +RequirerAppData = None +RequirerUnitData = None diff --git a/interfaces/openfga/interface/v0/tests/test_provider.py b/interfaces/openfga/interface/v0/tests/test_provider.py deleted file mode 100644 index 4ace1fdb2..000000000 --- a/interfaces/openfga/interface/v0/tests/test_provider.py +++ /dev/null @@ -1,35 +0,0 @@ -# Copyright 2023 Canonical -# See LICENSE file for licensing details. -from interface_tester import Tester -from scenario import Relation, State - - -def test_no_data_on_created(): - # nothing happens on created: databags are empty - t = Tester() - t.run('openfga-relation-created') - t.assert_relation_data_empty() - - -def test_no_data_on_joined(): - # nothing happens on joined: databags are empty - t = Tester() - t.run('openfga-relation-joined') - t.assert_relation_data_empty() - - -def test_data_published_on_changed_remote_valid(): - t = Tester( - State( - relations=[ - Relation( - endpoint='openfga', - interface='openfga', - remote_app_name='remote', - remote_app_data={'store_name': 'test-store'}, - ) - ] - ) - ) - t.run('openfga-relation-changed') - t.assert_schema_valid() diff --git a/interfaces/openfga/interface/v0/tests/test_requirer.py b/interfaces/openfga/interface/v0/tests/test_requirer.py deleted file mode 100644 index 1689ee94c..000000000 --- a/interfaces/openfga/interface/v0/tests/test_requirer.py +++ /dev/null @@ -1,41 +0,0 @@ -# Copyright 2023 Canonical -# See LICENSE file for licensing details. -from interface_tester import Tester -from scenario import Relation, State - - -def test_no_data_on_created(output_state: State): - # nothing happens on created: databags are empty - t = Tester() - t.run('openfga-relation-created') - t.assert_relation_data_empty() - - -def test_no_data_on_joined(output_state: State): - # nothing happens on joined: databags are empty - t = Tester() - t.run('openfga-relation-joined') - t.assert_relation_data_empty() - - -def test_data_published_on_changed_remote_valid(output_state: State): - t = Tester( - State( - relations=[ - Relation( - endpoint='openfga', - interface='openfga', - remote_app_name='remote', - remote_app_data={ - 'address': '10.10.4.1', - 'port': '8080', - 'scheme': 'https', - 'token_secret_id': 'test_token_secret', - 'store_id': '01GK13VYZK62Q1T0X55Q2BHYD6', - }, - ) - ] - ) - ) - t.run('openfga-relation-changed') - t.assert_schema_valid() diff --git a/interfaces/openfga/interface/v1/schema.py b/interfaces/openfga/interface/v1/schema.py index 931c9f027..d5af13e1c 100644 --- a/interfaces/openfga/interface/v1/schema.py +++ b/interfaces/openfga/interface/v1/schema.py @@ -2,12 +2,8 @@ # See LICENSE file for licensing details. """This file defines the schemas for the provider and requirer sides of the openfga interface. -It exposes two interfaces.schema_base.DataBagSchema subclasses called: -- ProviderSchema -- RequirerSchema - Examples: - ProviderSchema: + Provider: unit: app: {"openfga": {"grpc_api_url": "http://10.10.0.17:8081", @@ -18,16 +14,15 @@ } } - RequirerSchema: + Requirer: unit: app: {"store_name": "test-store-name"} """ -from interface_tester.schema_base import DataBagSchema from pydantic import BaseModel, Field, validator -class OpenFGAProviderData(BaseModel): +class ProviderAppData(BaseModel): """Provider data schema for OpenFGA v1.""" grpc_api_url: str = Field( @@ -68,13 +63,7 @@ def validate_token(cls, v: str, values: dict) -> str: # noqa: N805 return v -class ProviderSchema(DataBagSchema): - """Provider schema for OpenFGA.""" - - app: OpenFGAProviderData - - -class OpenFGARequirerData(BaseModel): +class RequirerAppData(BaseModel): """Requirer data schema for OpenFGA v1.""" store_name: str = Field( @@ -84,7 +73,5 @@ class OpenFGARequirerData(BaseModel): ) -class RequirerSchema(DataBagSchema): - """Requirer schema for OpenFGA.""" - - app: OpenFGARequirerData +ProviderUnitData = None +RequirerUnitData = None