diff --git a/API/Controllers/ServerController.cs b/API/Controllers/ServerController.cs index 22b871529..3417d9732 100644 --- a/API/Controllers/ServerController.cs +++ b/API/Controllers/ServerController.cs @@ -124,6 +124,17 @@ public class ServerController : BaseApiController return Ok(await _statsService.GetServerInfo()); } + /// + /// Returns non-sensitive information about the current system + /// + /// This is just for the UI and is extremly lightweight + /// + [HttpGet("server-info-slim")] + public async Task> GetSlimVersion() + { + return Ok(await _statsService.GetServerInfoSlim()); + } + /// /// Triggers the scheduling of the convert media job. This will convert all media to the target encoding (except for PNG). Only one job will run at a time. diff --git a/API/DTOs/Stats/ServerInfoSlimDto.cs b/API/DTOs/Stats/ServerInfoSlimDto.cs new file mode 100644 index 000000000..e8db6a2b0 --- /dev/null +++ b/API/DTOs/Stats/ServerInfoSlimDto.cs @@ -0,0 +1,21 @@ +namespace API.DTOs.Stats; + +/// +/// This is just for the Server tab on UI +/// +public class ServerInfoSlimDto +{ + /// + /// Unique Id that represents a unique install + /// + public required string InstallId { get; set; } + /// + /// If the Kavita install is using Docker + /// + public bool IsDocker { get; set; } + /// + /// Version of Kavita + /// + public required string KavitaVersion { get; set; } + +} diff --git a/API/Services/Tasks/StatsService.cs b/API/Services/Tasks/StatsService.cs index b1d54c03a..e4f997767 100644 --- a/API/Services/Tasks/StatsService.cs +++ b/API/Services/Tasks/StatsService.cs @@ -23,6 +23,7 @@ public interface IStatsService { Task Send(); Task GetServerInfo(); + Task GetServerInfoSlim(); Task SendCancellation(); } /// @@ -171,6 +172,17 @@ public class StatsService : IStatsService return serverInfo; } + public async Task GetServerInfoSlim() + { + var serverSettings = await _unitOfWork.SettingsRepository.GetSettingsDtoAsync(); + return new ServerInfoSlimDto() + { + InstallId = serverSettings.InstallId, + KavitaVersion = serverSettings.InstallVersion, + IsDocker = OsInfo.IsDocker + }; + } + public async Task SendCancellation() { _logger.LogInformation("Informing KavitaStats that this instance is no longer sending stats"); diff --git a/Kavita.Common/HashUtil.cs b/Kavita.Common/HashUtil.cs index 989a2bfa4..4956682b3 100644 --- a/Kavita.Common/HashUtil.cs +++ b/Kavita.Common/HashUtil.cs @@ -45,28 +45,7 @@ public static class HashUtil public static string ServerToken() { - var seed = new DeviceIdBuilder() - .AddMacAddress() - .AddUserName() - .AddComponent("ProcessorCount", new DeviceIdComponent($"{Environment.ProcessorCount}")) - .AddComponent("OSPlatform", new DeviceIdComponent($"{Environment.OSVersion.Platform}")) - .OnWindows(windows => windows - .AddProcessorId()) - .OnLinux(linux => - { - var osInfo = RunAndCapture("uname", "-a"); - if (Regex.IsMatch(osInfo, @"\bUnraid\b")) - { - var cpuModel = RunAndCapture("lscpu", string.Empty); - var match = Regex.Match(cpuModel, @"Model name:\s+(.+)"); - linux.AddComponent("CPUModel", new DeviceIdComponent($"{match.Groups[1].Value.Trim()}")); - return; - } - linux.AddMotherboardSerialNumber(); - }) - .OnMac(mac => mac.AddSystemDriveSerialNumber()) - .ToString(); - return CalculateCrc(seed); + return AnonymousToken(); } /// diff --git a/UI/Web/src/app/_services/server.service.ts b/UI/Web/src/app/_services/server.service.ts index de168ee5b..543d36aad 100644 --- a/UI/Web/src/app/_services/server.service.ts +++ b/UI/Web/src/app/_services/server.service.ts @@ -1,7 +1,7 @@ import { HttpClient } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { environment } from 'src/environments/environment'; -import { ServerInfo } from '../admin/_models/server-info'; +import {ServerInfoSlim} from '../admin/_models/server-info'; import { UpdateVersionEvent } from '../_models/events/update-version-event'; import { Job } from '../_models/job/job'; import { KavitaMediaError } from '../admin/_models/media-error'; @@ -17,7 +17,7 @@ export class ServerService { getServerInfo() { - return this.httpClient.get(this.baseUrl + 'server/server-info'); + return this.httpClient.get(this.baseUrl + 'server/server-info-slim'); } clearCache() { diff --git a/UI/Web/src/app/admin/_models/server-info.ts b/UI/Web/src/app/admin/_models/server-info.ts index d13419f96..751c87534 100644 --- a/UI/Web/src/app/admin/_models/server-info.ts +++ b/UI/Web/src/app/admin/_models/server-info.ts @@ -1,9 +1,5 @@ -export interface ServerInfo { - os: string; - dotnetVersion: string; - runTimeVersion: string; +export interface ServerInfoSlim { kavitaVersion: string; - NumOfCores: number; installId: string; isDocker: boolean; -} \ No newline at end of file +} diff --git a/UI/Web/src/app/admin/manage-system/manage-system.component.ts b/UI/Web/src/app/admin/manage-system/manage-system.component.ts index 35c349fa4..dbdc87d8d 100644 --- a/UI/Web/src/app/admin/manage-system/manage-system.component.ts +++ b/UI/Web/src/app/admin/manage-system/manage-system.component.ts @@ -4,7 +4,7 @@ import { ToastrService } from 'ngx-toastr'; import { take } from 'rxjs/operators'; import { ServerService } from 'src/app/_services/server.service'; import { SettingsService } from '../settings.service'; -import { ServerInfo } from '../_models/server-info'; +import {ServerInfoSlim} from '../_models/server-info'; import { ServerSettings } from '../_models/server-settings'; import { NgIf } from '@angular/common'; @@ -19,10 +19,10 @@ export class ManageSystemComponent implements OnInit { settingsForm: FormGroup = new FormGroup({}); serverSettings!: ServerSettings; - serverInfo!: ServerInfo; + serverInfo!: ServerInfoSlim; - constructor(private settingsService: SettingsService, private toastr: ToastrService, + constructor(private settingsService: SettingsService, private toastr: ToastrService, private serverService: ServerService) { } ngOnInit(): void { diff --git a/openapi.json b/openapi.json index 60c33f9b3..03774ecff 100644 --- a/openapi.json +++ b/openapi.json @@ -7,7 +7,7 @@ "name": "GPL-3.0", "url": "https://github.com/Kareadita/Kavita/blob/develop/LICENSE" }, - "version": "0.7.4.4" + "version": "0.7.4.5" }, "servers": [ { @@ -8384,6 +8384,37 @@ } } }, + "/api/Server/server-info-slim": { + "get": { + "tags": [ + "Server" + ], + "summary": "Returns non-sensitive information about the current system", + "description": "This is just for the UI and is extremly lightweight", + "responses": { + "200": { + "description": "Success", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ServerInfoDto" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ServerInfoDto" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ServerInfoDto" + } + } + } + } + } + } + }, "/api/Server/convert-media": { "post": { "tags": [