Skip to content

Commit d529c3e

Browse files
committed
refactor
Signed-off-by: Sylwester Piskozub <[email protected]>
1 parent ec54743 commit d529c3e

File tree

3 files changed

+52
-51
lines changed

3 files changed

+52
-51
lines changed

app/controlplane/internal/service/attestation.go

Lines changed: 8 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -174,41 +174,15 @@ func (s *AttestationService) Init(ctx context.Context, req *cpAPI.AttestationSer
174174
return nil, errors.NotFound("not found", "contract not found")
175175
}
176176

177-
// find the default CAS backend to associate the workflow
178-
backend, err := s.casUC.FindDefaultBackend(context.Background(), robotAccount.OrgID)
179-
if err != nil && !biz.IsNotFound(err) {
180-
return nil, fmt.Errorf("failed to find default CAS backend: %w", err)
181-
} else if err != nil {
182-
return nil, errors.NotFound("not found", "default CAS backend not found")
183-
}
184-
185-
// Check the status of the backend, try fallback if invalid
186-
if backend.ValidationStatus != biz.CASBackendValidationOK {
187-
s.log.Warnw("msg", "default CAS backend validation failed, attempting fallback",
188-
"backend", backend.Name, "status", backend.ValidationStatus)
189-
190-
// Try to find fallback backend
191-
fallbackBackend, err := s.casUC.FindFallbackBackend(context.Background(), robotAccount.OrgID)
192-
if err != nil && !biz.IsNotFound(err) {
193-
return nil, fmt.Errorf("failed to find fallback CAS backend: %w", err)
194-
}
195-
196-
if fallbackBackend == nil {
197-
// No fallback configured
198-
return nil, cpAPI.ErrorCasBackendErrorReasonInvalid(
199-
"default CAS backend is unreachable and no fallback backend is configured")
200-
}
201-
202-
// Check fallback backend validation status
203-
if fallbackBackend.ValidationStatus != biz.CASBackendValidationOK {
204-
// Both backends are down
205-
return nil, cpAPI.ErrorCasBackendErrorReasonInvalid(
206-
"both default and fallback CAS backends are unreachable")
177+
// Find the default or fallback CAS backend to associate the workflow
178+
backend, err := s.casUC.FindDefaultOrFallbackBackend(context.Background(), robotAccount.OrgID)
179+
if err != nil {
180+
if biz.IsNotFound(err) {
181+
return nil, errors.NotFound("not found", "default CAS backend not found")
182+
} else if biz.IsErrValidation(err) {
183+
return nil, cpAPI.ErrorCasBackendErrorReasonInvalid(err.Error())
207184
}
208-
209-
// Use fallback backend
210-
s.log.Infow("msg", "using fallback CAS backend", "backend", fallbackBackend.Name)
211-
backend = fallbackBackend
185+
return nil, fmt.Errorf("failed to find CAS backend: %w", err)
212186
}
213187

214188
// Create workflowRun

app/controlplane/internal/usercontext/orgrequirements_middleware.go

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -102,26 +102,17 @@ func BlockIfCASBackendNotValid(uc biz.CASBackendReader) middleware.Middleware {
102102
return nil, errors.New("organization not found")
103103
}
104104

105-
// 1 - Figure out main repository for this organization
106-
repo, err := uc.FindDefaultBackend(ctx, org.ID)
107-
if err != nil && !biz.IsNotFound(err) {
108-
return nil, fmt.Errorf("checking for CAS backends in the org: %w", err)
109-
} else if repo == nil {
110-
return nil, v1.ErrorCasBackendErrorReasonRequired("your organization does not have a CAS Backend configured yet")
111-
}
112-
113-
// 2 - compare the status
114-
if repo.ValidationStatus != biz.CASBackendValidationOK {
115-
// 3 - Check if there's a fallback backend available
116-
fallbackRepo, err := uc.FindFallbackBackend(ctx, org.ID)
117-
if err != nil && !biz.IsNotFound(err) {
118-
return nil, fmt.Errorf("checking for fallback CAS backend: %w", err)
119-
}
120-
121-
if fallbackRepo == nil || fallbackRepo.ValidationStatus != biz.CASBackendValidationOK {
105+
// Check if there's a valid CAS backend (default or fallback)
106+
_, err := uc.FindDefaultOrFallbackBackend(ctx, org.ID)
107+
if err != nil {
108+
if biz.IsNotFound(err) {
109+
return nil, v1.ErrorCasBackendErrorReasonRequired("your organization does not have a CAS Backend configured yet")
110+
} else if biz.IsErrValidation(err) {
122111
return nil, v1.ErrorCasBackendErrorReasonInvalid("your CAS backend can't be reached")
123112
}
113+
return nil, fmt.Errorf("checking for CAS backends in the org: %w", err)
124114
}
115+
125116
return handler(ctx, req)
126117
}
127118
}

app/controlplane/pkg/biz/casbackend.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@ type CASBackendRepo interface {
122122
type CASBackendReader interface {
123123
FindDefaultBackend(ctx context.Context, orgID string) (*CASBackend, error)
124124
FindFallbackBackend(ctx context.Context, orgID string) (*CASBackend, error)
125+
FindDefaultOrFallbackBackend(ctx context.Context, orgID string) (*CASBackend, error)
125126
FindByIDInOrg(ctx context.Context, OrgID, ID string) (*CASBackend, error)
126127
PerformValidation(ctx context.Context, ID string) error
127128
}
@@ -235,6 +236,41 @@ func (uc *CASBackendUseCase) FindFallbackBackend(ctx context.Context, orgID stri
235236
return backend, nil
236237
}
237238

239+
// FindDefaultOrFallbackBackend finds a valid CAS backend for the organization.
240+
// Attempts to use the default backend first, if invalid it uses the fallback backend.
241+
func (uc *CASBackendUseCase) FindDefaultOrFallbackBackend(ctx context.Context, orgID string) (*CASBackend, error) {
242+
// Find the default backend
243+
defaultBackend, err := uc.FindDefaultBackend(ctx, orgID)
244+
if err != nil {
245+
return nil, err
246+
}
247+
248+
// Check if default backend is valid
249+
if defaultBackend.ValidationStatus == CASBackendValidationOK {
250+
return defaultBackend, nil
251+
}
252+
253+
// Default backend is invalid, try fallback
254+
uc.logger.Infow("msg", "default CAS backend validation failed, attempting fallback",
255+
"backend", defaultBackend.Name, "status", defaultBackend.ValidationStatus, "orgID", orgID)
256+
257+
fallbackBackend, err := uc.FindFallbackBackend(ctx, orgID)
258+
if err != nil {
259+
if IsNotFound(err) {
260+
return nil, NewErrValidationStr("default CAS backend is unreachable and no fallback backend is configured")
261+
}
262+
return nil, err
263+
}
264+
265+
// Check if fallback backend is valid
266+
if fallbackBackend.ValidationStatus != CASBackendValidationOK {
267+
return nil, NewErrValidationStr("both default and fallback CAS backends are unreachable")
268+
}
269+
270+
uc.logger.Infow("msg", "using fallback CAS backend", "backend", fallbackBackend.Name, "orgID", orgID)
271+
return fallbackBackend, nil
272+
}
273+
238274
func (uc *CASBackendUseCase) CreateInlineBackend(ctx context.Context, orgID string) (*CASBackend, error) {
239275
orgUUID, err := uuid.Parse(orgID)
240276
if err != nil {

0 commit comments

Comments
 (0)