Compare commits

...

4 Commits

Author SHA1 Message Date
Elias Schneider
f2dfb3da5d release: 1.13.1 2025-10-07 08:21:41 +02:00
Elias Schneider
cbf0e3117d fix: mark any callback url as valid if they contain a wildcard (#1006) 2025-10-07 08:18:53 +02:00
CzBiX
694f266dea fix: uploading a client logo with an URL fails (#1008) 2025-10-06 10:37:43 -05:00
Kyle Mendell
29fc185376 chore: cleanup root of repo, update workflow actions (#1003)
Co-authored-by: Elias Schneider <login@eliasschneider.com>
2025-10-05 14:49:06 -05:00
17 changed files with 76 additions and 66 deletions

View File

@@ -24,10 +24,10 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@v4 uses: actions/checkout@v5
- name: Set up Go - name: Set up Go
uses: actions/setup-go@v5 uses: actions/setup-go@v6
with: with:
go-version-file: backend/go.mod go-version-file: backend/go.mod

View File

@@ -19,22 +19,20 @@ jobs:
attestations: write attestations: write
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@v4 uses: actions/checkout@v5
- name: Setup pnpm - name: Setup pnpm
uses: pnpm/action-setup@v4 uses: pnpm/action-setup@v4
- name: Setup Node.js - name: Setup Node.js
uses: actions/setup-node@v4 uses: actions/setup-node@v5
with: with:
node-version: 22 node-version: 22
cache: 'pnpm'
cache-dependency-path: pnpm-lock.yaml
- name: Setup Go - name: Setup Go
uses: actions/setup-go@v5 uses: actions/setup-go@v6
with: with:
go-version-file: 'backend/go.mod' go-version-file: "backend/go.mod"
- name: Set up QEMU - name: Set up QEMU
uses: docker/setup-qemu-action@v3 uses: docker/setup-qemu-action@v3
@@ -74,7 +72,7 @@ jobs:
platforms: linux/amd64,linux/arm64 platforms: linux/amd64,linux/arm64
push: true push: true
tags: ${{ env.DOCKER_IMAGE_NAME }}:next tags: ${{ env.DOCKER_IMAGE_NAME }}:next
file: Dockerfile-prebuilt file: docker/Dockerfile-prebuilt
- name: Build and push container image (distroless) - name: Build and push container image (distroless)
uses: docker/build-push-action@v6 uses: docker/build-push-action@v6
id: container-build-push-distroless id: container-build-push-distroless
@@ -83,16 +81,16 @@ jobs:
platforms: linux/amd64,linux/arm64 platforms: linux/amd64,linux/arm64
push: true push: true
tags: ${{ env.DOCKER_IMAGE_NAME }}:next-distroless tags: ${{ env.DOCKER_IMAGE_NAME }}:next-distroless
file: Dockerfile-distroless file: docker/Dockerfile-distroless
- name: Container image attestation - name: Container image attestation
uses: actions/attest-build-provenance@v2 uses: actions/attest-build-provenance@v2
with: with:
subject-name: '${{ env.DOCKER_IMAGE_NAME }}' subject-name: "${{ env.DOCKER_IMAGE_NAME }}"
subject-digest: ${{ steps.build-push-image.outputs.digest }} subject-digest: ${{ steps.build-push-image.outputs.digest }}
push-to-registry: true push-to-registry: true
- name: Container image attestation (distroless) - name: Container image attestation (distroless)
uses: actions/attest-build-provenance@v2 uses: actions/attest-build-provenance@v2
with: with:
subject-name: '${{ env.DOCKER_IMAGE_NAME }}' subject-name: "${{ env.DOCKER_IMAGE_NAME }}"
subject-digest: ${{ steps.container-build-push-distroless.outputs.digest }} subject-digest: ${{ steps.container-build-push-distroless.outputs.digest }}
push-to-registry: true push-to-registry: true

View File

@@ -3,15 +3,15 @@ on:
push: push:
branches: [main] branches: [main]
paths-ignore: paths-ignore:
- 'docs/**' - "docs/**"
- '**.md' - "**.md"
- '.github/**' - ".github/**"
pull_request: pull_request:
branches: [main] branches: [main]
paths-ignore: paths-ignore:
- 'docs/**' - "docs/**"
- '**.md' - "**.md"
- '.github/**' - ".github/**"
jobs: jobs:
build: build:
@@ -22,7 +22,7 @@ jobs:
actions: write actions: write
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v5
- name: Set up Docker Buildx - name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3 uses: docker/setup-buildx-action@v3
@@ -30,6 +30,8 @@ jobs:
- name: Build and export - name: Build and export
uses: docker/build-push-action@v6 uses: docker/build-push-action@v6
with: with:
context: .
file: docker/Dockerfile
push: false push: false
load: false load: false
tags: pocket-id:test tags: pocket-id:test
@@ -57,16 +59,15 @@ jobs:
matrix: matrix:
db: [sqlite, postgres] db: [sqlite, postgres]
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v5
- name: Setup pnpm - name: Setup pnpm
uses: pnpm/action-setup@v4 uses: pnpm/action-setup@v4
- uses: actions/setup-node@v4 - name: Setup Node.js
uses: actions/setup-node@v5
with: with:
node-version: 22 node-version: 22
cache: 'pnpm'
cache-dependency-path: pnpm-lock.yaml
- name: Cache Playwright Browsers - name: Cache Playwright Browsers
uses: actions/cache@v3 uses: actions/cache@v3

View File

@@ -3,7 +3,7 @@ name: Release
on: on:
push: push:
tags: tags:
- 'v*.*.*' - "v*.*.*"
jobs: jobs:
build: build:
@@ -19,14 +19,12 @@ jobs:
- name: Setup pnpm - name: Setup pnpm
uses: pnpm/action-setup@v4 uses: pnpm/action-setup@v4
- name: Setup Node.js - name: Setup Node.js
uses: actions/setup-node@v4 uses: actions/setup-node@v5
with: with:
node-version: 22 node-version: 22
cache: 'pnpm' - uses: actions/setup-go@v6
cache-dependency-path: pnpm-lock.yaml
- uses: actions/setup-go@v5
with: with:
go-version-file: 'backend/go.mod' go-version-file: "backend/go.mod"
- name: Set up QEMU - name: Set up QEMU
uses: docker/setup-qemu-action@v3 uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx - name: Set up Docker Buildx
@@ -81,7 +79,7 @@ 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 }}
file: Dockerfile-prebuilt file: docker/Dockerfile-prebuilt
- name: Build and push container image (distroless) - name: Build and push container image (distroless)
uses: docker/build-push-action@v6 uses: docker/build-push-action@v6
id: container-build-push-distroless id: container-build-push-distroless
@@ -91,21 +89,21 @@ jobs:
push: true push: true
tags: ${{ steps.meta-distroless.outputs.tags }} tags: ${{ steps.meta-distroless.outputs.tags }}
labels: ${{ steps.meta-distroless.outputs.labels }} labels: ${{ steps.meta-distroless.outputs.labels }}
file: Dockerfile-distroless file: docker/Dockerfile-distroless
- name: Binary attestation - name: Binary attestation
uses: actions/attest-build-provenance@v2 uses: actions/attest-build-provenance@v2
with: with:
subject-path: 'backend/.bin/pocket-id-**' subject-path: "backend/.bin/pocket-id-**"
- name: Container image attestation - name: Container image attestation
uses: actions/attest-build-provenance@v2 uses: actions/attest-build-provenance@v2
with: with:
subject-name: '${{ env.DOCKER_IMAGE_NAME }}' subject-name: "${{ env.DOCKER_IMAGE_NAME }}"
subject-digest: ${{ steps.container-build-push.outputs.digest }} subject-digest: ${{ steps.container-build-push.outputs.digest }}
push-to-registry: true push-to-registry: true
- name: Container image attestation (distroless) - name: Container image attestation (distroless)
uses: actions/attest-build-provenance@v2 uses: actions/attest-build-provenance@v2
with: with:
subject-name: '${{ env.DOCKER_IMAGE_NAME }}' subject-name: "${{ env.DOCKER_IMAGE_NAME }}"
subject-digest: ${{ steps.container-build-push-distroless.outputs.digest }} subject-digest: ${{ steps.container-build-push-distroless.outputs.digest }}
push-to-registry: true push-to-registry: true
- name: Upload binaries to release - name: Upload binaries to release
@@ -122,6 +120,6 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@v4 uses: actions/checkout@v5
- name: Mark release as published - name: Mark release as published
run: gh release edit ${{ github.ref_name }} --draft=false run: gh release edit ${{ github.ref_name }} --draft=false

View File

@@ -4,21 +4,21 @@ on:
push: push:
branches: [main] branches: [main]
paths: paths:
- 'frontend/src/**' - "frontend/src/**"
- '.github/svelte-check-matcher.json' - ".github/svelte-check-matcher.json"
- 'frontend/package.json' - "frontend/package.json"
- 'frontend/package-lock.json' - "frontend/package-lock.json"
- 'frontend/tsconfig.json' - "frontend/tsconfig.json"
- 'frontend/svelte.config.js' - "frontend/svelte.config.js"
pull_request: pull_request:
branches: [main] branches: [main]
paths: paths:
- 'frontend/src/**' - "frontend/src/**"
- '.github/svelte-check-matcher.json' - ".github/svelte-check-matcher.json"
- 'frontend/package.json' - "frontend/package.json"
- 'frontend/package-lock.json' - "frontend/package-lock.json"
- 'frontend/tsconfig.json' - "frontend/tsconfig.json"
- 'frontend/svelte.config.js' - "frontend/svelte.config.js"
workflow_dispatch: workflow_dispatch:
jobs: jobs:
@@ -34,17 +34,15 @@ jobs:
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@v4 uses: actions/checkout@v5
- name: Setup pnpm - name: Setup pnpm
uses: pnpm/action-setup@v4 uses: pnpm/action-setup@v4
- name: Setup Node.js - name: Setup Node.js
uses: actions/setup-node@v4 uses: actions/setup-node@v5
with: with:
node-version: 22 node-version: 22
cache: 'pnpm'
cache-dependency-path: pnpm-lock.yaml
- name: Install dependencies - name: Install dependencies
run: pnpm --filter pocket-id-frontend install --frozen-lockfile run: pnpm --filter pocket-id-frontend install --frozen-lockfile

View File

@@ -16,8 +16,8 @@ jobs:
actions: write actions: write
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v5
- uses: actions/setup-go@v5 - uses: actions/setup-go@v6
with: with:
go-version-file: "backend/go.mod" go-version-file: "backend/go.mod"
cache-dependency-path: "backend/go.sum" cache-dependency-path: "backend/go.sum"

View File

@@ -15,7 +15,7 @@ jobs:
steps: steps:
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@v4 uses: actions/checkout@v5
- name: Fetch JSON data - name: Fetch JSON data
run: | run: |

View File

@@ -1 +1 @@
1.13.0 1.13.1

View File

@@ -1,3 +1,16 @@
## v1.13.1
### Bug Fixes
- uploading a client logo with an URL fails ([#1008](https://github.com/pocket-id/pocket-id/pull/1008) by @CzBiX)
- mark any callback url as valid if they contain a wildcard ([#1006](https://github.com/pocket-id/pocket-id/pull/1006) by @stonith404)
### Other
- cleanup root of repo, update workflow actions ([#1003](https://github.com/pocket-id/pocket-id/pull/1003) by @kmendell)
**Full Changelog**: https://github.com/pocket-id/pocket-id/compare/v1.13.0...v1.13.1
## v1.13.0 ## v1.13.0
### Bug Fixes ### Bug Fixes

View File

@@ -67,14 +67,12 @@ func ValidateClientID(clientID string) bool {
// ValidateCallbackURL validates callback URLs with support for wildcards // ValidateCallbackURL validates callback URLs with support for wildcards
func ValidateCallbackURL(raw string) bool { func ValidateCallbackURL(raw string) bool {
if raw == "*" { // Don't validate if it contains a wildcard
if strings.Contains(raw, "*") {
return true return true
} }
// Replace all '*' with 'x' to check if the rest is still a valid URI u, err := url.Parse(raw)
test := strings.ReplaceAll(raw, "*", "x")
u, err := url.Parse(test)
if err != nil { if err != nil {
return false return false
} }

View File

@@ -15,6 +15,7 @@ import (
"net/http" "net/http"
"net/url" "net/url"
"os" "os"
"path/filepath"
"regexp" "regexp"
"slices" "slices"
"strings" "strings"
@@ -1937,12 +1938,13 @@ func (s *OidcService) downloadAndSaveLogoFromURL(parentCtx context.Context, tx *
return &common.FileTypeNotSupportedError{} return &common.FileTypeNotSupportedError{}
} }
imagePath := common.EnvConfig.UploadPath + "/oidc-client-images/" + clientID + "." + ext folderPath := filepath.Join(common.EnvConfig.UploadPath, "oidc-client-images")
err = os.MkdirAll(imagePath, os.ModePerm) err = os.MkdirAll(folderPath, os.ModePerm)
if err != nil { if err != nil {
return err return err
} }
imagePath := filepath.Join(folderPath, clientID+"."+ext)
err = utils.SaveFileStream(io.LimitReader(resp.Body, maxLogoSize+1), imagePath) err = utils.SaveFileStream(io.LimitReader(resp.Body, maxLogoSize+1), imagePath)
if err != nil { if err != nil {
return err return err

View File

@@ -1,6 +1,6 @@
{ {
"name": "pocket-id-frontend", "name": "pocket-id-frontend",
"version": "1.13.0", "version": "1.13.1",
"private": true, "private": true,
"type": "module", "type": "module",
"scripts": { "scripts": {

View File

@@ -14,9 +14,11 @@ export const callbackUrlSchema = z
.nonempty() .nonempty()
.refine( .refine(
(val) => { (val) => {
if (val === '*') return true; if (val.includes('*')) {
return true;
}
try { try {
new URL(val.replace(/\*/g, 'x')); new URL(val);
return true; return true;
} catch { } catch {
return false; return false;

View File

@@ -1 +1 @@
docker buildx build --push --tag ghcr.io/pocket-id/pocket-id:development --platform linux/amd64,linux/arm64 . docker buildx build --push --file docker/Dockerfile --tag ghcr.io/pocket-id/pocket-id:development --platform linux/amd64,linux/arm64 .