From bb0eca80a77c315c2abefc8f24c7468e93494d66 Mon Sep 17 00:00:00 2001 From: bastantoine Date: Fri, 18 Nov 2022 18:36:18 +0100 Subject: [PATCH] added base tool structure --- src/tools/index.ts | 2 ++ src/tools/jwt-parser/index.ts | 11 +++++++++++ src/tools/jwt-parser/jwt-parser.service.ts | 20 ++++++++++++++++++++ src/tools/jwt-parser/jwt-parser.vue | 9 +++++++++ 4 files changed, 42 insertions(+) create mode 100644 src/tools/jwt-parser/index.ts create mode 100644 src/tools/jwt-parser/jwt-parser.service.ts create mode 100644 src/tools/jwt-parser/jwt-parser.vue diff --git a/src/tools/index.ts b/src/tools/index.ts index bc5192a4..ca4e5f98 100644 --- a/src/tools/index.ts +++ b/src/tools/index.ts @@ -1,6 +1,7 @@ import { LockOpen } from '@vicons/tabler'; import type { ToolCategory } from './tool'; +import { tool as jwtParser } from './jwt-parser'; import { tool as mimeTypes } from './mime-types'; import { tool as otpCodeGeneratorAndValidator } from './otp-code-generator-and-validator'; import { tool as base64FileConverter } from './base64-file-converter'; @@ -67,6 +68,7 @@ export const toolsByCategory: ToolCategory[] = [ metaTagGenerator, otpCodeGeneratorAndValidator, mimeTypes, + jwtParser, ], }, { diff --git a/src/tools/jwt-parser/index.ts b/src/tools/jwt-parser/index.ts new file mode 100644 index 00000000..eb1c6e48 --- /dev/null +++ b/src/tools/jwt-parser/index.ts @@ -0,0 +1,11 @@ +import { ArrowsShuffle } from '@vicons/tabler'; +import { defineTool } from '../tool'; + +export const tool = defineTool({ + name: 'JWT parser', + path: '/jwt-parser', + description: '', + keywords: ['jwt', 'parser'], + component: () => import('./jwt-parser.vue'), + icon: ArrowsShuffle, +}); diff --git a/src/tools/jwt-parser/jwt-parser.service.ts b/src/tools/jwt-parser/jwt-parser.service.ts new file mode 100644 index 00000000..120a0990 --- /dev/null +++ b/src/tools/jwt-parser/jwt-parser.service.ts @@ -0,0 +1,20 @@ +import jwt_decode, { InvalidTokenError } from 'jwt-decode'; + +interface JWT { + header: Map; + payload: Map; +} + +export function safe_jwt_decode(raw_jwt: string): JWT { + try { + const header = jwt_decode(raw_jwt, { header: true }) as Map; + const payload = jwt_decode(raw_jwt) as Map; + return { header: header, payload: payload }; + } catch (e) { + if (e instanceof InvalidTokenError) { + return { header: new Map(), payload: new Map() }; + } else { + throw e; + } + } +} diff --git a/src/tools/jwt-parser/jwt-parser.vue b/src/tools/jwt-parser/jwt-parser.vue new file mode 100644 index 00000000..d54c2389 --- /dev/null +++ b/src/tools/jwt-parser/jwt-parser.vue @@ -0,0 +1,9 @@ + + + + +