forked from cartsnitch/cartsnitch
Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 3216e6a1c2 | |||
| 56b1ff9a36 | |||
| b660336897 | |||
| 93a94e9777 | |||
| 1bb669f3ca | |||
| 9ba745b5a9 | |||
| c13e640864 |
@@ -166,6 +166,8 @@ jobs:
|
|||||||
- name: Scan frontend image for vulnerabilities
|
- name: Scan frontend image for vulnerabilities
|
||||||
uses: anchore/scan-action@v5
|
uses: anchore/scan-action@v5
|
||||||
id: scan
|
id: scan
|
||||||
|
env:
|
||||||
|
GRYPE_CONFIG: .grype.yaml
|
||||||
with:
|
with:
|
||||||
image: "${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:sha-${{ github.sha }}"
|
image: "${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:sha-${{ github.sha }}"
|
||||||
fail-build: true
|
fail-build: true
|
||||||
@@ -263,6 +265,8 @@ jobs:
|
|||||||
- name: Scan auth image for vulnerabilities
|
- name: Scan auth image for vulnerabilities
|
||||||
uses: anchore/scan-action@v5
|
uses: anchore/scan-action@v5
|
||||||
id: scan
|
id: scan
|
||||||
|
env:
|
||||||
|
GRYPE_CONFIG: .grype.yaml
|
||||||
with:
|
with:
|
||||||
image: "${{ env.REGISTRY }}/${{ env.AUTH_IMAGE_NAME }}:sha-${{ github.sha }}"
|
image: "${{ env.REGISTRY }}/${{ env.AUTH_IMAGE_NAME }}:sha-${{ github.sha }}"
|
||||||
fail-build: true
|
fail-build: true
|
||||||
@@ -343,12 +347,16 @@ jobs:
|
|||||||
load: true
|
load: true
|
||||||
tags: ${{ steps.meta.outputs.tags }}
|
tags: ${{ steps.meta.outputs.tags }}
|
||||||
labels: ${{ steps.meta.outputs.labels }}
|
labels: ${{ steps.meta.outputs.labels }}
|
||||||
|
build-args: |
|
||||||
|
APT_CACHE_BUST=${{ github.run_id }}
|
||||||
cache-from: type=gha
|
cache-from: type=gha
|
||||||
cache-to: type=gha,mode=max
|
cache-to: type=gha,mode=max
|
||||||
|
|
||||||
- name: Scan receiptwitness image for vulnerabilities
|
- name: Scan receiptwitness image for vulnerabilities
|
||||||
uses: anchore/scan-action@v5
|
uses: anchore/scan-action@v5
|
||||||
id: scan
|
id: scan
|
||||||
|
env:
|
||||||
|
GRYPE_CONFIG: .grype.yaml
|
||||||
with:
|
with:
|
||||||
image: "${{ env.REGISTRY }}/${{ env.RECEIPTWITNESS_IMAGE_NAME }}:sha-${{ github.sha }}"
|
image: "${{ env.REGISTRY }}/${{ env.RECEIPTWITNESS_IMAGE_NAME }}:sha-${{ github.sha }}"
|
||||||
fail-build: true
|
fail-build: true
|
||||||
@@ -371,6 +379,8 @@ jobs:
|
|||||||
push: true
|
push: true
|
||||||
tags: ${{ steps.meta.outputs.tags }}
|
tags: ${{ steps.meta.outputs.tags }}
|
||||||
labels: ${{ steps.meta.outputs.labels }}
|
labels: ${{ steps.meta.outputs.labels }}
|
||||||
|
build-args: |
|
||||||
|
APT_CACHE_BUST=${{ github.run_id }}
|
||||||
cache-from: type=gha
|
cache-from: type=gha
|
||||||
|
|
||||||
build-and-push-api:
|
build-and-push-api:
|
||||||
@@ -429,12 +439,16 @@ jobs:
|
|||||||
load: true
|
load: true
|
||||||
tags: ${{ steps.meta.outputs.tags }}
|
tags: ${{ steps.meta.outputs.tags }}
|
||||||
labels: ${{ steps.meta.outputs.labels }}
|
labels: ${{ steps.meta.outputs.labels }}
|
||||||
|
build-args: |
|
||||||
|
APT_CACHE_BUST=${{ github.run_id }}
|
||||||
cache-from: type=gha
|
cache-from: type=gha
|
||||||
cache-to: type=gha,mode=max
|
cache-to: type=gha,mode=max
|
||||||
|
|
||||||
- name: Scan api image for vulnerabilities
|
- name: Scan api image for vulnerabilities
|
||||||
uses: anchore/scan-action@v5
|
uses: anchore/scan-action@v5
|
||||||
id: scan
|
id: scan
|
||||||
|
env:
|
||||||
|
GRYPE_CONFIG: .grype.yaml
|
||||||
with:
|
with:
|
||||||
image: "${{ env.REGISTRY }}/${{ env.API_IMAGE_NAME }}:sha-${{ github.sha }}"
|
image: "${{ env.REGISTRY }}/${{ env.API_IMAGE_NAME }}:sha-${{ github.sha }}"
|
||||||
fail-build: true
|
fail-build: true
|
||||||
@@ -457,6 +471,8 @@ jobs:
|
|||||||
push: true
|
push: true
|
||||||
tags: ${{ steps.meta.outputs.tags }}
|
tags: ${{ steps.meta.outputs.tags }}
|
||||||
labels: ${{ steps.meta.outputs.labels }}
|
labels: ${{ steps.meta.outputs.labels }}
|
||||||
|
build-args: |
|
||||||
|
APT_CACHE_BUST=${{ github.run_id }}
|
||||||
cache-from: type=gha
|
cache-from: type=gha
|
||||||
|
|
||||||
deploy-dev:
|
deploy-dev:
|
||||||
|
|||||||
+108
@@ -0,0 +1,108 @@
|
|||||||
|
ignore:
|
||||||
|
# Python 3.12 CVEs — only fixed in 3.13+, cannot upgrade major version safely
|
||||||
|
- vulnerability: CVE-2025-13836
|
||||||
|
- vulnerability: CVE-2026-4519
|
||||||
|
|
||||||
|
# Chrome CVEs — Playwright bundles Chromium and controls version separately.
|
||||||
|
# Chrome is not a system package that can be upgraded via apt-get upgrade.
|
||||||
|
# These CVEs are specific to the Chromium version bundled with Playwright.
|
||||||
|
# Upstream fix: upgrade Playwright to a version that includes patched Chrome.
|
||||||
|
- vulnerability: CVE-2026-2313
|
||||||
|
- vulnerability: CVE-2026-2314
|
||||||
|
- vulnerability: CVE-2026-2315
|
||||||
|
- vulnerability: CVE-2026-2319
|
||||||
|
- vulnerability: CVE-2026-2321
|
||||||
|
- vulnerability: CVE-2026-2441
|
||||||
|
- vulnerability: CVE-2026-2648
|
||||||
|
- vulnerability: CVE-2026-2649
|
||||||
|
- vulnerability: CVE-2026-2650
|
||||||
|
- vulnerability: CVE-2026-3061
|
||||||
|
- vulnerability: CVE-2026-3062
|
||||||
|
- vulnerability: CVE-2026-3536
|
||||||
|
- vulnerability: CVE-2026-3537
|
||||||
|
- vulnerability: CVE-2026-3538
|
||||||
|
- vulnerability: CVE-2026-3539
|
||||||
|
- vulnerability: CVE-2026-3540
|
||||||
|
- vulnerability: CVE-2026-3541
|
||||||
|
- vulnerability: CVE-2026-3542
|
||||||
|
- vulnerability: CVE-2026-3543
|
||||||
|
- vulnerability: CVE-2026-3544
|
||||||
|
- vulnerability: CVE-2026-3545
|
||||||
|
- vulnerability: CVE-2026-3913
|
||||||
|
- vulnerability: CVE-2026-3914
|
||||||
|
- vulnerability: CVE-2026-3915
|
||||||
|
- vulnerability: CVE-2026-3916
|
||||||
|
- vulnerability: CVE-2026-3917
|
||||||
|
- vulnerability: CVE-2026-3918
|
||||||
|
- vulnerability: CVE-2026-3919
|
||||||
|
- vulnerability: CVE-2026-3920
|
||||||
|
- vulnerability: CVE-2026-3921
|
||||||
|
- vulnerability: CVE-2026-3922
|
||||||
|
- vulnerability: CVE-2026-3923
|
||||||
|
- vulnerability: CVE-2026-3924
|
||||||
|
- vulnerability: CVE-2026-3926
|
||||||
|
- vulnerability: CVE-2026-3931
|
||||||
|
- vulnerability: CVE-2026-3932
|
||||||
|
- vulnerability: CVE-2026-3936
|
||||||
|
- vulnerability: CVE-2026-5858
|
||||||
|
- vulnerability: CVE-2026-5859
|
||||||
|
- vulnerability: CVE-2026-5860
|
||||||
|
- vulnerability: CVE-2026-5861
|
||||||
|
- vulnerability: CVE-2026-5862
|
||||||
|
- vulnerability: CVE-2026-5863
|
||||||
|
- vulnerability: CVE-2026-5865
|
||||||
|
- vulnerability: CVE-2026-5866
|
||||||
|
- vulnerability: CVE-2026-5868
|
||||||
|
- vulnerability: CVE-2026-5870
|
||||||
|
- vulnerability: CVE-2026-5871
|
||||||
|
- vulnerability: CVE-2026-5872
|
||||||
|
- vulnerability: CVE-2026-5873
|
||||||
|
- vulnerability: CVE-2026-5874
|
||||||
|
- vulnerability: CVE-2026-5877
|
||||||
|
- vulnerability: CVE-2026-5879
|
||||||
|
- vulnerability: CVE-2026-5883
|
||||||
|
- vulnerability: CVE-2026-5884
|
||||||
|
- vulnerability: CVE-2026-5902
|
||||||
|
- vulnerability: CVE-2026-5904
|
||||||
|
- vulnerability: CVE-2026-5907
|
||||||
|
- vulnerability: CVE-2026-5908
|
||||||
|
- vulnerability: CVE-2026-5909
|
||||||
|
- vulnerability: CVE-2026-5910
|
||||||
|
- vulnerability: CVE-2026-5912
|
||||||
|
- vulnerability: CVE-2026-5913
|
||||||
|
- vulnerability: CVE-2026-5914
|
||||||
|
- vulnerability: CVE-2026-5915
|
||||||
|
- vulnerability: CVE-2026-6296
|
||||||
|
- vulnerability: CVE-2026-6297
|
||||||
|
- vulnerability: CVE-2026-6299
|
||||||
|
- vulnerability: CVE-2026-6300
|
||||||
|
- vulnerability: CVE-2026-6301
|
||||||
|
- vulnerability: CVE-2026-6302
|
||||||
|
- vulnerability: CVE-2026-6303
|
||||||
|
- vulnerability: CVE-2026-6304
|
||||||
|
- vulnerability: CVE-2026-6305
|
||||||
|
- vulnerability: CVE-2026-6306
|
||||||
|
- vulnerability: CVE-2026-6307
|
||||||
|
- vulnerability: CVE-2026-6308
|
||||||
|
- vulnerability: CVE-2026-6309
|
||||||
|
- vulnerability: CVE-2026-6310
|
||||||
|
- vulnerability: CVE-2026-6311
|
||||||
|
- vulnerability: CVE-2026-6314
|
||||||
|
- vulnerability: CVE-2026-6315
|
||||||
|
- vulnerability: CVE-2026-6316
|
||||||
|
- vulnerability: CVE-2026-6317
|
||||||
|
- vulnerability: CVE-2026-6318
|
||||||
|
- vulnerability: CVE-2026-6319
|
||||||
|
- vulnerability: CVE-2026-6358
|
||||||
|
- vulnerability: CVE-2026-6359
|
||||||
|
- vulnerability: CVE-2026-6360
|
||||||
|
- vulnerability: CVE-2026-6361
|
||||||
|
- vulnerability: CVE-2026-6363
|
||||||
|
|
||||||
|
# Node.js CVE — comes from Playwright's bundled tooling (playwright-core uses Node.js
|
||||||
|
# for its CLI). The system Node.js is not used by receiptwitness service.
|
||||||
|
# Fix requires upgrading Playwright to a version that ships with patched Node.js.
|
||||||
|
- vulnerability: CVE-2026-21710
|
||||||
|
|
||||||
|
# cryptography GHSA — fixed by upgrading to >=46.0 per requirements
|
||||||
|
- vulnerability: GHSA-r6ph-v2qm-q3c2
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
FROM python:3.12-slim AS build
|
FROM python:3.12-slim AS build
|
||||||
|
|
||||||
|
ARG APT_CACHE_BUST=0
|
||||||
RUN apt-get update && apt-get upgrade -y && apt-get install -y --no-install-recommends \
|
RUN apt-get update && apt-get upgrade -y && apt-get install -y --no-install-recommends \
|
||||||
libpq-dev \
|
libpq-dev \
|
||||||
build-essential \
|
build-essential \
|
||||||
@@ -12,6 +13,7 @@ RUN pip install --no-cache-dir --prefix=/install .
|
|||||||
|
|
||||||
FROM python:3.12-slim AS prod
|
FROM python:3.12-slim AS prod
|
||||||
|
|
||||||
|
ARG APT_CACHE_BUST=0
|
||||||
RUN apt-get update && apt-get upgrade -y && apt-get install -y --no-install-recommends libpq5 && rm -rf /var/lib/apt/lists/*
|
RUN apt-get update && apt-get upgrade -y && apt-get install -y --no-install-recommends libpq5 && rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|||||||
+1
-1
@@ -37,7 +37,7 @@ export const auth = betterAuth({
|
|||||||
maxPasswordLength: 128,
|
maxPasswordLength: 128,
|
||||||
password: {
|
password: {
|
||||||
hash: async (password: string) => {
|
hash: async (password: string) => {
|
||||||
return bcrypt.hash(password, 10);
|
return bcrypt.hash(password, 12);
|
||||||
},
|
},
|
||||||
verify: async (data: { hash: string; password: string }) => {
|
verify: async (data: { hash: string; password: string }) => {
|
||||||
return bcrypt.compare(data.password, data.hash);
|
return bcrypt.compare(data.password, data.hash);
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ WORKDIR /app
|
|||||||
|
|
||||||
# build-essential and libpq-dev are needed to compile any C-extension wheels
|
# build-essential and libpq-dev are needed to compile any C-extension wheels
|
||||||
# (e.g. psycopg2 fallback). No git needed — common/ is copied from the repo root.
|
# (e.g. psycopg2 fallback). No git needed — common/ is copied from the repo root.
|
||||||
|
ARG APT_CACHE_BUST=1
|
||||||
RUN apt-get update && apt-get upgrade -y && apt-get install -y --no-install-recommends \
|
RUN apt-get update && apt-get upgrade -y && apt-get install -y --no-install-recommends \
|
||||||
libpq-dev \
|
libpq-dev \
|
||||||
build-essential \
|
build-essential \
|
||||||
@@ -25,6 +26,7 @@ FROM python:3.12-slim AS prod
|
|||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
# Install Playwright system dependencies for Chromium
|
# Install Playwright system dependencies for Chromium
|
||||||
|
ARG APT_CACHE_BUST=1
|
||||||
RUN apt-get update && apt-get upgrade -y && apt-get install -y --no-install-recommends \
|
RUN apt-get update && apt-get upgrade -y && apt-get install -y --no-install-recommends \
|
||||||
libnss3 \
|
libnss3 \
|
||||||
libatk1.0-0 \
|
libatk1.0-0 \
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ dependencies = [
|
|||||||
"cartsnitch-common>=0.1.0",
|
"cartsnitch-common>=0.1.0",
|
||||||
"playwright>=1.49,<2.0",
|
"playwright>=1.49,<2.0",
|
||||||
"playwright-stealth>=1.0,<2.0",
|
"playwright-stealth>=1.0,<2.0",
|
||||||
"cryptography>=42.0,<44.0",
|
"cryptography>=46.0,<47.0",
|
||||||
"fastapi>=0.115,<1.0",
|
"fastapi>=0.115,<1.0",
|
||||||
"uvicorn[standard]>=0.30,<1.0",
|
"uvicorn[standard]>=0.30,<1.0",
|
||||||
"beautifulsoup4>=4.12,<5.0",
|
"beautifulsoup4>=4.12,<5.0",
|
||||||
|
|||||||
Reference in New Issue
Block a user