Add missing s3 metadata
Signed-off-by: Sacha Al Himdani <sacha@getprobo.com>
This commit is contained in:
@@ -19,9 +19,12 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/aws/aws-sdk-go-v2/aws"
|
||||||
|
"github.com/aws/aws-sdk-go-v2/service/s3"
|
||||||
"github.com/getprobo/probo/pkg/coredata"
|
"github.com/getprobo/probo/pkg/coredata"
|
||||||
"github.com/getprobo/probo/pkg/gid"
|
"github.com/getprobo/probo/pkg/gid"
|
||||||
"github.com/getprobo/probo/pkg/page"
|
"github.com/getprobo/probo/pkg/page"
|
||||||
|
"go.gearno.de/crypto/uuid"
|
||||||
"go.gearno.de/kit/pg"
|
"go.gearno.de/kit/pg"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -283,9 +286,41 @@ func (s AuditService) UploadReport(
|
|||||||
return fmt.Errorf("cannot load audit: %w", err)
|
return fmt.Errorf("cannot load audit: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
report, err := s.svc.Reports.Create(ctx, req.File)
|
reportID := gid.New(s.svc.scope.GetTenantID(), coredata.ReportEntityType)
|
||||||
|
now := time.Now()
|
||||||
|
|
||||||
|
objectKey, err := uuid.NewV7()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("cannot create report: %w", err)
|
return fmt.Errorf("cannot generate object key: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = s.svc.s3.PutObject(ctx, &s3.PutObjectInput{
|
||||||
|
Bucket: aws.String(s.svc.bucket),
|
||||||
|
Key: aws.String(objectKey.String()),
|
||||||
|
Body: req.File.Content,
|
||||||
|
ContentType: aws.String(req.File.ContentType),
|
||||||
|
Metadata: map[string]string{
|
||||||
|
"type": "report",
|
||||||
|
"report-id": reportID.String(),
|
||||||
|
"organization-id": audit.OrganizationID.String(),
|
||||||
|
},
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("cannot upload report to S3: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
report := &coredata.Report{
|
||||||
|
ID: reportID,
|
||||||
|
ObjectKey: objectKey.String(),
|
||||||
|
MimeType: req.File.ContentType,
|
||||||
|
Filename: req.File.Filename,
|
||||||
|
Size: req.File.Size,
|
||||||
|
CreatedAt: now,
|
||||||
|
UpdatedAt: now,
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := report.Insert(ctx, conn, s.svc.scope); err != nil {
|
||||||
|
return fmt.Errorf("cannot insert report: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
audit.ReportID = &report.ID
|
audit.ReportID = &report.ID
|
||||||
|
|||||||
@@ -1226,6 +1226,17 @@ func (s *DocumentService) BuildAndUploadExport(ctx context.Context, exportJobID
|
|||||||
return fmt.Errorf("cannot get document IDs: %w", err)
|
return fmt.Errorf("cannot get document IDs: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if len(documentIDs) == 0 {
|
||||||
|
return fmt.Errorf("no document IDs found")
|
||||||
|
}
|
||||||
|
|
||||||
|
var organizationID gid.GID
|
||||||
|
firstDocument := &coredata.Document{}
|
||||||
|
if err := firstDocument.LoadByID(ctx, tx, s.svc.scope, documentIDs[0]); err != nil {
|
||||||
|
return fmt.Errorf("cannot load document for organization ID: %w", err)
|
||||||
|
}
|
||||||
|
organizationID = firstDocument.OrganizationID
|
||||||
|
|
||||||
tempDir := os.TempDir()
|
tempDir := os.TempDir()
|
||||||
tempFile, err := os.CreateTemp(tempDir, "probo-document-export-*.zip")
|
tempFile, err := os.CreateTemp(tempDir, "probo-document-export-*.zip")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -1273,8 +1284,9 @@ func (s *DocumentService) BuildAndUploadExport(ctx context.Context, exportJobID
|
|||||||
ContentLength: ref.Ref(fileInfo.Size()),
|
ContentLength: ref.Ref(fileInfo.Size()),
|
||||||
ContentType: ref.Ref("application/zip"),
|
ContentType: ref.Ref("application/zip"),
|
||||||
Metadata: map[string]string{
|
Metadata: map[string]string{
|
||||||
"type": "document-export",
|
"type": "document-export",
|
||||||
"export-job-id": exportJob.ID.String(),
|
"export-job-id": exportJob.ID.String(),
|
||||||
|
"organization-id": organizationID.String(),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -155,6 +155,11 @@ func (s EvidenceService) Fulfill(
|
|||||||
return fmt.Errorf("cannot load evidence: %w", err)
|
return fmt.Errorf("cannot load evidence: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
measure := &coredata.Measure{}
|
||||||
|
if err := measure.LoadByID(ctx, conn, s.svc.scope, evidence.MeasureID); err != nil {
|
||||||
|
return fmt.Errorf("cannot load measure: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
evidence.State = coredata.EvidenceStateFulfilled
|
evidence.State = coredata.EvidenceStateFulfilled
|
||||||
|
|
||||||
if req.File != nil {
|
if req.File != nil {
|
||||||
@@ -206,6 +211,11 @@ func (s EvidenceService) Fulfill(
|
|||||||
Key: aws.String(objectKey.String()),
|
Key: aws.String(objectKey.String()),
|
||||||
Body: fileContent,
|
Body: fileContent,
|
||||||
ContentType: aws.String(contentType),
|
ContentType: aws.String(contentType),
|
||||||
|
Metadata: map[string]string{
|
||||||
|
"type": "evidence",
|
||||||
|
"evidence-id": req.EvidenceID.String(),
|
||||||
|
"organization-id": measure.OrganizationID.String(),
|
||||||
|
},
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("cannot upload file to S3: %w", err)
|
return fmt.Errorf("cannot upload file to S3: %w", err)
|
||||||
@@ -271,27 +281,7 @@ func (s EvidenceService) UploadTaskEvidence(
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
objectKey, err := uuid.NewV7()
|
var measureOrganizationID gid.GID
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("cannot generate object key: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
_, err = s.svc.s3.PutObject(
|
|
||||||
ctx,
|
|
||||||
&s3.PutObjectInput{
|
|
||||||
Bucket: aws.String(s.svc.bucket),
|
|
||||||
Key: aws.String(objectKey.String()),
|
|
||||||
Body: req.File.Content,
|
|
||||||
ContentType: aws.String(req.File.ContentType),
|
|
||||||
},
|
|
||||||
)
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("cannot upload file to S3: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
evidence.ObjectKey = objectKey.String()
|
|
||||||
evidence.MimeType = req.File.ContentType
|
|
||||||
evidence.Size = uint64(req.File.Size)
|
|
||||||
|
|
||||||
err = s.svc.pg.WithTx(
|
err = s.svc.pg.WithTx(
|
||||||
ctx,
|
ctx,
|
||||||
@@ -306,6 +296,38 @@ func (s EvidenceService) UploadTaskEvidence(
|
|||||||
return fmt.Errorf("task %q has no measure", req.TaskID)
|
return fmt.Errorf("task %q has no measure", req.TaskID)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
measure := &coredata.Measure{}
|
||||||
|
if err := measure.LoadByID(ctx, conn, s.svc.scope, *task.MeasureID); err != nil {
|
||||||
|
return fmt.Errorf("cannot load measure: %w", err)
|
||||||
|
}
|
||||||
|
measureOrganizationID = measure.OrganizationID
|
||||||
|
|
||||||
|
objectKey, err := uuid.NewV7()
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("cannot generate object key: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = s.svc.s3.PutObject(
|
||||||
|
ctx,
|
||||||
|
&s3.PutObjectInput{
|
||||||
|
Bucket: aws.String(s.svc.bucket),
|
||||||
|
Key: aws.String(objectKey.String()),
|
||||||
|
Body: req.File.Content,
|
||||||
|
ContentType: aws.String(req.File.ContentType),
|
||||||
|
Metadata: map[string]string{
|
||||||
|
"type": "evidence",
|
||||||
|
"evidence-id": evidenceID.String(),
|
||||||
|
"organization-id": measureOrganizationID.String(),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("cannot upload file to S3: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
evidence.ObjectKey = objectKey.String()
|
||||||
|
evidence.MimeType = req.File.ContentType
|
||||||
|
evidence.Size = uint64(req.File.Size)
|
||||||
evidence.MeasureID = *task.MeasureID
|
evidence.MeasureID = *task.MeasureID
|
||||||
|
|
||||||
if err := evidence.Insert(ctx, conn, s.svc.scope); err != nil {
|
if err := evidence.Insert(ctx, conn, s.svc.scope); err != nil {
|
||||||
@@ -355,37 +377,40 @@ func (s EvidenceService) UploadMeasureEvidence(
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
objectKey, err := uuid.NewV7()
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("cannot generate object key: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
_, err = s.svc.s3.PutObject(
|
|
||||||
ctx,
|
|
||||||
&s3.PutObjectInput{
|
|
||||||
Bucket: aws.String(s.svc.bucket),
|
|
||||||
Key: aws.String(objectKey.String()),
|
|
||||||
Body: req.File.Content,
|
|
||||||
ContentType: aws.String(req.File.ContentType),
|
|
||||||
},
|
|
||||||
)
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("cannot upload file to S3: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
evidence.ObjectKey = objectKey.String()
|
|
||||||
evidence.MimeType = req.File.ContentType
|
|
||||||
evidence.Size = uint64(req.File.Size)
|
|
||||||
|
|
||||||
err = s.svc.pg.WithTx(
|
err = s.svc.pg.WithTx(
|
||||||
ctx,
|
ctx,
|
||||||
func(conn pg.Conn) error {
|
func(conn pg.Conn) error {
|
||||||
measure := &coredata.Measure{}
|
measure := &coredata.Measure{}
|
||||||
|
|
||||||
if err := measure.LoadByID(ctx, conn, s.svc.scope, req.MeasureID); err != nil {
|
if err := measure.LoadByID(ctx, conn, s.svc.scope, req.MeasureID); err != nil {
|
||||||
return fmt.Errorf("cannot load measure %q: %w", req.MeasureID, err)
|
return fmt.Errorf("cannot load measure %q: %w", req.MeasureID, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
objectKey, err := uuid.NewV7()
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("cannot generate object key: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = s.svc.s3.PutObject(
|
||||||
|
ctx,
|
||||||
|
&s3.PutObjectInput{
|
||||||
|
Bucket: aws.String(s.svc.bucket),
|
||||||
|
Key: aws.String(objectKey.String()),
|
||||||
|
Body: req.File.Content,
|
||||||
|
ContentType: aws.String(req.File.ContentType),
|
||||||
|
Metadata: map[string]string{
|
||||||
|
"type": "evidence",
|
||||||
|
"evidence-id": evidenceID.String(),
|
||||||
|
"organization-id": measure.OrganizationID.String(),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("cannot upload file to S3: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
evidence.ObjectKey = objectKey.String()
|
||||||
|
evidence.MimeType = req.File.ContentType
|
||||||
|
evidence.Size = uint64(req.File.Size)
|
||||||
evidence.MeasureID = req.MeasureID
|
evidence.MeasureID = req.MeasureID
|
||||||
|
|
||||||
if err := evidence.Insert(ctx, conn, s.svc.scope); err != nil {
|
if err := evidence.Insert(ctx, conn, s.svc.scope); err != nil {
|
||||||
|
|||||||
@@ -807,8 +807,9 @@ func (s *FrameworkService) BuildAndUploadExport(ctx context.Context, exportJobID
|
|||||||
ContentLength: ref.Ref(fileInfo.Size()),
|
ContentLength: ref.Ref(fileInfo.Size()),
|
||||||
ContentType: ref.Ref("application/zip"),
|
ContentType: ref.Ref("application/zip"),
|
||||||
Metadata: map[string]string{
|
Metadata: map[string]string{
|
||||||
"type": "framework-export",
|
"type": "framework-export",
|
||||||
"export-job-id": exportJob.ID.String(),
|
"export-job-id": exportJob.ID.String(),
|
||||||
|
"organization-id": framework.OrganizationID.String(),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -248,6 +248,10 @@ func (s OrganizationService) Update(
|
|||||||
Key: aws.String(objectKey.String()),
|
Key: aws.String(objectKey.String()),
|
||||||
Body: fileContent,
|
Body: fileContent,
|
||||||
ContentType: aws.String(contentType),
|
ContentType: aws.String(contentType),
|
||||||
|
Metadata: map[string]string{
|
||||||
|
"type": "organization-logo",
|
||||||
|
"organization-id": organization.ID.String(),
|
||||||
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -23,7 +23,6 @@ import (
|
|||||||
"github.com/aws/aws-sdk-go-v2/service/s3"
|
"github.com/aws/aws-sdk-go-v2/service/s3"
|
||||||
"github.com/getprobo/probo/pkg/coredata"
|
"github.com/getprobo/probo/pkg/coredata"
|
||||||
"github.com/getprobo/probo/pkg/gid"
|
"github.com/getprobo/probo/pkg/gid"
|
||||||
"go.gearno.de/crypto/uuid"
|
|
||||||
"go.gearno.de/kit/pg"
|
"go.gearno.de/kit/pg"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -56,57 +55,6 @@ func (s ReportService) Get(
|
|||||||
return report, nil
|
return report, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s ReportService) Create(
|
|
||||||
ctx context.Context,
|
|
||||||
file File,
|
|
||||||
) (*coredata.Report, error) {
|
|
||||||
reportID := gid.New(s.svc.scope.GetTenantID(), coredata.ReportEntityType)
|
|
||||||
now := time.Now()
|
|
||||||
|
|
||||||
objectKey, err := uuid.NewV7()
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("cannot generate object key: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
_, err = s.svc.s3.PutObject(ctx, &s3.PutObjectInput{
|
|
||||||
Bucket: aws.String(s.svc.bucket),
|
|
||||||
Key: aws.String(objectKey.String()),
|
|
||||||
Body: file.Content,
|
|
||||||
ContentType: aws.String(file.ContentType),
|
|
||||||
Metadata: map[string]string{
|
|
||||||
"report-id": reportID.String(),
|
|
||||||
},
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("cannot upload report to S3: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
report := &coredata.Report{
|
|
||||||
ID: reportID,
|
|
||||||
ObjectKey: objectKey.String(),
|
|
||||||
MimeType: file.ContentType,
|
|
||||||
Filename: file.Filename,
|
|
||||||
Size: file.Size,
|
|
||||||
CreatedAt: now,
|
|
||||||
UpdatedAt: now,
|
|
||||||
}
|
|
||||||
|
|
||||||
err = s.svc.pg.WithConn(ctx, func(conn pg.Conn) error {
|
|
||||||
err := report.Insert(ctx, conn, s.svc.scope)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("cannot insert report: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
})
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return report, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s ReportService) Delete(
|
func (s ReportService) Delete(
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
reportID gid.GID,
|
reportID gid.GID,
|
||||||
|
|||||||
@@ -148,7 +148,7 @@ func (s TrustCenterReferenceService) Create(
|
|||||||
var logoKey string
|
var logoKey string
|
||||||
|
|
||||||
err := s.svc.pg.WithTx(ctx, func(tx pg.Conn) error {
|
err := s.svc.pg.WithTx(ctx, func(tx pg.Conn) error {
|
||||||
fileID, s3Key, err := s.uploadLogoFile(ctx, tx, req.LogoFile, referenceID, now)
|
fileID, s3Key, err := s.uploadLogoFile(ctx, tx, req.LogoFile, referenceID, req.TrustCenterID, now)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("cannot upload logo file: %w", err)
|
return fmt.Errorf("cannot upload logo file: %w", err)
|
||||||
}
|
}
|
||||||
@@ -200,8 +200,14 @@ func (s TrustCenterReferenceService) Update(
|
|||||||
var logoKey string
|
var logoKey string
|
||||||
|
|
||||||
err := s.svc.pg.WithTx(ctx, func(tx pg.Conn) error {
|
err := s.svc.pg.WithTx(ctx, func(tx pg.Conn) error {
|
||||||
|
reference = &coredata.TrustCenterReference{}
|
||||||
|
|
||||||
|
if err := reference.LoadByID(ctx, tx, s.svc.scope, req.ID); err != nil {
|
||||||
|
return fmt.Errorf("cannot load trust center reference: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
if req.LogoFile != nil {
|
if req.LogoFile != nil {
|
||||||
fileID, s3Key, err := s.uploadLogoFile(ctx, tx, *req.LogoFile, req.ID, now)
|
fileID, s3Key, err := s.uploadLogoFile(ctx, tx, *req.LogoFile, req.ID, reference.TrustCenterID, now)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("cannot upload logo file: %w", err)
|
return fmt.Errorf("cannot upload logo file: %w", err)
|
||||||
}
|
}
|
||||||
@@ -209,12 +215,6 @@ func (s TrustCenterReferenceService) Update(
|
|||||||
logoKey = s3Key
|
logoKey = s3Key
|
||||||
}
|
}
|
||||||
|
|
||||||
reference = &coredata.TrustCenterReference{}
|
|
||||||
|
|
||||||
if err := reference.LoadByID(ctx, tx, s.svc.scope, req.ID); err != nil {
|
|
||||||
return fmt.Errorf("cannot load trust center reference: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if req.Name != nil {
|
if req.Name != nil {
|
||||||
reference.Name = *req.Name
|
reference.Name = *req.Name
|
||||||
}
|
}
|
||||||
@@ -316,6 +316,7 @@ func (s TrustCenterReferenceService) uploadLogoFile(
|
|||||||
tx pg.Conn,
|
tx pg.Conn,
|
||||||
file File,
|
file File,
|
||||||
referenceID gid.GID,
|
referenceID gid.GID,
|
||||||
|
trustCenterID gid.GID,
|
||||||
now time.Time,
|
now time.Time,
|
||||||
) (gid.GID, string, error) {
|
) (gid.GID, string, error) {
|
||||||
fileID := gid.New(s.svc.scope.GetTenantID(), coredata.FileEntityType)
|
fileID := gid.New(s.svc.scope.GetTenantID(), coredata.FileEntityType)
|
||||||
@@ -325,6 +326,11 @@ func (s TrustCenterReferenceService) uploadLogoFile(
|
|||||||
return gid.GID{}, "", fmt.Errorf("cannot generate object key: %w", err)
|
return gid.GID{}, "", fmt.Errorf("cannot generate object key: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
trustCenter := &coredata.TrustCenter{}
|
||||||
|
if err := trustCenter.LoadByID(ctx, tx, s.svc.scope, trustCenterID); err != nil {
|
||||||
|
return gid.GID{}, "", fmt.Errorf("cannot load trust center: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
var fileSize int64
|
var fileSize int64
|
||||||
var fileContent io.ReadSeeker
|
var fileContent io.ReadSeeker
|
||||||
filename := file.Filename
|
filename := file.Filename
|
||||||
@@ -372,6 +378,7 @@ func (s TrustCenterReferenceService) uploadLogoFile(
|
|||||||
Metadata: map[string]string{
|
Metadata: map[string]string{
|
||||||
"type": "trust-center-reference-logo",
|
"type": "trust-center-reference-logo",
|
||||||
"trust-center-reference-id": referenceID.String(),
|
"trust-center-reference-id": referenceID.String(),
|
||||||
|
"organization-id": trustCenter.OrganizationID.String(),
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -175,34 +175,6 @@ func (s TrustCenterService) UploadNDA(
|
|||||||
return nil, nil, fmt.Errorf("cannot generate object key: %w", err)
|
return nil, nil, fmt.Errorf("cannot generate object key: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
mimeType := mime.TypeByExtension(filepath.Ext(req.FileName))
|
|
||||||
|
|
||||||
_, err = s.svc.s3.PutObject(ctx, &s3.PutObjectInput{
|
|
||||||
Bucket: &s.svc.bucket,
|
|
||||||
Key: aws.String(objectKey.String()),
|
|
||||||
Body: req.File,
|
|
||||||
ContentType: &mimeType,
|
|
||||||
Metadata: map[string]string{
|
|
||||||
"type": "trust-center-nda",
|
|
||||||
"trust-center-id": req.TrustCenterID.String(),
|
|
||||||
},
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
return nil, nil, fmt.Errorf("cannot upload file to S3: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
headOutput, err := s.svc.s3.HeadObject(ctx, &s3.HeadObjectInput{
|
|
||||||
Bucket: aws.String(s.svc.bucket),
|
|
||||||
Key: aws.String(objectKey.String()),
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
return nil, nil, fmt.Errorf("cannot get object metadata: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
now := time.Now()
|
|
||||||
|
|
||||||
fileID := gid.New(s.svc.scope.GetTenantID(), coredata.FileEntityType)
|
|
||||||
|
|
||||||
var trustCenter *coredata.TrustCenter
|
var trustCenter *coredata.TrustCenter
|
||||||
var file *coredata.File
|
var file *coredata.File
|
||||||
|
|
||||||
@@ -214,6 +186,34 @@ func (s TrustCenterService) UploadNDA(
|
|||||||
return fmt.Errorf("cannot load trust center: %w", err)
|
return fmt.Errorf("cannot load trust center: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mimeType := mime.TypeByExtension(filepath.Ext(req.FileName))
|
||||||
|
|
||||||
|
_, err := s.svc.s3.PutObject(ctx, &s3.PutObjectInput{
|
||||||
|
Bucket: &s.svc.bucket,
|
||||||
|
Key: aws.String(objectKey.String()),
|
||||||
|
Body: req.File,
|
||||||
|
ContentType: &mimeType,
|
||||||
|
Metadata: map[string]string{
|
||||||
|
"type": "trust-center-nda",
|
||||||
|
"trust-center-id": req.TrustCenterID.String(),
|
||||||
|
"organization-id": trustCenter.OrganizationID.String(),
|
||||||
|
},
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("cannot upload file to S3: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
headOutput, err := s.svc.s3.HeadObject(ctx, &s3.HeadObjectInput{
|
||||||
|
Bucket: aws.String(s.svc.bucket),
|
||||||
|
Key: aws.String(objectKey.String()),
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("cannot get object metadata: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
now := time.Now()
|
||||||
|
fileID := gid.New(s.svc.scope.GetTenantID(), coredata.FileEntityType)
|
||||||
|
|
||||||
file = &coredata.File{
|
file = &coredata.File{
|
||||||
ID: fileID,
|
ID: fileID,
|
||||||
BucketName: s.svc.bucket,
|
BucketName: s.svc.bucket,
|
||||||
|
|||||||
@@ -90,31 +90,6 @@ func (s VendorBusinessAssociateAgreementService) Upload(
|
|||||||
return nil, nil, fmt.Errorf("cannot generate object key: %w", err)
|
return nil, nil, fmt.Errorf("cannot generate object key: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
mimeType := mime.TypeByExtension(filepath.Ext(req.FileName))
|
|
||||||
|
|
||||||
_, err = s.svc.s3.PutObject(ctx, &s3.PutObjectInput{
|
|
||||||
Bucket: &s.svc.bucket,
|
|
||||||
Key: aws.String(objectKey.String()),
|
|
||||||
Body: req.File,
|
|
||||||
ContentType: &mimeType,
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
return nil, nil, fmt.Errorf("cannot upload file to S3: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
headOutput, err := s.svc.s3.HeadObject(ctx, &s3.HeadObjectInput{
|
|
||||||
Bucket: aws.String(s.svc.bucket),
|
|
||||||
Key: aws.String(objectKey.String()),
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
return nil, nil, fmt.Errorf("cannot get object metadata: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
now := time.Now()
|
|
||||||
|
|
||||||
fileID := gid.New(s.svc.scope.GetTenantID(), coredata.FileEntityType)
|
|
||||||
vendorBusinessAssociateAgreementID := gid.New(s.svc.scope.GetTenantID(), coredata.VendorBusinessAssociateAgreementEntityType)
|
|
||||||
|
|
||||||
var vendorBusinessAssociateAgreement *coredata.VendorBusinessAssociateAgreement
|
var vendorBusinessAssociateAgreement *coredata.VendorBusinessAssociateAgreement
|
||||||
var file *coredata.File
|
var file *coredata.File
|
||||||
|
|
||||||
@@ -126,6 +101,35 @@ func (s VendorBusinessAssociateAgreementService) Upload(
|
|||||||
return fmt.Errorf("cannot load vendor: %w", err)
|
return fmt.Errorf("cannot load vendor: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mimeType := mime.TypeByExtension(filepath.Ext(req.FileName))
|
||||||
|
|
||||||
|
_, err := s.svc.s3.PutObject(ctx, &s3.PutObjectInput{
|
||||||
|
Bucket: &s.svc.bucket,
|
||||||
|
Key: aws.String(objectKey.String()),
|
||||||
|
Body: req.File,
|
||||||
|
ContentType: &mimeType,
|
||||||
|
Metadata: map[string]string{
|
||||||
|
"type": "vendor-business-associate-agreement",
|
||||||
|
"vendor-id": vendorID.String(),
|
||||||
|
"organization-id": vendor.OrganizationID.String(),
|
||||||
|
},
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("cannot upload file to S3: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
headOutput, err := s.svc.s3.HeadObject(ctx, &s3.HeadObjectInput{
|
||||||
|
Bucket: aws.String(s.svc.bucket),
|
||||||
|
Key: aws.String(objectKey.String()),
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("cannot get object metadata: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
now := time.Now()
|
||||||
|
fileID := gid.New(s.svc.scope.GetTenantID(), coredata.FileEntityType)
|
||||||
|
vendorBusinessAssociateAgreementID := gid.New(s.svc.scope.GetTenantID(), coredata.VendorBusinessAssociateAgreementEntityType)
|
||||||
|
|
||||||
file = &coredata.File{
|
file = &coredata.File{
|
||||||
ID: fileID,
|
ID: fileID,
|
||||||
BucketName: s.svc.bucket,
|
BucketName: s.svc.bucket,
|
||||||
|
|||||||
@@ -76,45 +76,56 @@ func (s VendorComplianceReportService) Upload(
|
|||||||
return nil, fmt.Errorf("cannot generate object key: %w", err)
|
return nil, fmt.Errorf("cannot generate object key: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
mimeType := mime.TypeByExtension(filepath.Ext(req.ReportName))
|
var vendorComplianceReport *coredata.VendorComplianceReport
|
||||||
|
|
||||||
_, err = s.svc.s3.PutObject(ctx, &s3.PutObjectInput{
|
err = s.svc.pg.WithTx(
|
||||||
Bucket: &s.svc.bucket,
|
|
||||||
Key: aws.String(objectKey.String()),
|
|
||||||
Body: req.File,
|
|
||||||
ContentType: &mimeType,
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("cannot upload file to S3: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
headOutput, err := s.svc.s3.HeadObject(ctx, &s3.HeadObjectInput{
|
|
||||||
Bucket: aws.String(s.svc.bucket),
|
|
||||||
Key: aws.String(objectKey.String()),
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("cannot get object metadata: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
now := time.Now()
|
|
||||||
|
|
||||||
vendorComplianceReportID := gid.New(s.svc.scope.GetTenantID(), coredata.VendorComplianceReportEntityType)
|
|
||||||
|
|
||||||
vendorComplianceReport := &coredata.VendorComplianceReport{
|
|
||||||
ID: vendorComplianceReportID,
|
|
||||||
VendorID: vendorID,
|
|
||||||
ReportDate: req.ReportDate,
|
|
||||||
ValidUntil: req.ValidUntil,
|
|
||||||
ReportName: req.ReportName,
|
|
||||||
FileKey: objectKey.String(),
|
|
||||||
FileSize: *headOutput.ContentLength,
|
|
||||||
CreatedAt: now,
|
|
||||||
UpdatedAt: now,
|
|
||||||
}
|
|
||||||
|
|
||||||
err = s.svc.pg.WithConn(
|
|
||||||
ctx,
|
ctx,
|
||||||
func(conn pg.Conn) error {
|
func(conn pg.Conn) error {
|
||||||
|
vendor := &coredata.Vendor{}
|
||||||
|
if err := vendor.LoadByID(ctx, conn, s.svc.scope, vendorID); err != nil {
|
||||||
|
return fmt.Errorf("cannot load vendor: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
mimeType := mime.TypeByExtension(filepath.Ext(req.ReportName))
|
||||||
|
|
||||||
|
_, err := s.svc.s3.PutObject(ctx, &s3.PutObjectInput{
|
||||||
|
Bucket: &s.svc.bucket,
|
||||||
|
Key: aws.String(objectKey.String()),
|
||||||
|
Body: req.File,
|
||||||
|
ContentType: &mimeType,
|
||||||
|
Metadata: map[string]string{
|
||||||
|
"type": "vendor-compliance-report",
|
||||||
|
"vendor-id": vendorID.String(),
|
||||||
|
"organization-id": vendor.OrganizationID.String(),
|
||||||
|
},
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("cannot upload file to S3: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
headOutput, err := s.svc.s3.HeadObject(ctx, &s3.HeadObjectInput{
|
||||||
|
Bucket: aws.String(s.svc.bucket),
|
||||||
|
Key: aws.String(objectKey.String()),
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("cannot get object metadata: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
now := time.Now()
|
||||||
|
vendorComplianceReportID := gid.New(s.svc.scope.GetTenantID(), coredata.VendorComplianceReportEntityType)
|
||||||
|
|
||||||
|
vendorComplianceReport = &coredata.VendorComplianceReport{
|
||||||
|
ID: vendorComplianceReportID,
|
||||||
|
VendorID: vendorID,
|
||||||
|
ReportDate: req.ReportDate,
|
||||||
|
ValidUntil: req.ValidUntil,
|
||||||
|
ReportName: req.ReportName,
|
||||||
|
FileKey: objectKey.String(),
|
||||||
|
FileSize: *headOutput.ContentLength,
|
||||||
|
CreatedAt: now,
|
||||||
|
UpdatedAt: now,
|
||||||
|
}
|
||||||
|
|
||||||
return vendorComplianceReport.Insert(ctx, conn, s.svc.scope)
|
return vendorComplianceReport.Insert(ctx, conn, s.svc.scope)
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -90,42 +90,44 @@ func (s VendorDataPrivacyAgreementService) Upload(
|
|||||||
return nil, nil, fmt.Errorf("cannot generate object key: %w", err)
|
return nil, nil, fmt.Errorf("cannot generate object key: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
mimeType := mime.TypeByExtension(filepath.Ext(req.FileName))
|
|
||||||
|
|
||||||
_, err = s.svc.s3.PutObject(ctx, &s3.PutObjectInput{
|
|
||||||
Bucket: &s.svc.bucket,
|
|
||||||
Key: aws.String(objectKey.String()),
|
|
||||||
Body: req.File,
|
|
||||||
ContentType: &mimeType,
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
return nil, nil, fmt.Errorf("cannot upload file to S3: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
headOutput, err := s.svc.s3.HeadObject(ctx, &s3.HeadObjectInput{
|
|
||||||
Bucket: aws.String(s.svc.bucket),
|
|
||||||
Key: aws.String(objectKey.String()),
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
return nil, nil, fmt.Errorf("cannot get object metadata: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
now := time.Now()
|
|
||||||
|
|
||||||
fileID := gid.New(s.svc.scope.GetTenantID(), coredata.FileEntityType)
|
|
||||||
vendorDataPrivacyAgreementID := gid.New(s.svc.scope.GetTenantID(), coredata.VendorDataPrivacyAgreementEntityType)
|
|
||||||
|
|
||||||
var vendorDataPrivacyAgreement *coredata.VendorDataPrivacyAgreement
|
var vendorDataPrivacyAgreement *coredata.VendorDataPrivacyAgreement
|
||||||
var file *coredata.File
|
var file *coredata.File
|
||||||
|
var vendor *coredata.Vendor
|
||||||
|
|
||||||
err = s.svc.pg.WithTx(
|
err = s.svc.pg.WithTx(
|
||||||
ctx,
|
ctx,
|
||||||
func(conn pg.Conn) error {
|
func(conn pg.Conn) error {
|
||||||
vendor := &coredata.Vendor{}
|
vendor = &coredata.Vendor{}
|
||||||
if err := vendor.LoadByID(ctx, conn, s.svc.scope, vendorID); err != nil {
|
if err := vendor.LoadByID(ctx, conn, s.svc.scope, vendorID); err != nil {
|
||||||
return fmt.Errorf("cannot load vendor: %w", err)
|
return fmt.Errorf("cannot load vendor: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mimeType := mime.TypeByExtension(filepath.Ext(req.FileName))
|
||||||
|
_, err := s.svc.s3.PutObject(ctx, &s3.PutObjectInput{
|
||||||
|
Bucket: &s.svc.bucket,
|
||||||
|
Key: aws.String(objectKey.String()),
|
||||||
|
Body: req.File,
|
||||||
|
ContentType: &mimeType,
|
||||||
|
Metadata: map[string]string{
|
||||||
|
"type": "vendor-data-privacy-agreement",
|
||||||
|
"vendor-id": vendorID.String(),
|
||||||
|
"organization-id": vendor.OrganizationID.String(),
|
||||||
|
},
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("cannot upload file to S3: %w", err)
|
||||||
|
}
|
||||||
|
headOutput, err := s.svc.s3.HeadObject(ctx, &s3.HeadObjectInput{
|
||||||
|
Bucket: aws.String(s.svc.bucket),
|
||||||
|
Key: aws.String(objectKey.String()),
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("cannot get object metadata: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
now := time.Now()
|
||||||
|
fileID := gid.New(s.svc.scope.GetTenantID(), coredata.FileEntityType)
|
||||||
|
vendorDataPrivacyAgreementID := gid.New(s.svc.scope.GetTenantID(), coredata.VendorDataPrivacyAgreementEntityType)
|
||||||
file = &coredata.File{
|
file = &coredata.File{
|
||||||
ID: fileID,
|
ID: fileID,
|
||||||
BucketName: s.svc.bucket,
|
BucketName: s.svc.bucket,
|
||||||
|
|||||||
Reference in New Issue
Block a user