Skip to content

Commit f693039

Browse files
authored
Merge pull request #463 from internxt/fix/circular-dependency
[_]: fix/circular-dependency
2 parents cf5f758 + 25d98df commit f693039

7 files changed

Lines changed: 99 additions & 76 deletions

File tree

src/commands/add-cert.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import { Command } from '@oclif/core';
22
import { exec } from 'child_process';
3-
import { ConfigService } from '../services/config.service';
43
import os from 'node:os';
54
import path from 'node:path';
65
import { CLIUtils } from '../utils/cli.utils';
6+
import { WEBDAV_SSL_CERTS_DIR } from '../constants/configs';
77

88
export default class AddCert extends Command {
99
static readonly args = {};
@@ -14,7 +14,7 @@ export default class AddCert extends Command {
1414
static readonly enableJsonFlag = true;
1515

1616
public run = async () => {
17-
const certPath = path.join(ConfigService.WEBDAV_SSL_CERTS_DIR, 'cert.crt');
17+
const certPath = path.join(WEBDAV_SSL_CERTS_DIR, 'cert.crt');
1818
const platform = os.platform();
1919

2020
const scriptBasePath = path.join(__dirname, '../../scripts');

src/commands/logs.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { Command } from '@oclif/core';
2-
import { ConfigService } from '../services/config.service';
32
import { CLIUtils } from '../utils/cli.utils';
3+
import { INTERNXT_CLI_LOGS_DIR } from '../constants/configs';
44

55
export default class Logs extends Command {
66
static readonly args = {};
@@ -11,9 +11,9 @@ export default class Logs extends Command {
1111
static readonly enableJsonFlag = true;
1212

1313
public run = async () => {
14-
const message = `Internxt CLI logs are located at ${ConfigService.INTERNXT_CLI_LOGS_DIR}`;
14+
const message = `Internxt CLI logs are located at ${INTERNXT_CLI_LOGS_DIR}`;
1515
CLIUtils.log(this.log.bind(this), message);
16-
return { success: true, message, path: ConfigService.INTERNXT_CLI_LOGS_DIR };
16+
return { success: true, message, path: INTERNXT_CLI_LOGS_DIR };
1717
};
1818

1919
public catch = async (error: Error) => {

src/constants/configs.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import path from 'node:path';
2+
import os from 'node:os';
3+
4+
export const INTERNXT_CLI_DATA_DIR = path.join(os.homedir(), '.internxt-cli');
5+
export const INTERNXT_CLI_LOGS_DIR = path.join(INTERNXT_CLI_DATA_DIR, 'logs');
6+
export const INTERNXT_TMP_DIR = os.tmpdir();
7+
export const CREDENTIALS_FILE = path.join(INTERNXT_CLI_DATA_DIR, '.inxtcli');
8+
export const DRIVE_SQLITE_FILE = path.join(INTERNXT_CLI_DATA_DIR, 'internxt-cli-drive.sqlite');
9+
export const WEBDAV_SSL_CERTS_DIR = path.join(INTERNXT_CLI_DATA_DIR, 'certs');
10+
export const WEBDAV_CONFIGS_FILE = path.join(INTERNXT_CLI_DATA_DIR, 'config.webdav.inxt');
11+
export const WEBDAV_DEFAULT_HOST = '127.0.0.1';
12+
export const WEBDAV_DEFAULT_PORT = '3005';
13+
export const WEBDAV_DEFAULT_PROTOCOL = 'https';
14+
export const WEBDAV_DEFAULT_TIMEOUT = 0;
15+
export const WEBDAV_DEFAULT_CREATE_FULL_PATH = true;

src/services/config.service.ts

Lines changed: 34 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,22 @@
1-
import path from 'node:path';
2-
import os from 'node:os';
31
import fs from 'node:fs/promises';
42
import { ConfigKeys } from '../types/config.types';
53
import { LoginCredentials, WebdavConfig } from '../types/command.types';
64
import { CryptoService } from './crypto.service';
75
import { isFileNotFoundError } from '../utils/errors.utils';
6+
import {
7+
CREDENTIALS_FILE,
8+
INTERNXT_CLI_DATA_DIR,
9+
INTERNXT_CLI_LOGS_DIR,
10+
WEBDAV_CONFIGS_FILE,
11+
WEBDAV_DEFAULT_CREATE_FULL_PATH,
12+
WEBDAV_DEFAULT_HOST,
13+
WEBDAV_DEFAULT_PORT,
14+
WEBDAV_DEFAULT_PROTOCOL,
15+
WEBDAV_DEFAULT_TIMEOUT,
16+
WEBDAV_SSL_CERTS_DIR,
17+
} from '../constants/configs';
818

919
export class ConfigService {
10-
static readonly INTERNXT_CLI_DATA_DIR = path.join(os.homedir(), '.internxt-cli');
11-
static readonly INTERNXT_CLI_LOGS_DIR = path.join(this.INTERNXT_CLI_DATA_DIR, 'logs');
12-
static readonly INTERNXT_TMP_DIR = os.tmpdir();
13-
static readonly CREDENTIALS_FILE = path.join(this.INTERNXT_CLI_DATA_DIR, '.inxtcli');
14-
static readonly DRIVE_SQLITE_FILE = path.join(this.INTERNXT_CLI_DATA_DIR, 'internxt-cli-drive.sqlite');
15-
static readonly WEBDAV_SSL_CERTS_DIR = path.join(this.INTERNXT_CLI_DATA_DIR, 'certs');
16-
static readonly WEBDAV_CONFIGS_FILE = path.join(this.INTERNXT_CLI_DATA_DIR, 'config.webdav.inxt');
17-
static readonly WEBDAV_DEFAULT_HOST = '127.0.0.1';
18-
static readonly WEBDAV_DEFAULT_PORT = '3005';
19-
static readonly WEBDAV_DEFAULT_PROTOCOL = 'https';
20-
static readonly WEBDAV_DEFAULT_TIMEOUT = 0;
21-
static readonly WEBDAV_DEFAULT_CREATE_FULL_PATH = true;
2220
public static readonly instance: ConfigService = new ConfigService();
2321

2422
/**
@@ -42,7 +40,7 @@ export class ConfigService {
4240
await this.ensureInternxtCliDataDirExists();
4341
const credentialsString = JSON.stringify(loginCredentials);
4442
const encryptedCredentials = CryptoService.instance.encryptText(credentialsString);
45-
await fs.writeFile(ConfigService.CREDENTIALS_FILE, encryptedCredentials, 'utf8');
43+
await fs.writeFile(CREDENTIALS_FILE, encryptedCredentials, 'utf8');
4644
};
4745

4846
/**
@@ -51,9 +49,9 @@ export class ConfigService {
5149
**/
5250
public clearUser = async (): Promise<void> => {
5351
try {
54-
const stat = await fs.stat(ConfigService.CREDENTIALS_FILE);
52+
const stat = await fs.stat(CREDENTIALS_FILE);
5553
if (stat.size === 0) return;
56-
await fs.writeFile(ConfigService.CREDENTIALS_FILE, '', 'utf8');
54+
await fs.writeFile(CREDENTIALS_FILE, '', 'utf8');
5755
} catch (error) {
5856
if (!isFileNotFoundError(error)) {
5957
throw error;
@@ -67,7 +65,7 @@ export class ConfigService {
6765
**/
6866
public readUser = async (): Promise<LoginCredentials | undefined> => {
6967
try {
70-
const encryptedCredentials = await fs.readFile(ConfigService.CREDENTIALS_FILE, 'utf8');
68+
const encryptedCredentials = await fs.readFile(CREDENTIALS_FILE, 'utf8');
7169
const credentialsString = CryptoService.instance.decryptText(encryptedCredentials);
7270
const loginCredentials = JSON.parse(credentialsString) as LoginCredentials;
7371
return loginCredentials;
@@ -79,52 +77,52 @@ export class ConfigService {
7977
public saveWebdavConfig = async (webdavConfig: WebdavConfig): Promise<void> => {
8078
await this.ensureInternxtCliDataDirExists();
8179
const configs = JSON.stringify(webdavConfig);
82-
await fs.writeFile(ConfigService.WEBDAV_CONFIGS_FILE, configs, 'utf8');
80+
await fs.writeFile(WEBDAV_CONFIGS_FILE, configs, 'utf8');
8381
};
8482

8583
public readWebdavConfig = async (): Promise<WebdavConfig> => {
8684
try {
87-
const configsData = await fs.readFile(ConfigService.WEBDAV_CONFIGS_FILE, 'utf8');
85+
const configsData = await fs.readFile(WEBDAV_CONFIGS_FILE, 'utf8');
8886
const configs = JSON.parse(configsData);
8987
return {
90-
host: configs?.host ?? ConfigService.WEBDAV_DEFAULT_HOST,
91-
port: configs?.port ?? ConfigService.WEBDAV_DEFAULT_PORT,
92-
protocol: configs?.protocol ?? ConfigService.WEBDAV_DEFAULT_PROTOCOL,
93-
timeoutMinutes: configs?.timeoutMinutes ?? ConfigService.WEBDAV_DEFAULT_TIMEOUT,
94-
createFullPath: configs?.createFullPath ?? ConfigService.WEBDAV_DEFAULT_CREATE_FULL_PATH,
88+
host: configs?.host ?? WEBDAV_DEFAULT_HOST,
89+
port: configs?.port ?? WEBDAV_DEFAULT_PORT,
90+
protocol: configs?.protocol ?? WEBDAV_DEFAULT_PROTOCOL,
91+
timeoutMinutes: configs?.timeoutMinutes ?? WEBDAV_DEFAULT_TIMEOUT,
92+
createFullPath: configs?.createFullPath ?? WEBDAV_DEFAULT_CREATE_FULL_PATH,
9593
};
9694
} catch {
9795
return {
98-
host: ConfigService.WEBDAV_DEFAULT_HOST,
99-
port: ConfigService.WEBDAV_DEFAULT_PORT,
100-
protocol: ConfigService.WEBDAV_DEFAULT_PROTOCOL,
101-
timeoutMinutes: ConfigService.WEBDAV_DEFAULT_TIMEOUT,
102-
createFullPath: ConfigService.WEBDAV_DEFAULT_CREATE_FULL_PATH,
96+
host: WEBDAV_DEFAULT_HOST,
97+
port: WEBDAV_DEFAULT_PORT,
98+
protocol: WEBDAV_DEFAULT_PROTOCOL,
99+
timeoutMinutes: WEBDAV_DEFAULT_TIMEOUT,
100+
createFullPath: WEBDAV_DEFAULT_CREATE_FULL_PATH,
103101
};
104102
}
105103
};
106104

107105
ensureInternxtCliDataDirExists = async () => {
108106
try {
109-
await fs.access(ConfigService.INTERNXT_CLI_DATA_DIR);
107+
await fs.access(INTERNXT_CLI_DATA_DIR);
110108
} catch {
111-
await fs.mkdir(ConfigService.INTERNXT_CLI_DATA_DIR);
109+
await fs.mkdir(INTERNXT_CLI_DATA_DIR);
112110
}
113111
};
114112

115113
ensureWebdavCertsDirExists = async () => {
116114
try {
117-
await fs.access(ConfigService.WEBDAV_SSL_CERTS_DIR);
115+
await fs.access(WEBDAV_SSL_CERTS_DIR);
118116
} catch {
119-
await fs.mkdir(ConfigService.WEBDAV_SSL_CERTS_DIR);
117+
await fs.mkdir(WEBDAV_SSL_CERTS_DIR);
120118
}
121119
};
122120

123121
ensureInternxtLogsDirExists = async () => {
124122
try {
125-
await fs.access(ConfigService.INTERNXT_CLI_LOGS_DIR);
123+
await fs.access(INTERNXT_CLI_LOGS_DIR);
126124
} catch {
127-
await fs.mkdir(ConfigService.INTERNXT_CLI_LOGS_DIR);
125+
await fs.mkdir(INTERNXT_CLI_LOGS_DIR);
128126
}
129127
};
130128
}

src/utils/logger.utils.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import winston from 'winston';
2-
import { ConfigService } from '../services/config.service';
2+
import { INTERNXT_CLI_LOGS_DIR } from '../constants/configs';
33

44
const maxLogSize = 40 * 1024 * 1024;
55
const maxLogsFiles = 5;
@@ -12,14 +12,14 @@ export const logger = winston.createLogger({
1212
new winston.transports.File({
1313
filename: 'internxt-cli-error.log',
1414
level: 'error',
15-
dirname: ConfigService.INTERNXT_CLI_LOGS_DIR,
15+
dirname: INTERNXT_CLI_LOGS_DIR,
1616
maxsize: maxLogSize,
1717
maxFiles: maxLogsFiles,
1818
tailable: true,
1919
}),
2020
new winston.transports.File({
2121
filename: 'internxt-cli-combined.log',
22-
dirname: ConfigService.INTERNXT_CLI_LOGS_DIR,
22+
dirname: INTERNXT_CLI_LOGS_DIR,
2323
maxsize: maxLogSize,
2424
maxFiles: maxLogsFiles,
2525
tailable: true,
@@ -35,14 +35,14 @@ export const webdavLogger = winston.createLogger({
3535
new winston.transports.File({
3636
filename: 'internxt-webdav-error.log',
3737
level: 'error',
38-
dirname: ConfigService.INTERNXT_CLI_LOGS_DIR,
38+
dirname: INTERNXT_CLI_LOGS_DIR,
3939
maxsize: maxLogSize,
4040
maxFiles: maxLogsFiles,
4141
tailable: true,
4242
}),
4343
new winston.transports.File({
4444
filename: 'internxt-webdav-combined.log',
45-
dirname: ConfigService.INTERNXT_CLI_LOGS_DIR,
45+
dirname: INTERNXT_CLI_LOGS_DIR,
4646
maxsize: maxLogSize,
4747
maxFiles: maxLogsFiles,
4848
tailable: true,

src/utils/network.utils.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ import { readFile, stat, writeFile } from 'node:fs/promises';
44
import path from 'node:path';
55
import selfsigned from 'selfsigned';
66
import parseRange from 'range-parser';
7-
import { ConfigService } from '../services/config.service';
87
import { WebdavConfig } from '../types/command.types';
8+
import { WEBDAV_SSL_CERTS_DIR } from '../constants/configs';
99

1010
export class NetworkUtils {
1111
static getAuthFromCredentials(creds: NetworkCredentials): { username: string; password: string } {
@@ -16,8 +16,8 @@ export class NetworkUtils {
1616
}
1717

1818
static readonly WEBDAV_SSL_CERTS_PATH = {
19-
cert: path.join(ConfigService.WEBDAV_SSL_CERTS_DIR, 'cert.crt'),
20-
privateKey: path.join(ConfigService.WEBDAV_SSL_CERTS_DIR, 'priv.key'),
19+
cert: path.join(WEBDAV_SSL_CERTS_DIR, 'cert.crt'),
20+
privateKey: path.join(WEBDAV_SSL_CERTS_DIR, 'priv.key'),
2121
};
2222

2323
static async generateNewSelfsignedCerts(configs: WebdavConfig): Promise<SelfsignedCert> {

0 commit comments

Comments
 (0)