@opengis/fastify-table
Version:
core-plugins
42 lines (41 loc) • 1.59 kB
JavaScript
import { createHash, randomUUID } from "crypto";
import config from "../../../../config.js";
import getRedis from "../../redis/funcs/getRedis.js";
const rclient = getRedis({ db: 0 });
// import { config, getRedis } from '../../../../utils.js';
const generateCodes = (ids, userToken) => {
const token = userToken || randomUUID();
const notNullIds = ids.filter((el) => el);
const obj = {};
const codes = notNullIds.reduce((acc, id) => {
const newToken = createHash("sha1")
.update(token + id)
.digest("base64url")
.replace(/-/g, "");
acc[newToken] = id;
obj[id] = newToken;
return acc;
}, {});
return { codes, obj };
};
function setToken({ ids: idsOrigin, uid, array, }) {
if (!config.redis) {
return array ? [] : {};
}
if (!uid) {
return array ? [{ user: "empty" }] : { user: "empty" };
}
if (!Object.keys(idsOrigin).length) {
return array ? [{ ids: "empty" }] : { ids: "empty" };
}
const ids = idsOrigin.map((el) => typeof el === "object" ? JSON.stringify(el) : el);
// TODO generate salt
const { codes, obj } = generateCodes(ids, uid);
if (!Object.keys(codes).length)
return { ids: "empty" };
rclient.hmset(`${config.pg.database}:token:edit:${uid}`, Object.entries(codes).flat());
// console.log(`${config.pg.database}:token:edit:${uid}`, idsOrigin, Object.values(obj));
// TODO дополнительно писать в hset token -> uid
return array ? Object.values(obj) : obj;
}
export default setToken;