mirror of
https://github.com/n8n-io/n8n.git
synced 2025-02-21 02:56:40 -08:00
57 lines
1.6 KiB
TypeScript
57 lines
1.6 KiB
TypeScript
import { type RequestHandler } from 'express';
|
|
|
|
import { Delete, Get, Post, RestController } from '@/decorators';
|
|
import { EventService } from '@/events/event.service';
|
|
import { isApiEnabled } from '@/public-api';
|
|
import { ApiKeysRequest, AuthenticatedRequest } from '@/requests';
|
|
import { PublicApiKeyService } from '@/services/public-api-key.service';
|
|
|
|
export const isApiEnabledMiddleware: RequestHandler = (_, res, next) => {
|
|
if (isApiEnabled()) {
|
|
next();
|
|
} else {
|
|
res.status(404).end();
|
|
}
|
|
};
|
|
|
|
@RestController('/api-keys')
|
|
export class ApiKeysController {
|
|
constructor(
|
|
private readonly eventService: EventService,
|
|
private readonly publicApiKeyService: PublicApiKeyService,
|
|
) {}
|
|
|
|
/**
|
|
* Create an API Key
|
|
*/
|
|
@Post('/', { middlewares: [isApiEnabledMiddleware] })
|
|
async createAPIKey(req: AuthenticatedRequest) {
|
|
const newApiKey = await this.publicApiKeyService.createPublicApiKeyForUser(req.user);
|
|
|
|
this.eventService.emit('public-api-key-created', { user: req.user, publicApi: false });
|
|
|
|
return newApiKey;
|
|
}
|
|
|
|
/**
|
|
* Get API keys
|
|
*/
|
|
@Get('/', { middlewares: [isApiEnabledMiddleware] })
|
|
async getAPIKeys(req: AuthenticatedRequest) {
|
|
const apiKeys = await this.publicApiKeyService.getRedactedApiKeysForUser(req.user);
|
|
return apiKeys;
|
|
}
|
|
|
|
/**
|
|
* Delete an API Key
|
|
*/
|
|
@Delete('/:id', { middlewares: [isApiEnabledMiddleware] })
|
|
async deleteAPIKey(req: ApiKeysRequest.DeleteAPIKey) {
|
|
await this.publicApiKeyService.deleteApiKeyForUser(req.user, req.params.id);
|
|
|
|
this.eventService.emit('public-api-key-deleted', { user: req.user, publicApi: false });
|
|
|
|
return { success: true };
|
|
}
|
|
}
|