1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-09-05 17:53:12 +02:00

a very much PoC

This commit is contained in:
Ivar Conradi Østhus 2024-10-28 10:26:49 +01:00
parent b190970df2
commit a3fb81d88b
No known key found for this signature in database
GPG Key ID: 14F51E4841AF1DE1
13 changed files with 14905 additions and 17 deletions

1168
data.sql Normal file

File diff suppressed because it is too large Load Diff

View File

@ -110,6 +110,7 @@
]
},
"dependencies": {
"@electric-sql/pglite": "^0.2.12",
"@slack/web-api": "^7.3.4",
"@wesleytodd/openapi": "^1.1.0",
"ajv": "^8.12.0",
@ -143,6 +144,7 @@
"json-schema-to-ts": "2.12.0",
"json2csv": "^5.0.7",
"knex": "^3.1.0",
"knex-pglite": "^0.9.7",
"lodash.get": "^4.4.2",
"lodash.groupby": "^4.6.0",
"lodash.sortby": "^4.7.0",

3791
schema.sql Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,19 +1,21 @@
import { knex, type Knex } from 'knex';
import ClientPgLite from 'knex-pglite';
import type { IUnleashConfig } from '../types/option';
import type { PGlite } from '@electric-sql/pglite';
export function createDb({
db,
getLogger,
}: Pick<IUnleashConfig, 'db' | 'getLogger'>): Knex {
export function createDb(
{ db, getLogger }: Pick<IUnleashConfig, 'db' | 'getLogger'>,
pg?: PGlite,
): Knex {
const logger = getLogger('db-pool.js');
return knex({
client: 'pg',
version: db.version,
client: ClientPgLite,
dialect: 'postgres',
connection: {
...db,
application_name: db.applicationName,
//@ts-ignore
// pglite: pg || new PGlite(),
filename: '/tmp/unleash.db',
},
pool: db.pool,
searchPath: db.schema,
asyncStackTraces: true,
log: {

View File

@ -49,6 +49,7 @@ const rowToUser = (row) => {
if (!row) {
throw new NotFoundError('No user found');
}
console.log(row);
return new User({
id: row.id,
name: emptify(row.name),
@ -180,7 +181,7 @@ class UserStore implements IUserStore {
async getByQuery(idQuery: IUserLookup): Promise<User> {
const row = await this.buildSelectUser(idQuery).first(USER_COLUMNS);
return rowToUser(row);
return rowToUser(row.rows[0]);
}
async delete(id: number): Promise<void> {
@ -203,7 +204,9 @@ class UserStore implements IUserStore {
throw new NotFoundError('User not found');
}
return item.password_hash;
console.log(item);
return item.rows[0].password_hash;
}
async setPasswordHash(

View File

@ -89,12 +89,13 @@ export const scheduleServices = async (
'announceUnannounced',
);
/*
schedulerService.schedule(
projectService.statusJob.bind(projectService),
hoursToMilliseconds(24),
'statusJob',
);
*/
schedulerService.schedule(
projectHealthService.setHealthRating.bind(projectHealthService),
hoursToMilliseconds(1),

View File

@ -35,6 +35,7 @@ import { Db } from './db/db';
import { defaultLockKey, defaultTimeout, withDbLock } from './util/db-lock';
import { scheduleServices } from './features/scheduler/schedule-services';
import { compareAndLogPostgresVersion } from './util/postgres-version-checker';
import { createPg } from '../pglite';
async function createApp(
config: IUnleashConfig,
@ -43,7 +44,10 @@ async function createApp(
// Database dependencies (stateful)
const logger = config.getLogger('server-impl.js');
const serverVersion = config.enterpriseVersion ?? version;
const db = createDb(config);
const pg = await createPg();
const db = createDb(config, pg);
const stores = createStores(config, db);
await compareAndLogPostgresVersion(config, stores.settingStore);
const services = createServices(stores, config, db);

View File

@ -33,7 +33,6 @@ import {
ALL_PROJECTS,
CUSTOM_PROJECT_ROLE_TYPE,
CUSTOM_ROOT_ROLE_TYPE,
ROOT_ROLE_TYPES,
} from '../util/constants';
import { DEFAULT_PROJECT } from '../types/project';
import InvalidOperationError from '../error/invalid-operation-error';
@ -433,11 +432,12 @@ export class AccessService {
const newRootRole = await this.resolveRootRole(role);
if (newRootRole) {
try {
/*
await this.store.removeRolesOfTypeForUser(
userId,
ROOT_ROLE_TYPES,
);
*/
await this.store.addUserToRole(
userId,
newRootRole.id,

View File

@ -185,6 +185,7 @@ class UserService {
} catch (e) {
this.logger.error(
`Unable to create default user '${username}'`,
e,
);
}
}
@ -392,10 +393,14 @@ class UserService {
: { username: usernameOrEmail };
let user: IUser | undefined, passwordHash: string | undefined;
console.log('idQuery', idQuery);
try {
user = await this.store.getByQuery(idQuery);
passwordHash = await this.store.getPasswordHash(user.id);
} catch (error) {}
console.log(passwordHash);
} catch (error) {
console.error(error);
}
if (user && passwordHash) {
const match = await bcrypt.compare(password, passwordHash);
if (match) {

4938
src/lib/sql-migrate.ts Normal file

File diff suppressed because it is too large Load Diff

4954
src/pglite.ts Normal file

File diff suppressed because it is too large Load Diff

View File

@ -19,6 +19,7 @@ process.nextTick(async () => {
schema: process.env.UNLEASH_DATABASE_SCHEMA,
ssl: false,
applicationName: 'unleash',
disableMigration: true,
},
server: {
enableRequestLogger: true,

View File

@ -967,6 +967,13 @@ __metadata:
languageName: node
linkType: hard
"@electric-sql/pglite@npm:^0.2.12, @electric-sql/pglite@npm:^0.2.6":
version: 0.2.12
resolution: "@electric-sql/pglite@npm:0.2.12"
checksum: 10c0/28414b26ec73c81eab649fe45b291e63db29f7ec780b47edabb16759c5b6ba66fa90134073c4c17fd78b96179f23ea66f78eedd3cc1cc355a4b062d525b847bb
languageName: node
linkType: hard
"@ewoudenberg/difflib@npm:0.1.0":
version: 0.1.0
resolution: "@ewoudenberg/difflib@npm:0.1.0"
@ -6150,7 +6157,17 @@ __metadata:
languageName: node
linkType: hard
"knex@npm:3, knex@npm:^3.1.0":
"knex-pglite@npm:^0.9.7":
version: 0.9.7
resolution: "knex-pglite@npm:0.9.7"
dependencies:
"@electric-sql/pglite": "npm:^0.2.6"
knex: "npm:3.1.0"
checksum: 10c0/892cc52bdafdb44c70aac70c8e44a320c65c21250dd1d1e09e264685514b03940285c3f8f135b16956b995fc9725e8f6bedd9d7019ead814f58e5463657e6174
languageName: node
linkType: hard
"knex@npm:3, knex@npm:3.1.0, knex@npm:^3.1.0":
version: 3.1.0
resolution: "knex@npm:3.1.0"
dependencies:
@ -9334,6 +9351,7 @@ __metadata:
"@babel/core": "npm:7.25.8"
"@biomejs/biome": "npm:^1.8.3"
"@cyclonedx/yarn-plugin-cyclonedx": "npm:^1.0.0-rc.7"
"@electric-sql/pglite": "npm:^0.2.12"
"@slack/web-api": "npm:^7.3.4"
"@swc/core": "npm:1.7.36"
"@swc/jest": "npm:0.2.36"
@ -9402,6 +9420,7 @@ __metadata:
json-schema-to-ts: "npm:2.12.0"
json2csv: "npm:^5.0.7"
knex: "npm:^3.1.0"
knex-pglite: "npm:^0.9.7"
lint-staged: "npm:15.2.10"
lodash.get: "npm:^4.4.2"
lodash.groupby: "npm:^4.6.0"