Skip to content

Commit a0b0c62

Browse files
committed
Merge branch 'main' into feat/improve-progress-reporting
2 parents ba07142 + d5c9727 commit a0b0c62

8 files changed

Lines changed: 1024 additions & 1574 deletions

File tree

package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -68,21 +68,21 @@
6868
"devDependencies": {
6969
"@internxt/eslint-config-internxt": "2.0.0",
7070
"@internxt/prettier-config": "internxt/prettier-config#v1.0.2",
71-
"@oclif/test": "4.1.4",
71+
"@oclif/test": "4.1.7",
7272
"@openpgp/web-stream-tools": "0.0.11-patch-0",
7373
"@types/cli-progress": "3.11.6",
7474
"@types/express": "5.0.0",
7575
"@types/mime-types": "2.1.4",
76-
"@types/node": "22.10.2",
76+
"@types/node": "22.10.6",
7777
"@types/range-parser": "1.2.7",
7878
"@vitest/coverage-istanbul": "2.1.8",
7979
"@vitest/spy": "2.1.8",
8080
"eslint": "9.17.0",
8181
"husky": "9.1.7",
82-
"lint-staged": "15.2.11",
82+
"lint-staged": "15.3.0",
8383
"nock": "13.5.6",
8484
"nodemon": "3.1.9",
85-
"oclif": "4.17.4",
85+
"oclif": "4.17.11",
8686
"prettier": "3.4.2",
8787
"rimraf": "6.0.1",
8888
"sequelize-cli": "6.6.2",

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: 4 additions & 3 deletions
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,
@@ -170,8 +170,9 @@ export class WebDavServer {
170170
server.requestTimeout = 15 * 60 * 1000;
171171

172172
server.listen(configs.port, () => {
173-
webdavLogger.info(`Internxt ${SdkManager.getAppDetails().clientVersion} WebDav server ` +
174-
`listening at ${configs.protocol}://${ConfigService.WEBDAV_LOCAL_URL}:${configs.port}`,
173+
webdavLogger.info(
174+
`Internxt ${SdkManager.getAppDetails().clientVersion} WebDav server ` +
175+
`listening at ${configs.protocol}://${ConfigService.WEBDAV_LOCAL_URL}:${configs.port}`,
175176
);
176177
});
177178
};

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();

0 commit comments

Comments
 (0)