mirror of
https://github.com/docmost/docmost.git
synced 2026-05-08 07:13:06 +08:00
e209aaa272
* Work on mentions * fix: properly parse page slug * fix editor suggestion bugs * mentions must start with whitespace * add icon to page mention render * feat: backlinks - WIP * UI - WIP * permissions check * use FTS for page suggestion * cleanup * WIP * page title fallback * feat: handle internal link paste * link styling * WIP * Switch back to LIKE operator for search suggestion * WIP * scope to workspaceId * still create link for pages not found * select necessary columns * cleanups
56 lines
1.5 KiB
TypeScript
56 lines
1.5 KiB
TypeScript
import * as path from 'path';
|
|
import * as bcrypt from 'bcrypt';
|
|
|
|
export const envPath = path.resolve(process.cwd(), '..', '..', '.env');
|
|
|
|
export async function hashPassword(password: string) {
|
|
const saltRounds = 12;
|
|
return bcrypt.hash(password, saltRounds);
|
|
}
|
|
|
|
export async function comparePasswordHash(
|
|
plainPassword: string,
|
|
passwordHash: string,
|
|
): Promise<boolean> {
|
|
return bcrypt.compare(plainPassword, passwordHash);
|
|
}
|
|
|
|
export type RedisConfig = {
|
|
host: string;
|
|
port: number;
|
|
db: number;
|
|
password?: string;
|
|
};
|
|
|
|
export function parseRedisUrl(redisUrl: string): RedisConfig {
|
|
// format - redis[s]://[[username][:password]@][host][:port][/db-number]
|
|
const { hostname, port, password, pathname } = new URL(redisUrl);
|
|
const portInt = parseInt(port, 10);
|
|
|
|
let db: number = 0;
|
|
// extract db value if present
|
|
if (pathname.length > 1) {
|
|
const value = pathname.slice(1);
|
|
if (!isNaN(parseInt(value))) {
|
|
db = parseInt(value, 10);
|
|
}
|
|
}
|
|
|
|
return { host: hostname, port: portInt, password, db };
|
|
}
|
|
|
|
export function createRetryStrategy() {
|
|
return function (times: number): number {
|
|
return Math.max(Math.min(Math.exp(times), 20000), 3000);
|
|
};
|
|
}
|
|
|
|
export function extractDateFromUuid7(uuid7: string) {
|
|
//https://park.is/blog_posts/20240803_extracting_timestamp_from_uuid_v7/
|
|
const parts = uuid7.split('-');
|
|
const highBitsHex = parts[0] + parts[1].slice(0, 4);
|
|
const timestamp = parseInt(highBitsHex, 16);
|
|
|
|
return new Date(timestamp);
|
|
}
|