From 5f60fe491abe989a3d0b093167b92a8bd915f4f7 Mon Sep 17 00:00:00 2001 From: Gao Sun Date: Tue, 12 Oct 2021 17:27:11 +0800 Subject: [PATCH] fix(core): snakecase OIDC client metadata keys (#127) --- packages/core/package.json | 1 + packages/core/src/oidc/adapter.ts | 10 +++++++--- pnpm-lock.yaml | 28 +++++++++++++++++++++++----- 3 files changed, 31 insertions(+), 8 deletions(-) diff --git a/packages/core/package.json b/packages/core/package.json index d66732f42..8824ccbee 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -40,6 +40,7 @@ "p-retry": "^4.6.1", "slonik": "^23.8.3", "slonik-interceptor-preset": "^1.2.10", + "snakecase-keys": "^5.1.0", "zod": "^3.8.1" }, "devDependencies": { diff --git a/packages/core/src/oidc/adapter.ts b/packages/core/src/oidc/adapter.ts index a26d9c829..209aaa9f2 100644 --- a/packages/core/src/oidc/adapter.ts +++ b/packages/core/src/oidc/adapter.ts @@ -1,6 +1,7 @@ import { ApplicationDBEntry } from '@logto/schemas'; import dayjs from 'dayjs'; import { AdapterFactory, AllClientMetadata } from 'oidc-provider'; +import snakecaseKeys from 'snakecase-keys'; import { findApplicationById } from '@/queries/application'; import { @@ -15,16 +16,19 @@ import { export default function postgresAdapter(modelName: string): ReturnType { if (modelName === 'Client') { const reject = async () => Promise.reject(new Error('Not implemented')); - const tranpileClient = ({ id, oidcClientMetadata }: ApplicationDBEntry): AllClientMetadata => ({ + const transpileClient = ({ + id, + oidcClientMetadata, + }: ApplicationDBEntry): AllClientMetadata => ({ client_id: id, grant_types: ['authorization_code', 'refresh_token'], token_endpoint_auth_method: 'none', - ...oidcClientMetadata, + ...snakecaseKeys(oidcClientMetadata), }); return { upsert: reject, - find: async (id) => tranpileClient(await findApplicationById(id)), + find: async (id) => transpileClient(await findApplicationById(id)), findByUserCode: reject, findByUid: reject, consume: reject, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 97f85ced5..d189782df 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -61,6 +61,7 @@ importers: prettier: ^2.3.2 slonik: ^23.8.3 slonik-interceptor-preset: ^1.2.10 + snakecase-keys: ^5.1.0 ts-jest: ^27.0.5 tsc-watch: ^4.4.0 typescript: ^4.3.5 @@ -90,6 +91,7 @@ importers: p-retry: 4.6.1 slonik: 23.8.5 slonik-interceptor-preset: 1.2.10 + snakecase-keys: 5.1.0 zod: 3.8.1 devDependencies: '@silverhand/eslint-config': 0.2.2_aff669e8eb0d21fc4e2068e6112ef4d0 @@ -6654,7 +6656,6 @@ packages: dependencies: no-case: 3.0.4 tslib: 2.3.0 - dev: true /dot-prop/5.3.0: resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} @@ -11074,7 +11075,6 @@ packages: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} dependencies: tslib: 2.3.0 - dev: true /lowercase-keys/1.0.1: resolution: {integrity: sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==} @@ -11189,7 +11189,6 @@ packages: /map-obj/4.2.1: resolution: {integrity: sha512-+WA2/1sPmDj1dlvvJmB5G6JKfY9dpn7EVBUL06+y6PoljPkh+6V1QihwxNkbcGxCRjt2b0F9K0taiCuo7MbdFQ==} engines: {node: '>=8'} - dev: true /map-stream/0.1.0: resolution: {integrity: sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=} @@ -11729,7 +11728,6 @@ packages: dependencies: lower-case: 2.0.2 tslib: 2.3.0 - dev: true /node-cleanup/2.1.2: resolution: {integrity: sha1-esGavSl+Caf3KnFUXZUbUX5N3iw=} @@ -14956,6 +14954,22 @@ packages: engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} dev: true + /snake-case/3.0.4: + resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} + dependencies: + dot-case: 3.0.4 + tslib: 2.3.0 + dev: false + + /snakecase-keys/5.1.0: + resolution: {integrity: sha512-RG6LPYD7nz2CHLY+8LqeBGftuNF0XGX1Q77t3d+vy+zZg0Jxr/y+9ji5Gss+8pyuUGymTEj6L/9fBvY6Jp5Thg==} + engines: {node: '>=12'} + dependencies: + map-obj: 4.2.1 + snake-case: 3.0.4 + type-fest: 2.5.0 + dev: false + /snapdragon-node/2.1.1: resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==} engines: {node: '>=0.10.0'} @@ -16104,7 +16118,6 @@ packages: /tslib/2.3.0: resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==} - dev: true /tsscmp/1.0.6: resolution: {integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==} @@ -16186,6 +16199,11 @@ packages: resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} engines: {node: '>=8'} + /type-fest/2.5.0: + resolution: {integrity: sha512-wB5vE+XXZ2g2mDRo18yZMae1joUhquomLTm+BkxeuRHnwmrNWzVPNrFah9z7pjsKNiVAaJL33+uQbgbPSARyqw==} + engines: {node: '>=12.20'} + dev: false + /type-is/1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'}