mirror of
https://github.com/labring/FastGPT.git
synced 2025-07-28 09:03:53 +00:00
feat: specify the api's auth type (#2715)
This commit is contained in:
File diff suppressed because one or more lines are too long
@@ -4,7 +4,7 @@ import * as path from 'path';
|
|||||||
import { convertOpenApi } from './openapi';
|
import { convertOpenApi } from './openapi';
|
||||||
|
|
||||||
const rootPath = 'projects/app/src/pages/api';
|
const rootPath = 'projects/app/src/pages/api';
|
||||||
const exclude = ['/admin', '/proApi'];
|
const exclude = ['/admin', '/proApi', 'test.ts'];
|
||||||
|
|
||||||
function getAllFiles(dir: string) {
|
function getAllFiles(dir: string) {
|
||||||
let files: string[] = [];
|
let files: string[] = [];
|
||||||
@@ -39,6 +39,22 @@ const openapi = convertOpenApi({
|
|||||||
version: '1.0.0',
|
version: '1.0.0',
|
||||||
author: 'FastGPT'
|
author: 'FastGPT'
|
||||||
},
|
},
|
||||||
|
components: {
|
||||||
|
securitySchemes: {
|
||||||
|
apiKey: {
|
||||||
|
type: 'apiKey',
|
||||||
|
name: 'Authorization',
|
||||||
|
in: 'header',
|
||||||
|
scheme: 'bearer'
|
||||||
|
},
|
||||||
|
token: {
|
||||||
|
type: 'apiKey',
|
||||||
|
in: 'token',
|
||||||
|
name: 'token',
|
||||||
|
scheme: 'basic'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
servers: [
|
servers: [
|
||||||
{
|
{
|
||||||
url: 'http://localhost:4000'
|
url: 'http://localhost:4000'
|
||||||
|
@@ -29,10 +29,16 @@ type OpenAPIResponse = {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
type OpenAPISecurity = {
|
||||||
|
apiKey?: string[];
|
||||||
|
token?: string[];
|
||||||
|
};
|
||||||
|
|
||||||
type PathType = {
|
type PathType = {
|
||||||
[method: string]: {
|
[method: string]: {
|
||||||
description: string;
|
description: string;
|
||||||
parameters: OpenAPIParameter[];
|
parameters: OpenAPIParameter[];
|
||||||
|
security?: OpenAPISecurity[];
|
||||||
responses: OpenAPIResponse;
|
responses: OpenAPIResponse;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@@ -52,6 +58,22 @@ type OpenApiType = {
|
|||||||
servers?: {
|
servers?: {
|
||||||
url: string;
|
url: string;
|
||||||
}[];
|
}[];
|
||||||
|
components: {
|
||||||
|
securitySchemes: {
|
||||||
|
apiKey: {
|
||||||
|
type: 'apiKey';
|
||||||
|
name: 'Authorization';
|
||||||
|
in: 'header';
|
||||||
|
scheme: 'bearer';
|
||||||
|
};
|
||||||
|
token: {
|
||||||
|
type: 'apiKey';
|
||||||
|
in: 'token';
|
||||||
|
name: 'token';
|
||||||
|
scheme: 'basic';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
export function convertPath(api: ApiType): PathType {
|
export function convertPath(api: ApiType): PathType {
|
||||||
@@ -97,6 +119,17 @@ export function convertPath(api: ApiType): PathType {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const security: OpenAPISecurity[] = [];
|
||||||
|
if (api.authorization === 'apikey') {
|
||||||
|
security.push({
|
||||||
|
apiKey: []
|
||||||
|
});
|
||||||
|
} else if (api.authorization === 'token') {
|
||||||
|
security.push({
|
||||||
|
token: []
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
const responses: OpenAPIResponse = (() => {
|
const responses: OpenAPIResponse = (() => {
|
||||||
if (api.response) {
|
if (api.response) {
|
||||||
if (Array.isArray(api.response)) {
|
if (Array.isArray(api.response)) {
|
||||||
@@ -159,6 +192,7 @@ export function convertPath(api: ApiType): PathType {
|
|||||||
return {
|
return {
|
||||||
[method]: {
|
[method]: {
|
||||||
description: api.description ?? '',
|
description: api.description ?? '',
|
||||||
|
security,
|
||||||
parameters,
|
parameters,
|
||||||
responses
|
responses
|
||||||
}
|
}
|
||||||
|
1
scripts/openapi/type.d.ts
vendored
1
scripts/openapi/type.d.ts
vendored
@@ -6,6 +6,7 @@ export type ApiMetaData = {
|
|||||||
|
|
||||||
export type ApiType = {
|
export type ApiType = {
|
||||||
description?: string;
|
description?: string;
|
||||||
|
authorization?: 'apikey' | 'token';
|
||||||
path: string;
|
path: string;
|
||||||
url: string;
|
url: string;
|
||||||
query?: itemType | itemType[];
|
query?: itemType | itemType[];
|
||||||
|
@@ -213,7 +213,10 @@ function getMethod(api: ApiType): 'GET' | 'POST' {
|
|||||||
|
|
||||||
export function parseAPI({ path, rootPath }: { path: string; rootPath: string }): ApiType {
|
export function parseAPI({ path, rootPath }: { path: string; rootPath: string }): ApiType {
|
||||||
const code = fs.readFileSync(path, 'utf-8');
|
const code = fs.readFileSync(path, 'utf-8');
|
||||||
|
const authApiKey = code.includes('authApiKey: true');
|
||||||
|
const authToken = code.includes('authToken: true');
|
||||||
const api = parseCode(code);
|
const api = parseCode(code);
|
||||||
|
api.authorization = authApiKey ? 'apikey' : authToken ? 'token' : undefined;
|
||||||
api.url = path.replace('.ts', '').replace(rootPath, '');
|
api.url = path.replace('.ts', '').replace(rootPath, '');
|
||||||
api.path = path;
|
api.path = path;
|
||||||
if (api.method === undefined) {
|
if (api.method === undefined) {
|
||||||
|
Reference in New Issue
Block a user