130 lines
3.3 KiB
JavaScript
130 lines
3.3 KiB
JavaScript
// ENVIRONMENT
|
|
require('dotenv').config();
|
|
|
|
// DATABASE
|
|
const { PrismaClient : CMSClient } = require("../../prisma/clients/cms");
|
|
|
|
const prisma = new CMSClient();
|
|
|
|
// CONSTANTS
|
|
const { badRequestResponse }= require("../res/responses.js");
|
|
const { successResponse } = require("../res/responses.js");
|
|
|
|
const { localTime } = require("../services/time.services.js");
|
|
|
|
|
|
// CONTROLLER
|
|
exports.test = async (req, res) => {
|
|
try {
|
|
return successResponse(res, "API Connected!", null);
|
|
} catch (err) {
|
|
return badRequestResponse(res, "Error connecting to API", err);
|
|
}
|
|
}
|
|
|
|
exports.testSecure = async (req, res) => {
|
|
try {
|
|
const apiKey = req.headers['x-api-key'];
|
|
|
|
if (!apiKey) {
|
|
return badRequestResponse(res, "API key is required", "Missing api-key header");
|
|
}
|
|
|
|
const validCredential = await prisma.appCredential.findUniqueOrThrow({
|
|
where: {
|
|
TokenCredential_AC: apiKey
|
|
}
|
|
});
|
|
|
|
return successResponse(res, "Secure API Connected!", {
|
|
message: "Authentication successful",
|
|
credentialId: validCredential.UUID_AC
|
|
});
|
|
|
|
} catch (err) {
|
|
return badRequestResponse(res, "Invalid API key", "Unauthorized access");
|
|
}
|
|
}
|
|
|
|
exports.testToken = async (req, res) => {
|
|
try {
|
|
const user = req.locals.user;
|
|
|
|
return successResponse(res, "Token API Connected!", {
|
|
userID: user
|
|
});
|
|
|
|
} catch (err) {
|
|
return badRequestResponse(res, "Error validating token", err);
|
|
}
|
|
}
|
|
|
|
exports.createToken = async (req, res) => {
|
|
try {
|
|
const apiKey = req.headers['target-x-api-key'];
|
|
|
|
const token = apiKey || require('crypto').randomBytes(32).toString('hex');
|
|
|
|
const newCredential = await prisma.appCredential.create({
|
|
data: {
|
|
TokenCredential_AC: token,
|
|
CreatedAt_AC: localTime(new Date())
|
|
}
|
|
});
|
|
|
|
return successResponse(res, "API key created successfully!", {
|
|
apiKey: newCredential.TokenCredential_AC,
|
|
credentialId: newCredential.UUID_AC,
|
|
createdAt: newCredential.CreatedAt_AC
|
|
});
|
|
|
|
} catch (err) {
|
|
return badRequestResponse(res, "API key already exists", "Duplicate token");
|
|
}
|
|
}
|
|
|
|
exports.deleteToken = async (req, res) => {
|
|
try {
|
|
const apiKey = req.headers['target-x-api-key'];
|
|
|
|
if (!apiKey) {
|
|
return badRequestResponse(res, "API key is required", "Missing x-api-key header");
|
|
}
|
|
|
|
const deletedCredential = await prisma.appCredential.delete({
|
|
where: {
|
|
TokenCredential_AC: apiKey
|
|
}
|
|
});
|
|
|
|
return successResponse(res, "API key deleted successfully!", {
|
|
apiKey: deletedCredential.TokenCredential_AC,
|
|
credentialId: deletedCredential.UUID_AC,
|
|
deletedAt: new Date().toISOString()
|
|
});
|
|
|
|
} catch (err) {
|
|
if (err.code === 'P2025') {
|
|
return badRequestResponse(res, "API key not found", "No matching token to delete");
|
|
}
|
|
return badRequestResponse(res, "Error deleting API key", err);
|
|
}
|
|
}
|
|
|
|
exports.getAllTokens = async (req, res) => {
|
|
try {
|
|
const tokens = await prisma.appCredential.findMany({
|
|
orderBy: {
|
|
CreatedAt_AC: 'desc'
|
|
}
|
|
});
|
|
|
|
return successResponse(res, "API tokens retrieved successfully!", {
|
|
total: tokens.length,
|
|
tokens: tokens
|
|
});
|
|
|
|
} catch (err) {
|
|
return badRequestResponse(res, "Error retrieving API tokens", err);
|
|
}
|
|
} |