Skip to content

Commit 5933834

Browse files
authored
Merge branch 'main' into dependabot-npm_and_yarn-lint-staged-15.3.0
2 parents 03127bd + dafb0c1 commit 5933834

8 files changed

Lines changed: 41 additions & 32 deletions

File tree

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@
7474
"@types/cli-progress": "3.11.6",
7575
"@types/express": "5.0.0",
7676
"@types/mime-types": "2.1.4",
77-
"@types/node": "22.10.2",
77+
"@types/node": "22.10.6",
7878
"@types/node-fetch": "2.6.12",
7979
"@types/range-parser": "^1.2.7",
8080
"@vitest/coverage-istanbul": "2.1.8",

src/commands/webdav.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { CLIUtils } from '../utils/cli.utils';
44
import { ConfigService } from '../services/config.service';
55
import { DriveDatabaseManager } from '../services/database/drive-database-manager.service';
66
import { ErrorUtils } from '../utils/errors.utils';
7+
import { AuthService } from '../services/auth.service';
78

89
export default class Webdav extends Command {
910
static readonly args = {
@@ -31,6 +32,7 @@ export default class Webdav extends Command {
3132
await PM2Utils.connect();
3233
switch (args.action) {
3334
case 'enable': {
35+
await AuthService.instance.getAuthDetails();
3436
message = await this.enableWebDav();
3537
break;
3638
}
@@ -41,6 +43,7 @@ export default class Webdav extends Command {
4143
}
4244

4345
case 'restart': {
46+
await AuthService.instance.getAuthDetails();
4447
message = await this.restartWebDav();
4548
break;
4649
}

src/services/auth.service.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ export class AuthService {
7777
};
7878

7979
/**
80-
* Obtains the user auth details
80+
* Checks and returns the user auth details (it refreshes the tokens if needed)
8181
*
8282
* @returns The user details and the auth tokens
8383
*/

src/webdav/index.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import { AuthService } from '../services/auth.service';
1313
import { CryptoService } from '../services/crypto.service';
1414
import { TrashService } from '../services/drive/trash.service';
1515
import { webdavLogger } from '../utils/logger.utils';
16+
import { SdkManager } from '../services/sdk-manager.service';
1617

1718
dotenv.config();
1819

@@ -23,6 +24,12 @@ const init = async () => {
2324

2425
await DriveDatabaseManager.init();
2526

27+
const { token, newToken } = await AuthService.instance.getAuthDetails();
28+
SdkManager.init({
29+
token,
30+
newToken,
31+
});
32+
2633
new WebDavServer(
2734
express(),
2835
ConfigService.instance,

src/webdav/middewares/auth.middleware.ts

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,24 @@
11
import { RequestHandler } from 'express';
2-
import { ConfigService } from '../../services/config.service';
32
import { SdkManager } from '../../services/sdk-manager.service';
3+
import { AuthService } from '../../services/auth.service';
4+
import { webdavLogger } from '../../utils/logger.utils';
45

5-
export const AuthMiddleware = (configService: ConfigService): RequestHandler => {
6+
export const AuthMiddleware = (authService: AuthService): RequestHandler => {
67
return (req, res, next) => {
78
(async () => {
89
try {
9-
const credentials = await configService.readUser();
10-
if (!credentials) throw new Error('Unauthorized');
10+
const { token, newToken, user } = await authService.getAuthDetails();
1111
SdkManager.init({
12-
token: credentials.token,
13-
newToken: credentials.newToken,
12+
token,
13+
newToken,
1414
});
1515
req.user = {
16-
uuid: credentials.user.uuid,
17-
rootFolderId: credentials.user.root_folder_id,
16+
uuid: user.uuid,
17+
rootFolderId: user.root_folder_id,
1818
};
1919
next();
2020
} catch (error) {
21+
webdavLogger.error('Error from AuthMiddleware: ' + (error as Error).message);
2122
res.status(401).send({ error: (error as Error).message });
2223
}
2324
})();

src/webdav/webdav-server.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ export class WebDavServer {
5959
private readonly registerMiddlewares = async () => {
6060
this.app.use(bodyParser.text({ type: ['application/xml', 'text/xml'] }));
6161
this.app.use(ErrorHandlingMiddleware);
62-
this.app.use(AuthMiddleware(ConfigService.instance));
62+
this.app.use(AuthMiddleware(AuthService.instance));
6363
this.app.use(
6464
RequestLoggerMiddleware({
6565
enable: true,

test/webdav/middlewares/auth.middleware.test.ts

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import { beforeEach, describe, expect, it, vi } from 'vitest';
22
import { AuthMiddleware } from '../../../src/webdav/middewares/auth.middleware';
33
import { createWebDavRequestFixture, createWebDavResponseFixture } from '../../fixtures/webdav.fixture';
4-
import { ConfigService } from '../../../src/services/config.service';
54
import { UserCredentialsFixture } from '../../fixtures/login.fixture';
5+
import { AuthService } from '../../../src/services/auth.service';
6+
import { MissingCredentialsError } from '../../../src/types/command.types';
67

78
describe('Auth middleware', () => {
89
beforeEach(() => {
@@ -18,14 +19,16 @@ describe('Auth middleware', () => {
1819
});
1920
const next = vi.fn();
2021

21-
const configServiceStub = vi.spyOn(ConfigService.instance, 'readUser').mockResolvedValue(undefined);
22+
const authServiceStub = vi
23+
.spyOn(AuthService.instance, 'getAuthDetails')
24+
.mockRejectedValue(new MissingCredentialsError());
2225

23-
await AuthMiddleware(ConfigService.instance)(req, res, next);
26+
await AuthMiddleware(AuthService.instance)(req, res, next);
2427

25-
expect(configServiceStub).toHaveBeenCalledOnce();
28+
expect(authServiceStub).toHaveBeenCalledOnce();
2629
expect(next).not.toHaveBeenCalled();
2730
expect(res.status).toHaveBeenCalledWith(401);
28-
expect(res.send).toHaveBeenCalledWith({ error: 'Unauthorized' });
31+
expect(res.send).toHaveBeenCalledWith({ error: new MissingCredentialsError().message });
2932
});
3033

3134
it('When the user is authenticated, then it should add the user to the request', async () => {
@@ -34,13 +37,13 @@ describe('Auth middleware', () => {
3437
});
3538
const res = createWebDavResponseFixture({});
3639
const next = vi.fn();
37-
const configServiceStub = vi.spyOn(ConfigService.instance, 'readUser').mockResolvedValue(UserCredentialsFixture);
40+
const authServiceStub = vi.spyOn(AuthService.instance, 'getAuthDetails').mockResolvedValue(UserCredentialsFixture);
3841

39-
await AuthMiddleware(ConfigService.instance)(req, res, next);
42+
await AuthMiddleware(AuthService.instance)(req, res, next);
4043

4144
// @ts-expect-error - User is added to the request, but TS is not picking it as we specified null before
4245
expect(req.user.rootFolderId).to.be.equal(UserCredentialsFixture.user.root_folder_id);
43-
expect(configServiceStub).toHaveBeenCalledOnce();
46+
expect(authServiceStub).toHaveBeenCalledOnce();
4447
expect(next).toHaveBeenCalledOnce();
4548
expect(res.status).not.toHaveBeenCalled();
4649
expect(res.send).not.toHaveBeenCalled();

yarn.lock

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2953,16 +2953,16 @@
29532953
"@types/node" "*"
29542954

29552955
"@types/node@*", "@types/node@^22.5.5":
2956-
version "22.9.1"
2957-
resolved "https://registry.yarnpkg.com/@types/node/-/node-22.9.1.tgz#bdf91c36e0e7ecfb7257b2d75bf1b206b308ca71"
2958-
integrity sha512-p8Yy/8sw1caA8CdRIQBG5tiLHmxtQKObCijiAa9Ez+d4+PRffM4054xbju0msf+cvhJpnFEeNjxmVT/0ipktrg==
2956+
version "22.10.5"
2957+
resolved "https://registry.yarnpkg.com/@types/node/-/node-22.10.5.tgz#95af89a3fb74a2bb41ef9927f206e6472026e48b"
2958+
integrity sha512-F8Q+SeGimwOo86fiovQh8qiXfFEh2/ocYv7tU5pJ3EXMSSxk1Joj5wefpFK2fHTf/N6HKGSxIDBT9f3gCxXPkQ==
29592959
dependencies:
2960-
undici-types "~6.19.8"
2960+
undici-types "~6.20.0"
29612961

2962-
"@types/node@22.10.2":
2963-
version "22.10.2"
2964-
resolved "https://registry.yarnpkg.com/@types/node/-/node-22.10.2.tgz#a485426e6d1fdafc7b0d4c7b24e2c78182ddabb9"
2965-
integrity sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ==
2962+
"@types/node@22.10.6":
2963+
version "22.10.6"
2964+
resolved "https://registry.yarnpkg.com/@types/node/-/node-22.10.6.tgz#5c6795e71635876039f853cbccd59f523d9e4239"
2965+
integrity sha512-qNiuwC4ZDAUNcY47xgaSuS92cjf8JbSUoaKS77bmLG1rU7MlATVSiw/IlrjtIyyskXBZ8KkNfjK/P5na7rgXbQ==
29662966
dependencies:
29672967
undici-types "~6.20.0"
29682968

@@ -8325,11 +8325,6 @@ undefsafe@^2.0.5:
83258325
resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c"
83268326
integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==
83278327

8328-
undici-types@~6.19.8:
8329-
version "6.19.8"
8330-
resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02"
8331-
integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==
8332-
83338328
undici-types@~6.20.0:
83348329
version "6.20.0"
83358330
resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.20.0.tgz#8171bf22c1f588d1554d55bf204bc624af388433"

0 commit comments

Comments
 (0)