feat: add SAML as identity provider (#6454)

* feat: first implementation for saml sp

* fix: add command side instance and org for saml provider

* fix: add query side instance and org for saml provider

* fix: request handling in event and retrieval of finished intent

* fix: add review changes and integration tests

* fix: add integration tests for saml idp

* fix: correct unit tests with review changes

* fix: add saml session unit test

* fix: add saml session unit test

* fix: add saml session unit test

* fix: changes from review

* fix: changes from review

* fix: proto build error

* fix: proto build error

* fix: proto build error

* fix: proto require metadata oneof

* fix: login with saml provider

* fix: integration test for saml assertion

* lint client.go

* fix json tag

* fix: linting

* fix import

* fix: linting

* fix saml idp query

* fix: linting

* lint: try all issues

* revert linting config

* fix: add regenerate endpoints

* fix: translations

* fix mk.yaml

* ignore acs path for user agent cookie

* fix: add AuthFromProvider test for saml

* fix: integration test for saml retrieve information

---------

Co-authored-by: Livio Spring <livio.a@gmail.com>
This commit is contained in:
Stefan Benz
2023-09-29 11:26:14 +02:00
committed by GitHub
parent 2e99d0fe1b
commit 15fd3045e0
82 changed files with 6301 additions and 245 deletions

View File

@@ -35,6 +35,8 @@ const (
LDAPIDPChangedEventType eventstore.EventType = "org.idp.ldap.changed"
AppleIDPAddedEventType eventstore.EventType = "org.idp.apple.added"
AppleIDPChangedEventType eventstore.EventType = "org.idp.apple.changed"
SAMLIDPAddedEventType eventstore.EventType = "org.idp.saml.added"
SAMLIDPChangedEventType eventstore.EventType = "org.idp.saml.changed"
IDPRemovedEventType eventstore.EventType = "org.idp.removed"
)
@@ -1002,6 +1004,85 @@ func AppleIDPChangedEventMapper(event *repository.Event) (eventstore.Event, erro
return &AppleIDPChangedEvent{AppleIDPChangedEvent: *e.(*idp.AppleIDPChangedEvent)}, nil
}
type SAMLIDPAddedEvent struct {
idp.SAMLIDPAddedEvent
}
func NewSAMLIDPAddedEvent(
ctx context.Context,
aggregate *eventstore.Aggregate,
id,
name string,
metadata []byte,
key *crypto.CryptoValue,
certificate []byte,
binding string,
withSignedRequest bool,
options idp.Options,
) *SAMLIDPAddedEvent {
return &SAMLIDPAddedEvent{
SAMLIDPAddedEvent: *idp.NewSAMLIDPAddedEvent(
eventstore.NewBaseEventForPush(
ctx,
aggregate,
SAMLIDPAddedEventType,
),
id,
name,
metadata,
key,
certificate,
binding,
withSignedRequest,
options,
),
}
}
func SAMLIDPAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
e, err := idp.SAMLIDPAddedEventMapper(event)
if err != nil {
return nil, err
}
return &SAMLIDPAddedEvent{SAMLIDPAddedEvent: *e.(*idp.SAMLIDPAddedEvent)}, nil
}
type SAMLIDPChangedEvent struct {
idp.SAMLIDPChangedEvent
}
func NewSAMLIDPChangedEvent(
ctx context.Context,
aggregate *eventstore.Aggregate,
id string,
changes []idp.SAMLIDPChanges,
) (*SAMLIDPChangedEvent, error) {
changedEvent, err := idp.NewSAMLIDPChangedEvent(
eventstore.NewBaseEventForPush(
ctx,
aggregate,
SAMLIDPChangedEventType,
),
id,
changes,
)
if err != nil {
return nil, err
}
return &SAMLIDPChangedEvent{SAMLIDPChangedEvent: *changedEvent}, nil
}
func SAMLIDPChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
e, err := idp.SAMLIDPChangedEventMapper(event)
if err != nil {
return nil, err
}
return &SAMLIDPChangedEvent{SAMLIDPChangedEvent: *e.(*idp.SAMLIDPChangedEvent)}, nil
}
type IDPRemovedEvent struct {
idp.RemovedEvent
}