85 lines
2.9 KiB
JavaScript
85 lines
2.9 KiB
JavaScript
"use strict";
|
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const express_1 = require("express");
|
|
const index_1 = require("../index");
|
|
const auth_1 = require("../middleware/auth");
|
|
const crypto_1 = __importDefault(require("crypto"));
|
|
const router = (0, express_1.Router)();
|
|
router.use(auth_1.authenticate);
|
|
router.get('/me/api-keys', async (req, res) => {
|
|
try {
|
|
if (!req.user?.isApiEnabled) {
|
|
return res.status(403).json({ error: 'API access is not enabled for your account' });
|
|
}
|
|
const apiKeys = await index_1.prisma.apiKey.findMany({
|
|
where: { userId: req.user.id },
|
|
select: {
|
|
id: true,
|
|
name: true,
|
|
expiresAt: true,
|
|
lastUsed: true,
|
|
createdAt: true
|
|
}
|
|
});
|
|
res.json(apiKeys);
|
|
}
|
|
catch (error) {
|
|
console.error('Get API keys error:', error);
|
|
res.status(500).json({ error: 'Failed to get API keys' });
|
|
}
|
|
});
|
|
router.post('/me/api-keys', async (req, res) => {
|
|
try {
|
|
if (!req.user?.isApiEnabled) {
|
|
return res.status(403).json({ error: 'API access is not enabled for your account' });
|
|
}
|
|
const { name, expiresInDays } = req.body;
|
|
if (!name) {
|
|
return res.status(400).json({ error: 'Key name is required' });
|
|
}
|
|
const key = crypto_1.default.randomBytes(32).toString('hex');
|
|
const keyHash = crypto_1.default.createHash('sha256').update(key).digest('hex');
|
|
const expiresAt = expiresInDays
|
|
? new Date(Date.now() + expiresInDays * 24 * 60 * 60 * 1000)
|
|
: null;
|
|
const apiKey = await index_1.prisma.apiKey.create({
|
|
data: {
|
|
key: keyHash,
|
|
name,
|
|
userId: req.user.id,
|
|
expiresAt
|
|
}
|
|
});
|
|
res.json({
|
|
id: apiKey.id,
|
|
name: apiKey.name,
|
|
key,
|
|
expiresAt: apiKey.expiresAt,
|
|
createdAt: apiKey.createdAt
|
|
});
|
|
}
|
|
catch (error) {
|
|
console.error('Create API key error:', error);
|
|
res.status(500).json({ error: 'Failed to create API key' });
|
|
}
|
|
});
|
|
router.delete('/me/api-keys/:id', async (req, res) => {
|
|
try {
|
|
if (!req.user?.isApiEnabled) {
|
|
return res.status(403).json({ error: 'API access is not enabled for your account' });
|
|
}
|
|
const { id } = req.params;
|
|
await index_1.prisma.apiKey.delete({
|
|
where: { id, userId: req.user.id }
|
|
});
|
|
res.json({ message: 'API key revoked' });
|
|
}
|
|
catch (error) {
|
|
console.error('Delete API key error:', error);
|
|
res.status(500).json({ error: 'Failed to delete API key' });
|
|
}
|
|
});
|
|
exports.default = router;
|