mirror of
https://github.com/mountain-loop/yaak.git
synced 2026-03-26 03:11:28 +01:00
Merge main into proxy branch (formatting and docs)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,14 +1,14 @@
|
||||
{
|
||||
"name": "@yaak/auth-jwt",
|
||||
"displayName": "JSON Web Tokens",
|
||||
"version": "0.1.0",
|
||||
"private": true,
|
||||
"description": "Authenticate requests using JSON web tokens (JWT)",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/mountain-loop/yaak.git",
|
||||
"directory": "plugins/auth-jwt"
|
||||
},
|
||||
"private": true,
|
||||
"version": "0.1.0",
|
||||
"scripts": {
|
||||
"build": "yaakcli build",
|
||||
"dev": "yaakcli dev"
|
||||
|
||||
@@ -1,104 +1,104 @@
|
||||
import type { PluginDefinition } from '@yaakapp/api';
|
||||
import jwt from 'jsonwebtoken';
|
||||
import type { PluginDefinition } from "@yaakapp/api";
|
||||
import jwt from "jsonwebtoken";
|
||||
|
||||
const algorithms = [
|
||||
'HS256',
|
||||
'HS384',
|
||||
'HS512',
|
||||
'RS256',
|
||||
'RS384',
|
||||
'RS512',
|
||||
'PS256',
|
||||
'PS384',
|
||||
'PS512',
|
||||
'ES256',
|
||||
'ES384',
|
||||
'ES512',
|
||||
'none',
|
||||
"HS256",
|
||||
"HS384",
|
||||
"HS512",
|
||||
"RS256",
|
||||
"RS384",
|
||||
"RS512",
|
||||
"PS256",
|
||||
"PS384",
|
||||
"PS512",
|
||||
"ES256",
|
||||
"ES384",
|
||||
"ES512",
|
||||
"none",
|
||||
] as const;
|
||||
|
||||
const defaultAlgorithm = algorithms[0];
|
||||
|
||||
export const plugin: PluginDefinition = {
|
||||
authentication: {
|
||||
name: 'jwt',
|
||||
label: 'JWT Bearer',
|
||||
shortLabel: 'JWT',
|
||||
name: "jwt",
|
||||
label: "JWT Bearer",
|
||||
shortLabel: "JWT",
|
||||
args: [
|
||||
{
|
||||
type: 'select',
|
||||
name: 'algorithm',
|
||||
label: 'Algorithm',
|
||||
type: "select",
|
||||
name: "algorithm",
|
||||
label: "Algorithm",
|
||||
hideLabel: true,
|
||||
defaultValue: defaultAlgorithm,
|
||||
options: algorithms.map((value) => ({ label: value === 'none' ? 'None' : value, value })),
|
||||
options: algorithms.map((value) => ({ label: value === "none" ? "None" : value, value })),
|
||||
},
|
||||
{
|
||||
type: 'text',
|
||||
name: 'secret',
|
||||
label: 'Secret or Private Key',
|
||||
type: "text",
|
||||
name: "secret",
|
||||
label: "Secret or Private Key",
|
||||
password: true,
|
||||
optional: true,
|
||||
multiLine: true,
|
||||
},
|
||||
{
|
||||
type: 'checkbox',
|
||||
name: 'secretBase64',
|
||||
label: 'Secret is base64 encoded',
|
||||
type: "checkbox",
|
||||
name: "secretBase64",
|
||||
label: "Secret is base64 encoded",
|
||||
},
|
||||
{
|
||||
type: 'editor',
|
||||
name: 'payload',
|
||||
label: 'JWT Payload',
|
||||
language: 'json',
|
||||
type: "editor",
|
||||
name: "payload",
|
||||
label: "JWT Payload",
|
||||
language: "json",
|
||||
defaultValue: '{\n "foo": "bar"\n}',
|
||||
placeholder: '{ }',
|
||||
placeholder: "{ }",
|
||||
},
|
||||
{
|
||||
type: 'accordion',
|
||||
label: 'Advanced',
|
||||
type: "accordion",
|
||||
label: "Advanced",
|
||||
inputs: [
|
||||
{
|
||||
type: 'editor',
|
||||
name: 'headers',
|
||||
label: 'JWT Header',
|
||||
description: 'Merged with auto-generated header fields like alg (e.g., kid)',
|
||||
language: 'json',
|
||||
defaultValue: '{}',
|
||||
placeholder: '{ }',
|
||||
type: "editor",
|
||||
name: "headers",
|
||||
label: "JWT Header",
|
||||
description: "Merged with auto-generated header fields like alg (e.g., kid)",
|
||||
language: "json",
|
||||
defaultValue: "{}",
|
||||
placeholder: "{ }",
|
||||
optional: true,
|
||||
},
|
||||
{
|
||||
type: 'select',
|
||||
name: 'location',
|
||||
label: 'Behavior',
|
||||
defaultValue: 'header',
|
||||
type: "select",
|
||||
name: "location",
|
||||
label: "Behavior",
|
||||
defaultValue: "header",
|
||||
options: [
|
||||
{ label: 'Insert Header', value: 'header' },
|
||||
{ label: 'Append Query Parameter', value: 'query' },
|
||||
{ label: "Insert Header", value: "header" },
|
||||
{ label: "Append Query Parameter", value: "query" },
|
||||
],
|
||||
},
|
||||
{
|
||||
type: 'h_stack',
|
||||
type: "h_stack",
|
||||
inputs: [
|
||||
{
|
||||
type: 'text',
|
||||
name: 'name',
|
||||
label: 'Header Name',
|
||||
defaultValue: 'Authorization',
|
||||
type: "text",
|
||||
name: "name",
|
||||
label: "Header Name",
|
||||
defaultValue: "Authorization",
|
||||
optional: true,
|
||||
description: 'The name of the header to add to the request',
|
||||
description: "The name of the header to add to the request",
|
||||
},
|
||||
{
|
||||
type: 'text',
|
||||
name: 'headerPrefix',
|
||||
label: 'Header Prefix',
|
||||
type: "text",
|
||||
name: "headerPrefix",
|
||||
label: "Header Prefix",
|
||||
optional: true,
|
||||
defaultValue: 'Bearer',
|
||||
defaultValue: "Bearer",
|
||||
},
|
||||
],
|
||||
dynamic(_ctx, args) {
|
||||
if (args.values.location === 'query') {
|
||||
if (args.values.location === "query") {
|
||||
return {
|
||||
hidden: true,
|
||||
};
|
||||
@@ -106,14 +106,14 @@ export const plugin: PluginDefinition = {
|
||||
},
|
||||
},
|
||||
{
|
||||
type: 'text',
|
||||
name: 'name',
|
||||
label: 'Parameter Name',
|
||||
description: 'The name of the query parameter to add to the request',
|
||||
defaultValue: 'token',
|
||||
type: "text",
|
||||
name: "name",
|
||||
label: "Parameter Name",
|
||||
description: "The name of the query parameter to add to the request",
|
||||
defaultValue: "token",
|
||||
optional: true,
|
||||
dynamic(_ctx, args) {
|
||||
if (args.values.location !== 'query') {
|
||||
if (args.values.location !== "query") {
|
||||
return {
|
||||
hidden: true,
|
||||
};
|
||||
@@ -125,7 +125,7 @@ export const plugin: PluginDefinition = {
|
||||
],
|
||||
async onApply(_ctx, { values }) {
|
||||
const { algorithm, secret: _secret, secretBase64, payload, headers } = values;
|
||||
const secret = secretBase64 ? Buffer.from(`${_secret}`, 'base64') : `${_secret}`;
|
||||
const secret = secretBase64 ? Buffer.from(`${_secret}`, "base64") : `${_secret}`;
|
||||
|
||||
const parsedHeaders = headers ? JSON.parse(`${headers}`) : undefined;
|
||||
|
||||
@@ -135,12 +135,12 @@ export const plugin: PluginDefinition = {
|
||||
header: parsedHeaders as jwt.JwtHeader | undefined,
|
||||
});
|
||||
|
||||
if (values.location === 'query') {
|
||||
const paramName = String(values.name || 'token');
|
||||
if (values.location === "query") {
|
||||
const paramName = String(values.name || "token");
|
||||
return { setQueryParameters: [{ name: paramName, value: token }] };
|
||||
}
|
||||
const headerPrefix = values.headerPrefix != null ? values.headerPrefix : 'Bearer';
|
||||
const headerName = String(values.name || 'Authorization');
|
||||
const headerPrefix = values.headerPrefix != null ? values.headerPrefix : "Bearer";
|
||||
const headerName = String(values.name || "Authorization");
|
||||
const headerValue = `${headerPrefix} ${token}`.trim();
|
||||
return { setHeaders: [{ name: headerName, value: headerValue }] };
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user