mirror of
https://github.com/louislam/uptime-kuma.git
synced 2026-08-07 11:15:00 +00:00
131 lines
3.5 KiB
JavaScript
131 lines
3.5 KiB
JavaScript
const { log } = require("../../src/util");
|
|
const { R } = require("redbean-node");
|
|
const dayjs = require("dayjs");
|
|
const apicache = require("../modules/apicache");
|
|
const { auth, createHeaders, checkLogin } = require("../better-auth");
|
|
|
|
/**
|
|
* Handlers for API keys
|
|
* @param {Socket} socket Socket.io instance
|
|
* @returns {void}
|
|
*/
|
|
module.exports.apiKeySocketHandler = (socket) => {
|
|
// Add a new better-auth api key
|
|
socket.on("addAPIKey", async (key, callback) => {
|
|
try {
|
|
checkLogin(socket);
|
|
|
|
let expiresIn;
|
|
|
|
if (key.expires) {
|
|
expiresIn = dayjs(key.expires).diff(dayjs(), "second");
|
|
if (expiresIn <= 0) {
|
|
expiresIn = undefined;
|
|
}
|
|
}
|
|
|
|
const result = await auth().api.createApiKey({
|
|
body: {
|
|
name: key.name,
|
|
expiresIn,
|
|
userId: socket.userID,
|
|
},
|
|
headers: socket.headers,
|
|
});
|
|
|
|
log.debug("apikeys", "Added API Key");
|
|
log.debug("apikeys", key);
|
|
|
|
callback({
|
|
ok: true,
|
|
msg: "successAdded",
|
|
msgi18n: true,
|
|
key: result.key,
|
|
keyID: result.id,
|
|
});
|
|
} catch (e) {
|
|
callback({
|
|
ok: false,
|
|
msg: e.message,
|
|
});
|
|
}
|
|
});
|
|
|
|
socket.on("getAPIKeyList", async (callback) => {
|
|
try {
|
|
checkLogin(socket);
|
|
|
|
const baKeys = await auth().api.listApiKeys({
|
|
query: {},
|
|
headers: socket.headers,
|
|
});
|
|
|
|
const legacyBeans = await R.find("api_key");
|
|
const legacyAPIKeyList = legacyBeans.map((bean) => bean.toPublicJSON());
|
|
|
|
callback({
|
|
ok: true,
|
|
apiKeyList: baKeys.apiKeys,
|
|
legacyAPIKeyList: legacyAPIKeyList,
|
|
});
|
|
} catch (e) {
|
|
log.error("apikeys", e);
|
|
callback({
|
|
ok: false,
|
|
msg: e.message,
|
|
});
|
|
}
|
|
});
|
|
|
|
socket.on("deleteAPIKey", async (keyID, callback) => {
|
|
try {
|
|
checkLogin(socket);
|
|
|
|
await auth().api.deleteApiKey({
|
|
body: {
|
|
keyId: keyID,
|
|
},
|
|
headers: createHeaders(socket.request.headers.cookie),
|
|
});
|
|
|
|
callback({
|
|
ok: true,
|
|
msg: "successDeleted",
|
|
msgi18n: true,
|
|
});
|
|
} catch (e) {
|
|
callback({
|
|
ok: false,
|
|
msg: e.message,
|
|
});
|
|
}
|
|
});
|
|
|
|
socket.on("deleteLegacyAPIKey", async (keyID, callback) => {
|
|
try {
|
|
checkLogin(socket);
|
|
|
|
log.debug("apikeys", `Deleted Legacy API Key: ${keyID} User ID: ${socket.userID}`);
|
|
|
|
await R.exec("DELETE FROM api_key WHERE id = ? AND user_id = ? ", [keyID, socket.userID]);
|
|
|
|
apicache.clear();
|
|
|
|
const legacyBeans = await R.find("api_key");
|
|
const legacyKeys = legacyBeans.map((bean) => bean.toPublicJSON());
|
|
|
|
callback({
|
|
ok: true,
|
|
msg: "successDeleted",
|
|
msgi18n: true,
|
|
legacyKeys: legacyKeys,
|
|
});
|
|
} catch (e) {
|
|
callback({
|
|
ok: false,
|
|
msg: e.message,
|
|
});
|
|
}
|
|
});
|
|
};
|