@actual-app/sync-server 26.5.0 → 26.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/.tsbuildinfo +1 -1
- package/build/migrations/1719409568000-multiuser.d.ts.map +1 -1
- package/build/migrations/1719409568000-multiuser.js +2 -1
- package/build/src/accounts/openid.d.ts.map +1 -1
- package/build/src/accounts/openid.js +3 -2
- package/build/src/accounts/password.d.ts.map +1 -1
- package/build/src/accounts/password.js +3 -2
- package/build/src/app-account.d.ts.map +1 -1
- package/build/src/app-account.js +1 -0
- package/build/src/app-account.test.js +6 -5
- package/build/src/app-admin.d.ts.map +1 -1
- package/build/src/app-admin.js +2 -1
- package/build/src/app-admin.test.js +16 -15
- package/build/src/app-gocardless/services/gocardless-service.d.ts.map +1 -1
- package/build/src/app-gocardless/services/gocardless-service.js +2 -1
- package/build/src/app-sync.d.ts.map +1 -1
- package/build/src/app-sync.js +2 -1
- package/package.json +3 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"1719409568000-multiuser.d.ts","sourceRoot":"","sources":["../../migrations/1719409568000-multiuser.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"1719409568000-multiuser.d.ts","sourceRoot":"","sources":["../../migrations/1719409568000-multiuser.js"],"names":[],"mappings":"AAIA,eAAO,MAAM,EAAE,qBA+Cd,CAAC;AAEF,eAAO,MAAM,IAAI,qBA8DhB,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
1
2
|
import { getAccountDb } from '../src/account-db.js';
|
|
2
3
|
export const up = async function () {
|
|
3
4
|
const accountDb = getAccountDb();
|
|
@@ -31,7 +32,7 @@ export const up = async function () {
|
|
|
31
32
|
ALTER TABLE sessions
|
|
32
33
|
ADD COLUMN auth_method TEXT;
|
|
33
34
|
`);
|
|
34
|
-
const userId =
|
|
35
|
+
const userId = uuidv4();
|
|
35
36
|
accountDb.mutate('INSERT INTO users (id, user_name, display_name, enabled, owner, role) VALUES (?, ?, ?, 1, 1, ?)', [userId, '', '', 'ADMIN']);
|
|
36
37
|
accountDb.mutate('UPDATE sessions SET user_id = ?, expires_at = ?, auth_method = ? WHERE auth_method IS NULL', [userId, -1, 'password']);
|
|
37
38
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openid.d.ts","sourceRoot":"","sources":["../../../src/accounts/openid.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"openid.d.ts","sourceRoot":"","sources":["../../../src/accounts/openid.ts"],"names":[],"mappings":"AAkBA,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,wBAAsB,eAAe,CAAC,eAAe,EAAE,eAAe;;;;GAgDrE;AA0BD,wBAAsB,oBAAoB,CACxC,SAAS,KAAA,EACT,sBAAsB,SAAK;;;;;;GAyE5B;AAED,wBAAsB,uBAAuB,CAAC,IAAI,KAAA;;;;;;GAmKjD;AAED,wBAAgB,iBAAiB,QAchC;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,GAAG,IAAI,MAAM,CAsBzE"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// @ts-strict-ignore
|
|
2
2
|
import { custom, generators, Issuer } from 'openid-client';
|
|
3
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
3
4
|
import { clearExpiredSessions, getAccountDb, listLoginMethods, } from '../account-db.js';
|
|
4
5
|
import { config } from '../load-config.js';
|
|
5
6
|
import { getUserByUsername, transferAllFilesFromUser, } from '../services/user-service.js';
|
|
@@ -187,7 +188,7 @@ export async function loginWithOpenIdFinalize(body) {
|
|
|
187
188
|
if (!existingUser &&
|
|
188
189
|
(countUsersWithUserName === 0 ||
|
|
189
190
|
config.get('userCreationMode') === 'login')) {
|
|
190
|
-
userId =
|
|
191
|
+
userId = uuidv4();
|
|
191
192
|
accountDb.mutate('INSERT INTO users (id, user_name, display_name, enabled, owner, role) VALUES (?, ?, ?, 1, ?, ?)', [
|
|
192
193
|
userId,
|
|
193
194
|
identity,
|
|
@@ -228,7 +229,7 @@ export async function loginWithOpenIdFinalize(body) {
|
|
|
228
229
|
throw error; // Re-throw other unexpected errors
|
|
229
230
|
}
|
|
230
231
|
}
|
|
231
|
-
const token =
|
|
232
|
+
const token = uuidv4();
|
|
232
233
|
let expiration;
|
|
233
234
|
if (config.get('token_expiration') === 'openid-provider') {
|
|
234
235
|
expiration = tokenSet.expires_at ?? TOKEN_EXPIRATION_NEVER;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"password.d.ts","sourceRoot":"","sources":["../../../src/accounts/password.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"password.d.ts","sourceRoot":"","sources":["../../../src/accounts/password.js"],"names":[],"mappings":"AAeA,wBAAgB,iBAAiB,CAAC,QAAQ,KAAA;;;;EAiBzC;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,KAAA;;;;;;EA4EzC;AAED,wBAAgB,cAAc,CAAC,WAAW,KAAA;;;;EAYzC;AAED,wBAAgB,aAAa,CAAC,QAAQ,KAAA,WAsBrC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as bcrypt from 'bcrypt';
|
|
2
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
2
3
|
import { clearExpiredSessions, getAccountDb } from '../account-db.js';
|
|
3
4
|
import { config } from '../load-config.js';
|
|
4
5
|
import { TOKEN_EXPIRATION_NEVER } from '../util/validate-user.js';
|
|
@@ -37,11 +38,11 @@ export function loginWithPassword(password) {
|
|
|
37
38
|
return { error: 'invalid-password' };
|
|
38
39
|
}
|
|
39
40
|
const sessionRow = accountDb.first('SELECT * FROM sessions WHERE auth_method = ?', ['password']);
|
|
40
|
-
const token = sessionRow ? sessionRow.token :
|
|
41
|
+
const token = sessionRow ? sessionRow.token : uuidv4();
|
|
41
42
|
const { totalOfUsers } = accountDb.first('SELECT count(*) as totalOfUsers FROM users');
|
|
42
43
|
let userId = null;
|
|
43
44
|
if (totalOfUsers === 0) {
|
|
44
|
-
userId =
|
|
45
|
+
userId = uuidv4();
|
|
45
46
|
accountDb.mutate('INSERT INTO users (id, user_name, display_name, enabled, owner, role) VALUES (?, ?, ?, 1, 1, ?)', [userId, '', '', 'ADMIN']);
|
|
46
47
|
}
|
|
47
48
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-account.d.ts","sourceRoot":"","sources":["../../src/app-account.js"],"names":[],"mappings":"AAmBA,QAAA,MAAM,GAAG,6CAAY,CAAC;AAMtB,QAAA,MAAM,eAAe,
|
|
1
|
+
{"version":3,"file":"app-account.d.ts","sourceRoot":"","sources":["../../src/app-account.js"],"names":[],"mappings":"AAmBA,QAAA,MAAM,GAAG,6CAAY,CAAC;AAMtB,QAAA,MAAM,eAAe,sDAOnB,CAAC;AAEH,OAAO,EAAE,GAAG,IAAI,QAAQ,EAAE,eAAe,EAAE,CAAC"}
|
package/build/src/app-account.js
CHANGED
|
@@ -15,6 +15,7 @@ const authRateLimiter = rateLimit({
|
|
|
15
15
|
max: 5, // 5 attempts per window
|
|
16
16
|
legacyHeaders: false,
|
|
17
17
|
standardHeaders: true,
|
|
18
|
+
skipSuccessfulRequests: true,
|
|
18
19
|
message: { status: 'error', reason: 'too-many-requests' },
|
|
19
20
|
});
|
|
20
21
|
export { app as handlers, authRateLimiter };
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import request from 'supertest';
|
|
2
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
2
3
|
import { getAccountDb, getLoginMethod, getServerPrefs } from './account-db.js';
|
|
3
4
|
import { bootstrapPassword } from './accounts/password.js';
|
|
4
5
|
import { handlers as app, authRateLimiter } from './app-account.js';
|
|
@@ -15,7 +16,7 @@ const deleteUser = userId => {
|
|
|
15
16
|
const createSession = (userId, sessionToken, authMethod = null) => {
|
|
16
17
|
getAccountDb().mutate('INSERT INTO sessions (token, user_id, expires_at, auth_method) VALUES (?, ?, ?, ?)', [sessionToken, userId, Math.floor(Date.now() / 1000) + 60 * 60, authMethod]);
|
|
17
18
|
};
|
|
18
|
-
const generateSessionToken = () => `token-${
|
|
19
|
+
const generateSessionToken = () => `token-${uuidv4()}`;
|
|
19
20
|
const clearServerPrefs = () => {
|
|
20
21
|
getAccountDb().mutate('DELETE FROM server_prefs');
|
|
21
22
|
};
|
|
@@ -64,8 +65,8 @@ describe('auth rate limiting', () => {
|
|
|
64
65
|
describe('/change-password', () => {
|
|
65
66
|
let adminUserId, basicUserId, adminPasswordToken, adminOpenidToken, basicPasswordToken;
|
|
66
67
|
beforeEach(() => {
|
|
67
|
-
adminUserId =
|
|
68
|
-
basicUserId =
|
|
68
|
+
adminUserId = uuidv4();
|
|
69
|
+
basicUserId = uuidv4();
|
|
69
70
|
adminPasswordToken = generateSessionToken();
|
|
70
71
|
adminOpenidToken = generateSessionToken();
|
|
71
72
|
basicPasswordToken = generateSessionToken();
|
|
@@ -193,8 +194,8 @@ describe('/server-prefs', () => {
|
|
|
193
194
|
describe('POST /server-prefs', () => {
|
|
194
195
|
let adminUserId, basicUserId, adminSessionToken, basicSessionToken;
|
|
195
196
|
beforeEach(() => {
|
|
196
|
-
adminUserId =
|
|
197
|
-
basicUserId =
|
|
197
|
+
adminUserId = uuidv4();
|
|
198
|
+
basicUserId = uuidv4();
|
|
198
199
|
adminSessionToken = generateSessionToken();
|
|
199
200
|
basicSessionToken = generateSessionToken();
|
|
200
201
|
createUser(adminUserId, 'admin', ADMIN_ROLE);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-admin.d.ts","sourceRoot":"","sources":["../../src/app-admin.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"app-admin.d.ts","sourceRoot":"","sources":["../../src/app-admin.js"],"names":[],"mappings":"AAYA,QAAA,MAAM,GAAG,6CAAY,CAAC;AAKtB,OAAO,EAAE,GAAG,IAAI,QAAQ,EAAE,CAAC"}
|
package/build/src/app-admin.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import express from 'express';
|
|
2
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
2
3
|
import { isAdmin } from './account-db.js';
|
|
3
4
|
import * as UserService from './services/user-service.js';
|
|
4
5
|
import { errorMiddleware, requestLoggerMiddleware, validateSessionMiddleware, } from './util/middlewares.js';
|
|
@@ -61,7 +62,7 @@ app.post('/users', validateSessionMiddleware, async (req, res) => {
|
|
|
61
62
|
});
|
|
62
63
|
return;
|
|
63
64
|
}
|
|
64
|
-
const userId =
|
|
65
|
+
const userId = uuidv4();
|
|
65
66
|
UserService.insertUser(userId, userName, displayName || null, enabled ? 1 : 0);
|
|
66
67
|
res.status(200).send({ status: 'ok', data: { id: userId } });
|
|
67
68
|
});
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import request from 'supertest';
|
|
2
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
2
3
|
import { getAccountDb } from './account-db.js';
|
|
3
4
|
import { handlers as app } from './app-admin.js';
|
|
4
5
|
const ADMIN_ROLE = 'ADMIN';
|
|
@@ -14,12 +15,12 @@ const deleteUser = userId => {
|
|
|
14
15
|
const createSession = (userId, sessionToken) => {
|
|
15
16
|
getAccountDb().mutate('INSERT INTO sessions (token, user_id, expires_at) VALUES (?, ?, ?)', [sessionToken, userId, Date.now() + 1000 * 60 * 60]);
|
|
16
17
|
};
|
|
17
|
-
const generateSessionToken = () => `token-${
|
|
18
|
+
const generateSessionToken = () => `token-${uuidv4()}`;
|
|
18
19
|
describe('/admin', () => {
|
|
19
20
|
describe('/owner-created', () => {
|
|
20
21
|
it('should return 200 and true if an owner user is created', async () => {
|
|
21
22
|
const sessionToken = generateSessionToken();
|
|
22
|
-
const adminId =
|
|
23
|
+
const adminId = uuidv4();
|
|
23
24
|
createUser(adminId, 'admin', ADMIN_ROLE, 1);
|
|
24
25
|
createSession(adminId, sessionToken);
|
|
25
26
|
const res = await request(app)
|
|
@@ -33,8 +34,8 @@ describe('/admin', () => {
|
|
|
33
34
|
describe('GET /users', () => {
|
|
34
35
|
let sessionUserId, testUserId, sessionToken;
|
|
35
36
|
beforeEach(() => {
|
|
36
|
-
sessionUserId =
|
|
37
|
-
testUserId =
|
|
37
|
+
sessionUserId = uuidv4();
|
|
38
|
+
testUserId = uuidv4();
|
|
38
39
|
sessionToken = generateSessionToken();
|
|
39
40
|
createUser(sessionUserId, 'sessionUser', ADMIN_ROLE);
|
|
40
41
|
createSession(sessionUserId, sessionToken);
|
|
@@ -57,7 +58,7 @@ describe('/admin', () => {
|
|
|
57
58
|
let createdUserId;
|
|
58
59
|
let duplicateUserId;
|
|
59
60
|
beforeEach(() => {
|
|
60
|
-
sessionUserId =
|
|
61
|
+
sessionUserId = uuidv4();
|
|
61
62
|
sessionToken = generateSessionToken();
|
|
62
63
|
createUser(sessionUserId, 'sessionUser', ADMIN_ROLE);
|
|
63
64
|
createSession(sessionUserId, sessionToken);
|
|
@@ -115,8 +116,8 @@ describe('/admin', () => {
|
|
|
115
116
|
describe('PATCH /users', () => {
|
|
116
117
|
let sessionUserId, testUserId, sessionToken;
|
|
117
118
|
beforeEach(() => {
|
|
118
|
-
sessionUserId =
|
|
119
|
-
testUserId =
|
|
119
|
+
sessionUserId = uuidv4();
|
|
120
|
+
testUserId = uuidv4();
|
|
120
121
|
sessionToken = generateSessionToken();
|
|
121
122
|
createUser(sessionUserId, 'sessionUser', ADMIN_ROLE);
|
|
122
123
|
createSession(sessionUserId, sessionToken);
|
|
@@ -162,8 +163,8 @@ describe('/admin', () => {
|
|
|
162
163
|
describe('POST /users/delete-all', () => {
|
|
163
164
|
let sessionUserId, testUserId, sessionToken;
|
|
164
165
|
beforeEach(() => {
|
|
165
|
-
sessionUserId =
|
|
166
|
-
testUserId =
|
|
166
|
+
sessionUserId = uuidv4();
|
|
167
|
+
testUserId = uuidv4();
|
|
167
168
|
sessionToken = generateSessionToken();
|
|
168
169
|
createUser(sessionUserId, 'sessionUser', ADMIN_ROLE);
|
|
169
170
|
createSession(sessionUserId, sessionToken);
|
|
@@ -203,9 +204,9 @@ describe('/admin', () => {
|
|
|
203
204
|
describe('POST /access', () => {
|
|
204
205
|
let sessionUserId, testUserId, fileId, sessionToken;
|
|
205
206
|
beforeEach(() => {
|
|
206
|
-
sessionUserId =
|
|
207
|
-
testUserId =
|
|
208
|
-
fileId =
|
|
207
|
+
sessionUserId = uuidv4();
|
|
208
|
+
testUserId = uuidv4();
|
|
209
|
+
fileId = uuidv4();
|
|
209
210
|
sessionToken = generateSessionToken();
|
|
210
211
|
createUser(sessionUserId, 'sessionUser', ADMIN_ROLE);
|
|
211
212
|
createSession(sessionUserId, sessionToken);
|
|
@@ -253,9 +254,9 @@ describe('/admin', () => {
|
|
|
253
254
|
describe('DELETE /access', () => {
|
|
254
255
|
let sessionUserId, testUserId, fileId, sessionToken;
|
|
255
256
|
beforeEach(() => {
|
|
256
|
-
sessionUserId =
|
|
257
|
-
testUserId =
|
|
258
|
-
fileId =
|
|
257
|
+
sessionUserId = uuidv4();
|
|
258
|
+
testUserId = uuidv4();
|
|
259
|
+
fileId = uuidv4();
|
|
259
260
|
sessionToken = generateSessionToken();
|
|
260
261
|
createUser(sessionUserId, 'sessionUser', ADMIN_ROLE);
|
|
261
262
|
createSession(sessionUserId, sessionToken);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gocardless-service.d.ts","sourceRoot":"","sources":["../../../../src/app-gocardless/services/gocardless-service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"gocardless-service.d.ts","sourceRoot":"","sources":["../../../../src/app-gocardless/services/gocardless-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
1
2
|
import { BankFactory, isSpecialContinuousAccessBank, } from '../bank-factory.js';
|
|
2
3
|
import { AccessDeniedError, AccountNotLinkedToRequisition, GenericGoCardlessError, InvalidGoCardlessTokenError, InvalidInputDataError, NotFoundError, RateLimitError, RequisitionNotLinked, ResourceSuspended, ServiceError, UnknownError, } from '../errors.js';
|
|
3
4
|
import { SecretName, secretsService } from '../../services/secrets-service.js';
|
|
@@ -146,7 +147,7 @@ export const goCardlessService = {
|
|
|
146
147
|
const body = {
|
|
147
148
|
redirectUrl: host + '/gocardless/link',
|
|
148
149
|
institutionId,
|
|
149
|
-
referenceId:
|
|
150
|
+
referenceId: uuidv4(),
|
|
150
151
|
accessValidForDays: institution.max_access_valid_for_days,
|
|
151
152
|
maxHistoricalDays: isSpecialContinuousAccessBank(institutionId)
|
|
152
153
|
? 90
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-sync.d.ts","sourceRoot":"","sources":["../../src/app-sync.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"app-sync.d.ts","sourceRoot":"","sources":["../../src/app-sync.ts"],"names":[],"mappings":"AAqCA,QAAA,MAAM,GAAG,6CAAY,CAAC;AAkBtB,OAAO,EAAE,GAAG,IAAI,QAAQ,EAAE,CAAC"}
|
package/build/src/app-sync.js
CHANGED
|
@@ -4,6 +4,7 @@ import fs from 'node:fs/promises';
|
|
|
4
4
|
import { resolve } from 'node:path';
|
|
5
5
|
import { SyncProtoBuf } from '@actual-app/crdt';
|
|
6
6
|
import express from 'express';
|
|
7
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
7
8
|
import { getAccountDb, isAdmin } from './account-db.js';
|
|
8
9
|
import { FileNotFound } from './app-sync/errors.js';
|
|
9
10
|
import { File, FilesService, FileUpdate, } from './app-sync/services/files-service.js';
|
|
@@ -32,7 +33,7 @@ function boolToInt(deleted) {
|
|
|
32
33
|
return deleted ? 1 : 0;
|
|
33
34
|
}
|
|
34
35
|
function generateGroupId() {
|
|
35
|
-
const id =
|
|
36
|
+
const id = uuidv4();
|
|
36
37
|
if (!isValidGroupId(id)) {
|
|
37
38
|
throw new TypeError('UUID format no longer matches expected format');
|
|
38
39
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@actual-app/sync-server",
|
|
3
|
-
"version": "26.5.
|
|
3
|
+
"version": "26.5.1",
|
|
4
4
|
"description": "actual syncing server",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -85,7 +85,7 @@
|
|
|
85
85
|
},
|
|
86
86
|
"dependencies": {
|
|
87
87
|
"@actual-app/crdt": "2.1.0",
|
|
88
|
-
"@actual-app/web": "26.5.
|
|
88
|
+
"@actual-app/web": "26.5.1",
|
|
89
89
|
"bcrypt": "^6.0.0",
|
|
90
90
|
"better-sqlite3": "^12.8.0",
|
|
91
91
|
"convict": "^6.2.5",
|
|
@@ -99,6 +99,7 @@
|
|
|
99
99
|
"migrate": "^2.1.0",
|
|
100
100
|
"openid-client": "^5.7.1",
|
|
101
101
|
"pluggy-sdk": "^0.83.0",
|
|
102
|
+
"uuid": "^13.0.0",
|
|
102
103
|
"winston": "^3.19.0"
|
|
103
104
|
},
|
|
104
105
|
"devDependencies": {
|