SAML

Interface

For SAML automations, it is possible to define a custom function for handling the “User Logged In” event. This function will be called when the user logs in using SAML.

User Logged In

You can implement your own handle function to handle the “User Logged In” event for SAML. By default the following function is used:

fair_wizard.automation.saml.handle_saml_user_logged_in(saml_event: SamlUserLoggedInEvent) AuthorizedUserResponse | ForbiddenResponse | ErrorResponse[source]

Default handle function for “SAML User Logged In” event.

Parameters:

saml_event – incoming SamlUserLoggedInEvent event

Returns:

resulting UserLoginResponse response

Your handle function must have the same signature, i.e. accept SamlUserLoggedInEvent as the argument and return UserLoginResponse.

Model

class fair_wizard.automation.saml.model.Assertion(*, assertionId: str, assertionIssued: datetime, assertionIssuer: str, assertionSubject: Subject, assertionConditions: Conditions, assertionAuthnStatement: AuthnStatement, assertionAttributeStatement: list[AssertionAttribute])[source]
model_computed_fields = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields = {'attribute_statement': FieldInfo(annotation=list[AssertionAttribute], required=True, alias='assertionAttributeStatement', alias_priority=2), 'authn_statement': FieldInfo(annotation=AuthnStatement, required=True, alias='assertionAuthnStatement', alias_priority=2), 'conditions': FieldInfo(annotation=Conditions, required=True, alias='assertionConditions', alias_priority=2), 'id': FieldInfo(annotation=str, required=True, alias='assertionId', alias_priority=2), 'issued': FieldInfo(annotation=datetime, required=True, alias='assertionIssued', alias_priority=2), 'issuer': FieldInfo(annotation=str, required=True, alias='assertionIssuer', alias_priority=2), 'subject': FieldInfo(annotation=Subject, required=True, alias='assertionSubject', alias_priority=2)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo] objects.

This replaces Model.__fields__ from Pydantic V1.

class fair_wizard.automation.saml.model.AssertionAttribute(*, attributeName: str, attributeFriendlyName: str | None, attributeNameFormat: str, attributeValue: str)[source]
model_computed_fields = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields = {'friendly_name': FieldInfo(annotation=Union[str, NoneType], required=True, alias='attributeFriendlyName', alias_priority=2), 'name': FieldInfo(annotation=str, required=True, alias='attributeName', alias_priority=2), 'name_format': FieldInfo(annotation=str, required=True, alias='attributeNameFormat', alias_priority=2), 'value': FieldInfo(annotation=str, required=True, alias='attributeValue', alias_priority=2)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo] objects.

This replaces Model.__fields__ from Pydantic V1.

class fair_wizard.automation.saml.model.AudienceRestriction(*, audienceRestrictionAudience: list[str])[source]
model_computed_fields = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields = {'audience': FieldInfo(annotation=list[str], required=True, alias='audienceRestrictionAudience', alias_priority=2)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo] objects.

This replaces Model.__fields__ from Pydantic V1.

class fair_wizard.automation.saml.model.AuthnStatement(*, authnStatementInstant: datetime, authnStatementSessionIndex: str, authnStatementLocality: str)[source]
model_computed_fields = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields = {'instant': FieldInfo(annotation=datetime, required=True, alias='authnStatementInstant', alias_priority=2), 'locality': FieldInfo(annotation=str, required=True, alias='authnStatementLocality', alias_priority=2), 'session_index': FieldInfo(annotation=str, required=True, alias='authnStatementSessionIndex', alias_priority=2)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo] objects.

This replaces Model.__fields__ from Pydantic V1.

class fair_wizard.automation.saml.model.Conditions(*, conditionsNotBefore: datetime, conditionsNotOnOrAfter: datetime, conditionsAudienceRestrictions: list[AudienceRestriction])[source]
model_computed_fields = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields = {'audience_restrictions': FieldInfo(annotation=list[AudienceRestriction], required=True, alias='conditionsAudienceRestrictions', alias_priority=2), 'no_before': FieldInfo(annotation=datetime, required=True, alias='conditionsNotBefore', alias_priority=2), 'not_on_or_after': FieldInfo(annotation=datetime, required=True, alias='conditionsNotOnOrAfter', alias_priority=2)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo] objects.

This replaces Model.__fields__ from Pydantic V1.

class fair_wizard.automation.saml.model.NameID(*, nameIDQualifier: str | None, nameIDSPNameQualifier: str | None, nameIDSPProvidedID: str | None, nameIDFormat: str | None, nameIDValue: str)[source]
model_computed_fields = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields = {'format': FieldInfo(annotation=Union[str, NoneType], required=True, alias='nameIDFormat', alias_priority=2), 'qualifier': FieldInfo(annotation=Union[str, NoneType], required=True, alias='nameIDQualifier', alias_priority=2), 'sp_name_qualifier': FieldInfo(annotation=Union[str, NoneType], required=True, alias='nameIDSPNameQualifier', alias_priority=2), 'sp_provided_id': FieldInfo(annotation=Union[str, NoneType], required=True, alias='nameIDSPProvidedID', alias_priority=2), 'value': FieldInfo(annotation=str, required=True, alias='nameIDValue', alias_priority=2)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo] objects.

This replaces Model.__fields__ from Pydantic V1.

class fair_wizard.automation.saml.model.SamlUserLoggedInEvent(*, assertion: Assertion)[source]
model_computed_fields = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields = {'assertion': FieldInfo(annotation=Assertion, required=True, alias='assertion', alias_priority=2)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo] objects.

This replaces Model.__fields__ from Pydantic V1.

class fair_wizard.automation.saml.model.Subject(*, subjectConfirmations: list[SubjectConfirmation], subjectNameID: NameID)[source]
model_computed_fields = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields = {'confirmations': FieldInfo(annotation=list[SubjectConfirmation], required=True, alias='subjectConfirmations', alias_priority=2), 'name_id': FieldInfo(annotation=NameID, required=True, alias='subjectNameID', alias_priority=2)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo] objects.

This replaces Model.__fields__ from Pydantic V1.

class fair_wizard.automation.saml.model.SubjectConfirmation(*, subjectConfirmationMethod: str, subjectConfirmationAddress: str, subjectConfirmationNotOnOrAfter: datetime, subjectConfirmationRecipient: str)[source]
model_computed_fields = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.

model_config = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields = {'address': FieldInfo(annotation=str, required=True, alias='subjectConfirmationAddress', alias_priority=2), 'method': FieldInfo(annotation=str, required=True, alias='subjectConfirmationMethod', alias_priority=2), 'notOnOrAfter': FieldInfo(annotation=datetime, required=True, alias='subjectConfirmationNotOnOrAfter', alias_priority=2), 'recipient': FieldInfo(annotation=str, required=True, alias='subjectConfirmationRecipient', alias_priority=2)}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo] objects.

This replaces Model.__fields__ from Pydantic V1.

Helpers

This module contains additional helper functions to use SAML models.

fair_wizard.automation.saml.helpers.get_email(saml_event: SamlUserLoggedInEvent) str | None[source]

Extracts the email from the SAML event.

Parameters:

saml_event – SAML event

Returns:

email if found, None otherwise

fair_wizard.automation.saml.helpers.get_first_name(saml_event: SamlUserLoggedInEvent) str | None[source]

Extracts the first name from the SAML event.

Parameters:

saml_event – SAML event

Returns:

first name if found, None otherwise

fair_wizard.automation.saml.helpers.get_last_name(saml_event: SamlUserLoggedInEvent) str | None[source]

Extracts the last name from the SAML event.

Parameters:

saml_event – SAML event

Returns:

last name if found, None otherwise