homebridge-config-ui-x
Version:
A web based management, configuration and control platform for Homebridge.
120 lines • 5.69 kB
JavaScript
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __param = (this && this.__param) || function (paramIndex, decorator) {
return function (target, key) { decorator(target, key, paramIndex); }
};
import { constants, createReadStream } from 'node:fs';
import { access, truncate } from 'node:fs/promises';
import { resolve } from 'node:path';
import { Transform } from 'node:stream';
import { BadRequestException, Inject, Injectable } from '@nestjs/common';
import { pathExists, readJson, writeJsonSync } from 'fs-extra/esm';
import { ConfigService } from '../../../core/config/config.service.js';
import { Logger } from '../../../core/logger/logger.service.js';
import { RE_ANSI_COLOUR } from '../../../core/regex.constants.js';
let HbServiceService = class HbServiceService {
configService;
logger;
hbServiceSettingsPath;
constructor(configService, logger) {
this.configService = configService;
this.logger = logger;
this.hbServiceSettingsPath = resolve(this.configService.storagePath, '.uix-hb-service-homebridge-startup.json');
}
async getHomebridgeStartupSettings() {
try {
if (await pathExists(this.hbServiceSettingsPath)) {
const settings = await readJson(this.hbServiceSettingsPath);
return {
HOMEBRIDGE_DEBUG: settings.debugMode,
HOMEBRIDGE_KEEP_ORPHANS: settings.keepOrphans,
HOMEBRIDGE_INSECURE: typeof settings.insecureMode === 'boolean' ? settings.insecureMode : this.configService.homebridgeInsecureMode,
ENV_DEBUG: settings.env.DEBUG,
ENV_NODE_OPTIONS: settings.env.NODE_OPTIONS,
};
}
else {
return {
HOMEBRIDGE_INSECURE: this.configService.homebridgeInsecureMode,
};
}
}
catch (e) {
return {};
}
}
async setHomebridgeStartupSettings(data) {
this.configService.hbServiceUiRestartRequired = true;
const settings = {
debugMode: data.HOMEBRIDGE_DEBUG,
keepOrphans: data.HOMEBRIDGE_KEEP_ORPHANS,
insecureMode: data.HOMEBRIDGE_INSECURE,
env: {
DEBUG: data.ENV_DEBUG ? data.ENV_DEBUG : undefined,
NODE_OPTIONS: data.ENV_NODE_OPTIONS ? data.ENV_NODE_OPTIONS : undefined,
},
};
return writeJsonSync(this.hbServiceSettingsPath, settings, { spaces: 4 });
}
async setFullServiceRestartFlag() {
this.configService.hbServiceUiRestartRequired = true;
return { status: 0 };
}
async downloadLogFile(shouldRemoveColour) {
if (!await pathExists(this.configService.ui.log.path)) {
this.logger.error(`Cannot download log file ${this.configService.ui.log.path} as it does not exist.`);
throw new BadRequestException('Log file not found on disk.');
}
try {
await access(this.configService.ui.log.path, constants.R_OK);
}
catch (e) {
this.logger.error(`Cannot download log file as missing read permissions on ${this.configService.ui.log.path}.`);
throw new BadRequestException('Cannot read log file. Check the log file permissions.');
}
if (!shouldRemoveColour) {
return createReadStream(this.configService.ui.log.path, { encoding: 'utf8' });
}
const removeColour = new Transform({
transform(chunk, _encoding, callback) {
callback(null, chunk.toString().replace(RE_ANSI_COLOUR, ''));
},
});
return createReadStream(this.configService.ui.log.path, { encoding: 'utf8' })
.pipe(removeColour);
}
async truncateLogFile(username) {
if (!await pathExists(this.configService.ui.log.path)) {
this.logger.error(`Cannot truncate log file ${this.configService.ui.log.path} as it does not exist.`);
throw new BadRequestException('Log file not found on disk.');
}
try {
await access(this.configService.ui.log.path, constants.R_OK | constants.W_OK);
}
catch (e) {
this.logger.error(`Cannot truncate log file as missing write permissions on ${this.configService.ui.log.path}.`);
throw new BadRequestException('Cannot access file. Check the log file permissions.');
}
await truncate(this.configService.ui.log.path);
setTimeout(() => {
this.logger.warn(`Homebridge log truncated by ${username || 'user'}.`);
}, 1000);
return { status: 0 };
}
};
HbServiceService = __decorate([
Injectable(),
__param(0, Inject(ConfigService)),
__param(1, Inject(Logger)),
__metadata("design:paramtypes", [ConfigService,
Logger])
], HbServiceService);
export { HbServiceService };
//# sourceMappingURL=hb-service.service.js.map