Update auth service for portal OAuth logins

Create IAM sessions from OAuth callbacks with the portal hostname
and consent data needed by the compliance portal API.

Signed-off-by: Bryan Frimin <bryan@probo.com>
This commit is contained in:
Bryan Frimin
2026-07-15 10:59:20 +02:00
parent 33fa473411
commit c4a30e3b95

View File

@@ -68,6 +68,7 @@ type (
Continue *string Continue *string
// If users tries to connect to compliance page, we must brand the emails accordingly // If users tries to connect to compliance page, we must brand the emails accordingly
CompliancePageID *gid.GID CompliancePageID *gid.GID
MagicLinkBaseURL *string
} }
PasswordResetData struct { PasswordResetData struct {
@@ -460,12 +461,22 @@ func (s AuthService) OpenSessionWithSAML(ctx context.Context, identityID gid.GID
} }
func (s AuthService) OpenSessionWithOIDC(ctx context.Context, identityID gid.GID, authMethod coredata.AuthMethod) (*coredata.Session, error) { func (s AuthService) OpenSessionWithOIDC(ctx context.Context, identityID gid.GID, authMethod coredata.AuthMethod) (*coredata.Session, error) {
return s.OpenRootSession(ctx, identityID, authMethod, coredata.SessionData{})
}
func (s AuthService) OpenRootSession(
ctx context.Context,
identityID gid.GID,
authMethod coredata.AuthMethod,
data coredata.SessionData,
) (*coredata.Session, error) {
session := &coredata.Session{} session := &coredata.Session{}
err := s.pg.WithTx( err := s.pg.WithTx(
ctx, ctx,
func(ctx context.Context, conn pg.Tx) (err error) { func(ctx context.Context, conn pg.Tx) (err error) {
session = coredata.NewRootSession(identityID, authMethod, s.sessionDuration) session = coredata.NewRootSession(identityID, authMethod, s.sessionDuration)
session.Data = data
err = session.Insert(ctx, conn) err = session.Insert(ctx, conn)
if err != nil { if err != nil {
@@ -611,6 +622,10 @@ func (s AuthService) SendMagicLink(ctx context.Context, req *SendMagicLinkReques
} }
} }
if req.MagicLinkBaseURL != nil {
emailPresenterCfg.BaseURL = *req.MagicLinkBaseURL
}
emailPresenter := emails.NewPresenterFromConfig(emailPresenterCfg, fullName) emailPresenter := emails.NewPresenterFromConfig(emailPresenterCfg, fullName)
subject, textBody, htmlBody, err := emailPresenter.RenderMagicLink( subject, textBody, htmlBody, err := emailPresenter.RenderMagicLink(