mirror of
				https://github.com/zitadel/zitadel.git
				synced 2025-10-31 09:40:17 +00:00 
			
		
		
		
	 504fe5b761
			
		
	
	504fe5b761
	
	
	
		
			
			* feat: remove exif data from uploaded images (#3221) * feat: remove exif tags from images * feat: remove exif data * feat: remove exif * fix: add preferredLoginName to user grant response (#3271) * chore: log webauthn parse error (#3272) * log error * log error * feat: Help link in privacy policy * fix: convert correct detail data on organization (#3279) * fix: handle empty editor users * fix: add some missing translations (#3291) * fix: org policy translations * fix: metadata event types translation * fix: translations * fix: filter resource owner correctly on project grant members (#3281) * fix: filter resource owner correctly on project grant members * fix: filter resource owner correctly on project grant members * fix: add orgIDs to zitadel permissions request Co-authored-by: fabi <fabienne.gerschwiler@gmail.com> * fix: get IAM memberships correctly in MyZitadelPermissions (#3309) * fix: correct login names on auth and notification users (#3349) * fix: correct login names on auth and notification users * fix: migration * fix: handle resource owner in action flows (#3361) * fix merge * fix: exchange exif library (#3366) * fix: exchange exif library * ignore tiffs * requested fixes * feat: Help link in privacy policy Co-authored-by: Fabi <38692350+fgerschwiler@users.noreply.github.com> Co-authored-by: fabi <fabienne.gerschwiler@gmail.com>
		
			
				
	
	
		
			112 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			112 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package projection
 | |
| 
 | |
| import (
 | |
| 	"context"
 | |
| 
 | |
| 	"github.com/caos/zitadel/internal/errors"
 | |
| 	"github.com/caos/zitadel/internal/eventstore"
 | |
| 	"github.com/caos/zitadel/internal/eventstore/handler"
 | |
| 	"github.com/caos/zitadel/internal/eventstore/handler/crdb"
 | |
| 	"github.com/caos/zitadel/internal/repository/org"
 | |
| )
 | |
| 
 | |
| const (
 | |
| 	FlowTriggerTable             = "projections.flows_triggers"
 | |
| 	FlowTypeCol                  = "flow_type"
 | |
| 	FlowChangeDateCol            = "change_date"
 | |
| 	FlowSequenceCol              = "sequence"
 | |
| 	FlowTriggerTypeCol           = "trigger_type"
 | |
| 	FlowResourceOwnerCol         = "resource_owner"
 | |
| 	FlowInstanceIDCol            = "instance_id"
 | |
| 	FlowActionTriggerSequenceCol = "trigger_sequence"
 | |
| 	FlowActionIDCol              = "action_id"
 | |
| )
 | |
| 
 | |
| type FlowProjection struct {
 | |
| 	crdb.StatementHandler
 | |
| }
 | |
| 
 | |
| func NewFlowProjection(ctx context.Context, config crdb.StatementHandlerConfig) *FlowProjection {
 | |
| 	p := new(FlowProjection)
 | |
| 	config.ProjectionName = FlowTriggerTable
 | |
| 	config.Reducers = p.reducers()
 | |
| 	config.InitCheck = crdb.NewTableCheck(
 | |
| 		crdb.NewTable([]*crdb.Column{
 | |
| 			crdb.NewColumn(FlowTypeCol, crdb.ColumnTypeEnum),
 | |
| 			crdb.NewColumn(FlowChangeDateCol, crdb.ColumnTypeTimestamp),
 | |
| 			crdb.NewColumn(FlowSequenceCol, crdb.ColumnTypeInt64),
 | |
| 			crdb.NewColumn(FlowTriggerTypeCol, crdb.ColumnTypeEnum),
 | |
| 			crdb.NewColumn(FlowResourceOwnerCol, crdb.ColumnTypeText),
 | |
| 			crdb.NewColumn(FlowInstanceIDCol, crdb.ColumnTypeText),
 | |
| 			crdb.NewColumn(FlowActionTriggerSequenceCol, crdb.ColumnTypeInt64),
 | |
| 			crdb.NewColumn(FlowActionIDCol, crdb.ColumnTypeText),
 | |
| 		},
 | |
| 			crdb.NewPrimaryKey(FlowInstanceIDCol, FlowTypeCol, FlowTriggerTypeCol, FlowResourceOwnerCol, FlowActionIDCol),
 | |
| 		),
 | |
| 	)
 | |
| 	p.StatementHandler = crdb.NewStatementHandler(ctx, config)
 | |
| 	return p
 | |
| }
 | |
| 
 | |
| func (p *FlowProjection) reducers() []handler.AggregateReducer {
 | |
| 	return []handler.AggregateReducer{
 | |
| 		{
 | |
| 			Aggregate: org.AggregateType,
 | |
| 			EventRedusers: []handler.EventReducer{
 | |
| 				{
 | |
| 					Event:  org.TriggerActionsSetEventType,
 | |
| 					Reduce: p.reduceTriggerActionsSetEventType,
 | |
| 				},
 | |
| 				{
 | |
| 					Event:  org.FlowClearedEventType,
 | |
| 					Reduce: p.reduceFlowClearedEventType,
 | |
| 				},
 | |
| 			},
 | |
| 		},
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func (p *FlowProjection) reduceTriggerActionsSetEventType(event eventstore.Event) (*handler.Statement, error) {
 | |
| 	e, ok := event.(*org.TriggerActionsSetEvent)
 | |
| 	if !ok {
 | |
| 		return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-uYq4r", "reduce.wrong.event.type %s", org.TriggerActionsSetEventType)
 | |
| 	}
 | |
| 	stmts := make([]func(reader eventstore.Event) crdb.Exec, len(e.ActionIDs)+1)
 | |
| 	stmts[0] = crdb.AddDeleteStatement(
 | |
| 		[]handler.Condition{
 | |
| 			handler.NewCond(FlowTypeCol, e.FlowType),
 | |
| 			handler.NewCond(FlowTriggerTypeCol, e.TriggerType),
 | |
| 			handler.NewCond(FlowResourceOwnerCol, e.Aggregate().ResourceOwner),
 | |
| 		},
 | |
| 	)
 | |
| 	for i, id := range e.ActionIDs {
 | |
| 		stmts[i+1] = crdb.AddCreateStatement(
 | |
| 			[]handler.Column{
 | |
| 				handler.NewCol(FlowResourceOwnerCol, e.Aggregate().ResourceOwner),
 | |
| 				handler.NewCol(FlowInstanceIDCol, e.Aggregate().InstanceID),
 | |
| 				handler.NewCol(FlowTypeCol, e.FlowType),
 | |
| 				handler.NewCol(FlowChangeDateCol, e.CreationDate()),
 | |
| 				handler.NewCol(FlowSequenceCol, e.Sequence()),
 | |
| 				handler.NewCol(FlowTriggerTypeCol, e.TriggerType),
 | |
| 				handler.NewCol(FlowActionIDCol, id),
 | |
| 				handler.NewCol(FlowActionTriggerSequenceCol, i),
 | |
| 			},
 | |
| 		)
 | |
| 	}
 | |
| 	return crdb.NewMultiStatement(e, stmts...), nil
 | |
| }
 | |
| 
 | |
| func (p *FlowProjection) reduceFlowClearedEventType(event eventstore.Event) (*handler.Statement, error) {
 | |
| 	e, ok := event.(*org.FlowClearedEvent)
 | |
| 	if !ok {
 | |
| 		return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-uYq4r", "reduce.wrong.event.type %s", org.FlowClearedEventType)
 | |
| 	}
 | |
| 	return crdb.NewDeleteStatement(
 | |
| 		e,
 | |
| 		[]handler.Condition{
 | |
| 			handler.NewCond(FlowTypeCol, e.FlowType),
 | |
| 			handler.NewCond(FlowResourceOwnerCol, e.Aggregate().ResourceOwner),
 | |
| 		},
 | |
| 	), nil
 | |
| }
 |