From 9c1dc8cc4a93069c1b9c9e0e0b2b1e8bf07e90e4 Mon Sep 17 00:00:00 2001 From: Mike Date: Wed, 23 Sep 2026 15:48:40 -0700 Subject: [PATCH] feat(devices): add enterprise Download RPC page Add a Preview Feature page that builds an rpc-go package for activate or deactivate: a zip with the x64 rpc-go binary for Windows, Linux or both, plus a config.yaml pointed at Console. The version defaults to the newest v3 release (the 5 most recent are offered) and the profile to the first one; the domain is required for ACM profiles. The operator sets the server URL rpc-go uses, pre-filled from the Console API base, with a warning when it is a loopback address. Auth defaults to none, with an optional token whose lifetime is picked from a fixed list. Each field has a hint, and the page explains what the package contains and how to run it. The nav item is shown only in the enterprise (Console) build. The authorize interceptor now sends if-match only on PATCH, so a request body whose "version" is not an optimistic-lock version, like the rpc-go release here, no longer gets one. Includes the route, i18n strings for all languages, and service and component specs. Refs: device-management-toolkit/console#1144 --- cypress/e2e/fixtures/api/downloadRpc.ts | 48 ++ .../integration/download-rpc/download.spec.ts | 153 +++++++ src/app/authorize.interceptor.spec.ts | 11 +- src/app/authorize.interceptor.ts | 2 +- src/app/core/navbar/navbar.component.html | 8 + .../download-rpc/download-rpc.component.html | 133 ++++++ .../download-rpc/download-rpc.component.scss | 19 + .../download-rpc.component.spec.ts | 412 ++++++++++++++++++ .../download-rpc/download-rpc.component.ts | 269 ++++++++++++ .../download-rpc/download-rpc.constants.ts | 35 ++ .../download-rpc/download-rpc.service.spec.ts | 118 +++++ src/app/download-rpc/download-rpc.service.ts | 40 ++ src/app/routes.ts | 4 +- src/assets/i18n/ar.json | 160 +++++++ src/assets/i18n/de.json | 160 +++++++ src/assets/i18n/en.json | 160 +++++++ src/assets/i18n/es.json | 160 +++++++ src/assets/i18n/fi.json | 160 +++++++ src/assets/i18n/fr.json | 160 +++++++ src/assets/i18n/he.json | 160 +++++++ src/assets/i18n/it.json | 160 +++++++ src/assets/i18n/ja.json | 160 +++++++ src/assets/i18n/nl.json | 160 +++++++ src/assets/i18n/ru.json | 160 +++++++ src/assets/i18n/sv.json | 160 +++++++ src/models/models.ts | 32 ++ 26 files changed, 3200 insertions(+), 4 deletions(-) create mode 100644 cypress/e2e/fixtures/api/downloadRpc.ts create mode 100644 cypress/e2e/integration/download-rpc/download.spec.ts create mode 100644 src/app/download-rpc/download-rpc.component.html create mode 100644 src/app/download-rpc/download-rpc.component.scss create mode 100644 src/app/download-rpc/download-rpc.component.spec.ts create mode 100644 src/app/download-rpc/download-rpc.component.ts create mode 100644 src/app/download-rpc/download-rpc.constants.ts create mode 100644 src/app/download-rpc/download-rpc.service.spec.ts create mode 100644 src/app/download-rpc/download-rpc.service.ts diff --git a/cypress/e2e/fixtures/api/downloadRpc.ts b/cypress/e2e/fixtures/api/downloadRpc.ts new file mode 100644 index 000000000..66f3815e9 --- /dev/null +++ b/cypress/e2e/fixtures/api/downloadRpc.ts @@ -0,0 +1,48 @@ +/********************************************************************* + * Copyright (c) Intel Corporation 2022 + * SPDX-License-Identifier: Apache-2.0 + **********************************************************************/ + +const downloadRpc = { + versions: { + success: { + response: [ + { + version: 'v3.2.0', + assets: [ + { name: 'rpc_windows_x64.exe', os: 'windows', arch: 'x64' }, + { name: 'rpc_linux_x64.tar.gz', os: 'linux', arch: 'x64' } + ] + }, + { + version: 'v3.1.0', + assets: [ + { name: 'rpc_linux_x64.tar.gz', os: 'linux', arch: 'x64' }, + { name: 'rpc_windows_x86.exe', os: 'windows', arch: 'x86' } + ] + } + ] + } + }, + profiles: { + success: { + response: { + data: [ + { profileName: 'ccmProfile', activation: 'ccmactivate' }, + { profileName: 'acmProfile', activation: 'acmactivate' } + ], + totalCount: 2 + } + } + }, + domains: { + success: { + response: { + data: [{ profileName: 'corpDomain', domainSuffix: 'corp.example.com' }], + totalCount: 1 + } + } + } +} + +export { downloadRpc } diff --git a/cypress/e2e/integration/download-rpc/download.spec.ts b/cypress/e2e/integration/download-rpc/download.spec.ts new file mode 100644 index 000000000..46d4ca398 --- /dev/null +++ b/cypress/e2e/integration/download-rpc/download.spec.ts @@ -0,0 +1,153 @@ +/********************************************************************* + * Copyright (c) Intel Corporation 2022 + * SPDX-License-Identifier: Apache-2.0 + **********************************************************************/ + +import { httpCodes } from '../../fixtures/api/httpCodes' +import { downloadRpc } from '../../fixtures/api/downloadRpc' +import { RpcRelease } from '../../../../src/models/models' +import { Domain } from '../../../../src/models/models' +import { Profile } from '../../../../src/app/profiles/profiles.constants' + +// The Download RPC page only exists in the Console (enterprise) build. +const describeWhenNotCloud = Cypress.expose('CLOUD') ? describe.skip : describe + +const osLabels: Record = { windows: 'Windows', linux: 'Linux', both: 'Windows and Linux' } + +// Mirrors the page: an OS is offered only when the release has an x64 build for it. +const expectedOses = (release: RpcRelease): string[] => { + const hasBuild = (os: string): boolean => release.assets.some((a) => a.os === os && a.arch === 'x64') + return [ + 'windows', + 'linux', + 'both' + ].filter((os) => (os === 'both' ? hasBuild('windows') && hasBuild('linux') : hasBuild(os))) +} + +describeWhenNotCloud('Download RPC', () => { + let releases: RpcRelease[] + let profiles: Profile[] + let domains: Domain[] + + beforeEach('Setup and login', () => { + cy.setup() + }) + + beforeEach('Setup intercepts and open the page', () => { + cy.myIntercept('GET', /api\/package\/rpc-versions$/, { + statusCode: httpCodes.SUCCESS, + body: downloadRpc.versions.success.response + }).as('get-versions') + + cy.myIntercept('GET', /admin\/profiles\?\$count=true$/, { + statusCode: httpCodes.SUCCESS, + body: downloadRpc.profiles.success.response + }).as('get-profiles') + + cy.myIntercept('GET', /admin\/domains\?\$count=true$/, { + statusCode: httpCodes.SUCCESS, + body: downloadRpc.domains.success.response + }).as('get-domains') + + cy.myIntercept('POST', /api\/package$/, { + statusCode: httpCodes.SUCCESS, + headers: { 'content-type': 'application/zip' }, + body: 'PK' + }).as('post-package') + + cy.goToPage('Download RPC') + + cy.wait('@get-versions').then(({ response }) => { + expect(response?.statusCode).to.eq(httpCodes.SUCCESS) + releases = response?.body + expect(releases, 'rpc-go releases').to.have.length.greaterThan(0) + }) + cy.wait('@get-profiles').then(({ response }) => { + expect(response?.statusCode).to.eq(httpCodes.SUCCESS) + profiles = response?.body.data + expect(profiles, 'profiles').to.have.length.greaterThan(0) + }) + cy.wait('@get-domains').then(({ response }) => { + expect(response?.statusCode).to.eq(httpCodes.SUCCESS) + domains = response?.body.data + }) + }) + + it('shows the preview chip and defaults to the newest version and first profile', () => { + cy.get('[data-cy="previewChip"]').should('contain.text', 'Preview Feature') + cy.get('[data-cy="intro"]').should('be.visible') + cy.then(() => { + cy.matSelectAssert('[data-cy="version"]', releases[0].version) + cy.matSelectAssert('[data-cy="os"]', osLabels[expectedOses(releases[0])[0]]) + cy.matSelectAssert('[data-cy="profile"]', profiles[0].profileName) + }) + }) + + it('offers only the operating systems with an x64 build', () => { + cy.then(() => { + releases.forEach((release) => { + cy.matSelectChoose('[data-cy="version"]', release.version) + cy.get('mat-select[data-cy="os"]').click() + cy.get('mat-option').should('have.length', expectedOses(release).length) + expectedOses(release).forEach((os) => cy.get('mat-option').should('contain.text', osLabels[os])) + cy.get('body').type('{esc}') + }) + }) + }) + + it('requires a domain for an ACM profile', function () { + const acm = profiles.find((p) => p.activation === 'acmactivate') + if (acm == null) { + this.skip() + } + cy.matSelectChoose('[data-cy="profile"]', acm!.profileName) + cy.get('[data-cy="download"]').should('be.disabled') + cy.get('mat-select[data-cy="domain"]').click() + cy.get('mat-option').first().click() + cy.get('[data-cy="download"]').should('be.enabled') + }) + + it('warns when the server URL is loopback', () => { + cy.matTextlikeInputType('[data-cy="serverUrl"]', 'https://localhost:8181') + cy.get('[data-cy="serverUrlLocalWarning"]').should('be.visible') + cy.matTextlikeInputType('[data-cy="serverUrl"]', 'https://console.corp.example.com') + cy.get('[data-cy="serverUrlLocalWarning"]').should('not.exist') + }) + + it('builds a token-authenticated package for every offered operating system', () => { + cy.then(() => { + const profile = profiles[0] + const isAcm = profile.activation === 'acmactivate' + if (isAcm) { + expect(domains, 'domains for an ACM profile').to.have.length.greaterThan(0) + cy.matSelectChoose('[data-cy="domain"]', domains[0].profileName) + } + cy.matTextlikeInputType('[data-cy="serverUrl"]', 'https://console.corp.example.com') + cy.matRadioButtonChoose('[data-cy="authMode"]', 'token') + cy.get('[data-cy="noCredentialsNote"]').should('not.exist') + cy.matSelectChoose('[data-cy="tokenTtl"]', '8 hours') + + expectedOses(releases[0]).forEach((os) => { + cy.matSelectChoose('[data-cy="os"]', osLabels[os]) + cy.get('[data-cy="download"]').click() + // A live Console fetches and verifies rpc-go from GitHub before zipping. + cy.wait('@post-package', { responseTimeout: 120000 }).then(({ request, response }) => { + expect(request.body).to.deep.equal({ + command: 'activate', + version: releases[0].version, + os, + arch: 'x64', + serverUrl: 'https://console.corp.example.com', + auth: { mode: 'token' }, + tokenTtl: '8h', + profile: profile.profileName, + ...(isAcm ? { domain: domains[0].profileName } : {}) + }) + expect(response?.statusCode).to.eq(httpCodes.SUCCESS) + expect(response?.headers['content-type']).to.contain('application/zip') + }) + cy.get('[data-cy="download"]').should('be.enabled') + }) + }) + }) +}) diff --git a/src/app/authorize.interceptor.spec.ts b/src/app/authorize.interceptor.spec.ts index 64f066aa5..d7e4b78ef 100644 --- a/src/app/authorize.interceptor.spec.ts +++ b/src/app/authorize.interceptor.spec.ts @@ -45,13 +45,20 @@ describe('AuthorizeInterceptor', () => { environment.cloud = originalCloud }) - it('should add if-match header if body contains version', () => { - httpClient.post('/test', { version: '123' }).subscribe() + it('should add if-match header if a PATCH body contains version', () => { + httpClient.patch('/test', { version: '123' }).subscribe() const req = httpTestingController.expectOne('/test') expect(req.request.headers.get('if-match')).toBe('123') }) + it('should not add if-match header to a POST whose body contains version', () => { + httpClient.post('/test', { version: 'v3.0.1' }).subscribe() + + const req = httpTestingController.expectOne('/test') + expect(req.request.headers.has('if-match')).toBe(false) + }) + describe('cloud', () => { beforeEach(() => { environment.cloud = true diff --git a/src/app/authorize.interceptor.ts b/src/app/authorize.interceptor.ts index 37f6859d7..8198419a7 100644 --- a/src/app/authorize.interceptor.ts +++ b/src/app/authorize.interceptor.ts @@ -30,7 +30,7 @@ export const authorizationInterceptor: HttpInterceptorFn = (request, next) => { } } - if ((request.body as any)?.version != null && (request.body as any)?.version !== '') { + if (request.method === 'PATCH' && (request.body as any)?.version != null && (request.body as any)?.version !== '') { headers['if-match'] = (request.body as any).version } diff --git a/src/app/core/navbar/navbar.component.html b/src/app/core/navbar/navbar.component.html index d8575329a..8d58320c8 100644 --- a/src/app/core/navbar/navbar.component.html +++ b/src/app/core/navbar/navbar.component.html @@ -48,6 +48,14 @@ devices{{ 'devices.headerd.devicesTitle.value' | translate }} + + @if (cloudMode === false) { + + download{{ 'downloadRpc.title.value' | translate }} + + } + diff --git a/src/app/download-rpc/download-rpc.component.html b/src/app/download-rpc/download-rpc.component.html new file mode 100644 index 000000000..db15bac3c --- /dev/null +++ b/src/app/download-rpc/download-rpc.component.html @@ -0,0 +1,133 @@ + + + {{ 'downloadRpc.title.value' | translate }} + {{ 'downloadRpc.subtitle.value' | translate }} + + {{ 'downloadRpc.preview.value' | translate }} + + + @if (isLoading()) { + + } + +
+

{{ 'downloadRpc.intro.contents.value' | translate }}

+

{{ 'downloadRpc.intro.usage.value' | translate }}

+
+
+ + {{ 'downloadRpc.serverUrl.label.value' | translate }} + + {{ 'downloadRpc.serverUrl.hint.value' | translate }} + @if (form.get('serverUrl')?.hasError('serverUrl')) { + {{ 'downloadRpc.serverUrl.invalid.value' | translate }} + } @else { + {{ REQUIRED_ERROR_KEY | translate }} + } + + + @if (isLoopbackServerUrl()) { +
+ warning + {{ 'downloadRpc.serverUrl.localWarning.value' | translate }} +
+ } + + + {{ 'downloadRpc.command.label.value' | translate }} + + @for (c of commands; track c.value) { + {{ c.label | translate }} + } + + {{ 'downloadRpc.command.hint.value' | translate }} + {{ REQUIRED_ERROR_KEY | translate }} + + + + {{ 'downloadRpc.version.label.value' | translate }} + + @for (r of releases(); track r.version) { + {{ r.version }} + } + + {{ 'downloadRpc.version.hint.value' | translate }} + {{ REQUIRED_ERROR_KEY | translate }} + + + + {{ 'downloadRpc.os.label.value' | translate }} + + @for (os of availableOses(); track os.value) { + {{ os.label | translate }} + } + + {{ 'downloadRpc.os.hint.value' | translate }} + {{ REQUIRED_ERROR_KEY | translate }} + + + @if (form.get('command')?.value === 'activate') { + + {{ 'downloadRpc.profile.label.value' | translate }} + + @for (p of profiles(); track p.profileName) { + {{ p.profileName }} + } + + {{ 'downloadRpc.profile.hint.value' | translate }} + {{ REQUIRED_ERROR_KEY | translate }} + + + @if (isAcmSelected()) { + + {{ 'downloadRpc.domain.label.value' | translate }} + + @for (d of domains(); track d.profileName) { + {{ d.profileName }} + } + + {{ 'downloadRpc.domain.hint.value' | translate }} + {{ REQUIRED_ERROR_KEY | translate }} + + } + } + + {{ 'downloadRpc.auth.label.value' | translate }} + + @for (m of authMethods; track m.value) { + {{ m.label | translate }} + } + + + @if (form.get('authMode')?.value === 'none') { +
+ info + {{ 'downloadRpc.auth.noneNote.value' | translate }} +
+ } + + @if (form.get('authMode')?.value === 'token') { + + {{ 'downloadRpc.tokenTtl.label.value' | translate }} + + @for (l of tokenLifetimes; track l.value) { + {{ l.label | translate }} + } + + {{ 'downloadRpc.tokenTtl.hint.value' | translate }} + + } +
+
+ + + +
diff --git a/src/app/download-rpc/download-rpc.component.scss b/src/app/download-rpc/download-rpc.component.scss new file mode 100644 index 000000000..e4e1f343b --- /dev/null +++ b/src/app/download-rpc/download-rpc.component.scss @@ -0,0 +1,19 @@ +.preview-chip { + margin-left: auto; +} + +.server-url-warning, +.auth-note { + display: flex; + align-items: center; + gap: 8px; + margin-bottom: 10px; + + mat-icon { + flex: none; + } +} + +mat-form-field { + margin: 12px 0; +} diff --git a/src/app/download-rpc/download-rpc.component.spec.ts b/src/app/download-rpc/download-rpc.component.spec.ts new file mode 100644 index 000000000..f58e229d3 --- /dev/null +++ b/src/app/download-rpc/download-rpc.component.spec.ts @@ -0,0 +1,412 @@ +/********************************************************************* + * Copyright (c) Intel Corporation 2026 + * SPDX-License-Identifier: Apache-2.0 + **********************************************************************/ + +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' +import { createSpyObj, type SpyObj } from '../../test-helpers' +import { ComponentFixture, TestBed } from '@angular/core/testing' +import { of, throwError } from 'rxjs' +import { provideTranslateService } from '@ngx-translate/core' +import { provideHttpClient } from '@angular/common/http' +import { provideHttpClientTesting } from '@angular/common/http/testing' +import { MatSnackBar } from '@angular/material/snack-bar' +import { DownloadRpcComponent } from './download-rpc.component' +import { DownloadRpcService } from './download-rpc.service' +import { ProfilesService } from '../profiles/profiles.service' +import { DomainsService } from '../domains/domains.service' +import { RpcRelease } from '../../models/models' +import { ACM_ACTIVATION } from '../profiles/profiles.constants' +import { environment } from '../../environments/environment' + +describe('DownloadRpcComponent', () => { + let component: DownloadRpcComponent + let fixture: ComponentFixture + let downloadServiceSpy: SpyObj + let profilesServiceSpy: SpyObj + let domainsServiceSpy: SpyObj + let snackBarSpy: SpyObj + let originalRpsServer: string + + const releases: RpcRelease[] = [ + { + version: 'v3.0.1', + assets: [ + { os: 'linux', arch: 'x64' }, + { os: 'linux', arch: 'x86' }, + { os: 'windows', arch: 'x64' } + ] + } + ] + + beforeEach(() => { + // Other specs share this environment object and do not always restore it. + originalRpsServer = environment.rpsServer + environment.rpsServer = 'https://console.example:8181' + downloadServiceSpy = createSpyObj('DownloadRpcService', ['getVersions', 'buildPackage']) + profilesServiceSpy = createSpyObj('ProfilesService', ['getData']) + domainsServiceSpy = createSpyObj('DomainsService', ['getData']) + snackBarSpy = createSpyObj('MatSnackBar', ['open']) + downloadServiceSpy.getVersions.mockReturnValue(of(releases)) + downloadServiceSpy.buildPackage.mockReturnValue(of(new Blob(['zip'], { type: 'application/zip' }))) + profilesServiceSpy.getData.mockReturnValue( + of({ + data: [ + { profileName: 'acmProfile', activation: ACM_ACTIVATION } as any, + { profileName: 'ccmProfile', activation: 'ccmactivate' } as any + ], + totalCount: 2 + }) + ) + domainsServiceSpy.getData.mockReturnValue( + of({ data: [{ profileName: 'dom1', domainSuffix: 'd.com' } as any], totalCount: 1 }) + ) + + TestBed.configureTestingModule({ + imports: [DownloadRpcComponent], + providers: [ + provideTranslateService(), + { provide: DownloadRpcService, useValue: downloadServiceSpy }, + { provide: ProfilesService, useValue: profilesServiceSpy }, + { provide: DomainsService, useValue: domainsServiceSpy }, + { provide: MatSnackBar, useValue: snackBarSpy }, + provideHttpClient(), + provideHttpClientTesting() + ] + }) + fixture = TestBed.createComponent(DownloadRpcComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + afterEach(() => { + environment.rpsServer = originalRpsServer + }) + + it('should create and load versions, profiles, domains', () => { + expect(component).toBeTruthy() + expect(downloadServiceSpy.getVersions).toHaveBeenCalled() + expect(profilesServiceSpy.getData).toHaveBeenCalled() + expect(domainsServiceSpy.getData).toHaveBeenCalled() + expect(component.releases().length).toBe(1) + }) + + it('defaults command to activate and auth to no credentials', () => { + expect(component.form.get('command')?.value).toBe('activate') + expect(component.form.get('authMode')?.value).toBe('none') + }) + + it('offers only no-credentials and token auth, no-credentials first', () => { + expect(component.authMethods.map((m) => m.value)).toEqual(['none', 'token']) + }) + + it('defaults the token lifetime to one hour', () => { + expect(component.form.get('tokenTtl')?.value).toBe('1h') + }) + + it('sends the chosen token lifetime for token auth', () => { + vi.spyOn(component as any, 'saveBlob').mockImplementation(() => undefined) + component.form.get('authMode')?.setValue('token') + component.form.get('tokenTtl')?.setValue('15m') + component.form.get('profile')?.setValue('ccmProfile') + component.form.get('version')?.setValue('v3.0.1') + component.form.get('os')?.setValue('linux') + component.onProfileOrCommandChange() + component.onSubmit() + + expect(downloadServiceSpy.buildPackage).toHaveBeenCalledWith(expect.objectContaining({ tokenTtl: '15m' })) + }) + + it('sends mode none with no credentials and no token lifetime by default', () => { + vi.spyOn(component as any, 'saveBlob').mockImplementation(() => undefined) + component.form.patchValue({ + version: 'v3.0.1', + os: 'linux', + profile: 'ccmProfile' + }) + component.onProfileOrCommandChange() + component.onSubmit() + + const sent = downloadServiceSpy.buildPackage.mock.calls[0][0] + expect(sent.auth).toEqual({ mode: 'none' }) + expect(sent.tokenTtl).toBeUndefined() + }) + + it('shows the no-credentials note only when no credentials are selected', () => { + fixture.detectChanges() + expect(fixture.nativeElement.querySelector('[data-cy="noCredentialsNote"]')).toBeTruthy() + expect(fixture.nativeElement.querySelector('[data-cy="tokenTtl"]')).toBeNull() + + component.form.get('authMode')?.setValue('token') + fixture.detectChanges() + expect(fixture.nativeElement.querySelector('[data-cy="noCredentialsNote"]')).toBeNull() + expect(fixture.nativeElement.querySelector('[data-cy="tokenTtl"]')).toBeTruthy() + }) + + it('renders no username or password fields', () => { + fixture.detectChanges() + expect(fixture.nativeElement.querySelector('[data-cy="username"]')).toBeNull() + expect(fixture.nativeElement.querySelector('[data-cy="password"]')).toBeNull() + expect(component.form.get('username')).toBeNull() + expect(component.form.get('password')).toBeNull() + }) + + it('marks the page as a preview feature', () => { + fixture.detectChanges() + expect(fixture.nativeElement.querySelector('[data-cy="previewChip"]')?.textContent).toContain( + 'downloadRpc.preview.value' + ) + }) + + it('explains what the package is and how to run it', () => { + fixture.detectChanges() + const text = fixture.nativeElement.querySelector('[data-cy="intro"]')?.textContent + expect(text).toContain('downloadRpc.intro.contents.value') + expect(text).toContain('downloadRpc.intro.usage.value') + expect(fixture.nativeElement.querySelector('mat-card-subtitle')?.textContent).toContain( + 'downloadRpc.subtitle.value' + ) + }) + + it('pre-fills serverUrl with the API base the UI talks to', () => { + expect(component.form.get('serverUrl')?.value).toBe('https://console.example:8181') + }) + + it('rejects a serverUrl that is not an absolute http(s) URL', () => { + const control = component.form.get('serverUrl') + control?.setValue('console.example:8181') + expect(control?.hasError('serverUrl')).toBe(true) + control?.setValue('') + expect(control?.hasError('required')).toBe(true) + control?.setValue('https://console.example:8181') + expect(control?.valid).toBe(true) + }) + + it('flags loopback server URLs and accepts reachable ones', () => { + const control = component.form.get('serverUrl') + for (const local of [ + 'http://localhost:8181', + 'https://127.0.0.1', + 'http://0.0.0.0:8181' + ]) { + control?.setValue(local) + expect(component.isLoopbackServerUrl()).toBe(true) + } + control?.setValue('https://console.example:8181') + expect(component.isLoopbackServerUrl()).toBe(false) + control?.setValue('not a url') + expect(component.isLoopbackServerUrl()).toBe(false) + }) + + it('renders the loopback warning only while the URL is local', () => { + component.form.get('serverUrl')?.setValue('http://localhost:8181') + fixture.detectChanges() + expect(fixture.nativeElement.querySelector('[data-cy="serverUrlLocalWarning"]')).toBeTruthy() + + component.form.get('serverUrl')?.setValue('https://console.example:8181') + fixture.detectChanges() + expect(fixture.nativeElement.querySelector('[data-cy="serverUrlLocalWarning"]')).toBeNull() + }) + + it('does not submit when serverUrl is invalid', () => { + component.form.get('serverUrl')?.setValue('not a url') + component.onSubmit() + expect(downloadServiceSpy.buildPackage).not.toHaveBeenCalled() + }) + + it('requires domain only when activate + ACM profile selected', () => { + component.form.get('command')?.setValue('activate') + component.form.get('profile')?.setValue('ccmProfile') + component.onProfileOrCommandChange() + expect(component.isAcmSelected()).toBe(false) + expect(component.form.get('domain')?.hasError('required')).toBe(false) + + component.form.get('profile')?.setValue('acmProfile') + component.onProfileOrCommandChange() + expect(component.isAcmSelected()).toBe(true) + expect(component.form.get('domain')?.hasError('required')).toBe(true) + }) + + it('clears profile/domain requirements for deactivate', () => { + component.form.get('command')?.setValue('deactivate') + component.onProfileOrCommandChange() + expect(component.form.get('profile')?.hasError('required')).toBe(false) + expect(component.form.get('domain')?.hasError('required')).toBe(false) + }) + + it('defaults the version and profile to the first ones loaded', () => { + expect(component.form.get('version')?.value).toBe('v3.0.1') + expect(component.form.get('os')?.value).toBe('windows') + expect(component.form.get('profile')?.value).toBe('acmProfile') + expect(component.isAcmSelected()).toBe(true) + }) + + it('offers only OSes with an x64 build, Windows first, and both when each has one', () => { + component.releases.set([ + { + version: 'v3.0.2', + assets: [ + { os: 'linux', arch: 'x86' }, + { os: 'windows', arch: 'x64' } + ] + } + ]) + component.form.get('version')?.setValue('v3.0.2') + component.onVersionChange() + expect(component.availableOses().map((o) => o.value)).toEqual(['windows']) + + component.form.get('version')?.setValue('v3.0.1') + component.releases.set(releases) + component.onVersionChange() + expect(component.availableOses().map((o) => o.value)).toEqual([ + 'windows', + 'linux', + 'both' + ]) + }) + + it('sends os both when Windows and Linux are chosen', () => { + vi.spyOn(component as any, 'saveBlob').mockImplementation(() => undefined) + component.form.patchValue({ os: 'both', profile: 'ccmProfile' }) + component.onProfileOrCommandChange() + component.onSubmit() + expect(downloadServiceSpy.buildPackage).toHaveBeenCalledWith(expect.objectContaining({ os: 'both', arch: 'x64' })) + }) + + it('renders no architecture field', () => { + fixture.detectChanges() + expect(fixture.nativeElement.querySelector('[data-cy="arch"]')).toBeNull() + expect(component.form.get('arch')).toBeNull() + }) + + it('onSubmit posts a token activate request and triggers a download', () => { + const clickSpy = vi.spyOn(HTMLAnchorElement.prototype, 'click').mockImplementation(() => undefined) + vi.spyOn(window.URL, 'createObjectURL').mockReturnValue('blob:url') + vi.spyOn(window.URL, 'revokeObjectURL').mockImplementation(() => undefined) + + component.form.setValue({ + command: 'activate', + serverUrl: 'http://console.example:8181', + tokenTtl: '1h', + version: 'v3.0.1', + os: 'linux', + authMode: 'token', + profile: 'ccmProfile', + domain: '' + }) + component.onProfileOrCommandChange() + component.onSubmit() + + expect(downloadServiceSpy.buildPackage).toHaveBeenCalledWith({ + command: 'activate', + serverUrl: 'http://console.example:8181', + tokenTtl: '1h', + version: 'v3.0.1', + os: 'linux', + arch: 'x64', + auth: { mode: 'token' }, + profile: 'ccmProfile' + }) + expect(clickSpy).toHaveBeenCalled() + expect(window.URL.revokeObjectURL).toHaveBeenCalledWith('blob:url') + }) + + it('onSubmit includes domain for ACM and no credentials for mode none', () => { + vi.spyOn(component as any, 'saveBlob').mockImplementation(() => undefined) + component.form.setValue({ + command: 'activate', + serverUrl: 'http://console.example:8181', + tokenTtl: '1h', + version: 'v3.0.1', + os: 'linux', + authMode: 'none', + profile: 'acmProfile', + domain: 'dom1' + }) + component.onProfileOrCommandChange() + component.onSubmit() + + expect(downloadServiceSpy.buildPackage).toHaveBeenCalledWith({ + command: 'activate', + serverUrl: 'http://console.example:8181', + version: 'v3.0.1', + os: 'linux', + arch: 'x64', + auth: { mode: 'none' }, + profile: 'acmProfile', + domain: 'dom1' + }) + }) + + it('does not submit an invalid form', () => { + component.form.get('version')?.setValue('') + component.form.get('command')?.setValue('activate') + component.onProfileOrCommandChange() + component.onSubmit() + expect(downloadServiceSpy.buildPackage).not.toHaveBeenCalled() + }) + + it('deactivate submit omits profile and domain from request', () => { + vi.spyOn(component as any, 'saveBlob').mockImplementation(() => undefined) + component.form.setValue({ + command: 'deactivate', + serverUrl: 'http://console.example:8181', + tokenTtl: '1h', + version: 'v3.0.1', + os: 'linux', + authMode: 'token', + profile: '', + domain: '' + }) + component.onProfileOrCommandChange() + component.onSubmit() + + expect(downloadServiceSpy.buildPackage).toHaveBeenCalledWith({ + command: 'deactivate', + serverUrl: 'http://console.example:8181', + tokenTtl: '1h', + version: 'v3.0.1', + os: 'linux', + arch: 'x64', + auth: { mode: 'token' } + }) + }) + + it('trims surrounding whitespace from serverUrl before posting', () => { + vi.spyOn(component as any, 'saveBlob').mockImplementation(() => undefined) + component.form.setValue({ + serverUrl: ' https://console.example:8181 ', + command: 'deactivate', + tokenTtl: '1h', + version: 'v3.0.1', + os: 'linux', + authMode: 'token', + profile: '', + domain: '' + }) + component.onProfileOrCommandChange() + component.onSubmit() + + expect(downloadServiceSpy.buildPackage).toHaveBeenCalledWith( + expect.objectContaining({ serverUrl: 'https://console.example:8181' }) + ) + }) + + it('shows an error when buildPackage fails', () => { + downloadServiceSpy.buildPackage.mockReturnValue(throwError(() => ['fail'])) + snackBarSpy.open.mockClear() + component.form.setValue({ + command: 'deactivate', + serverUrl: 'http://console.example:8181', + tokenTtl: '1h', + version: 'v3.0.1', + os: 'linux', + authMode: 'token', + profile: '', + domain: '' + }) + component.onProfileOrCommandChange() + component.onSubmit() + expect(snackBarSpy.open).toHaveBeenCalled() + }) +}) diff --git a/src/app/download-rpc/download-rpc.component.ts b/src/app/download-rpc/download-rpc.component.ts new file mode 100644 index 000000000..fc663f2cb --- /dev/null +++ b/src/app/download-rpc/download-rpc.component.ts @@ -0,0 +1,269 @@ +/********************************************************************* + * Copyright (c) Intel Corporation 2026 + * SPDX-License-Identifier: Apache-2.0 + **********************************************************************/ + +import { Component, OnInit, computed, inject, signal } from '@angular/core' +import { toSignal } from '@angular/core/rxjs-interop' +import { + AbstractControl, + FormBuilder, + FormGroup, + ValidationErrors, + ValidatorFn, + Validators, + ReactiveFormsModule +} from '@angular/forms' +import { MatButton } from '@angular/material/button' +import { + MatCard, + MatCardActions, + MatCardContent, + MatCardHeader, + MatCardSubtitle, + MatCardTitle +} from '@angular/material/card' +import { MatFormField, MatLabel, MatError, MatHint, MAT_FORM_FIELD_DEFAULT_OPTIONS } from '@angular/material/form-field' +import { MatInput } from '@angular/material/input' +import { MatSelect } from '@angular/material/select' +import { MatOption } from '@angular/material/core' +import { MatRadioButton, MatRadioGroup } from '@angular/material/radio' +import { MatChip } from '@angular/material/chips' +import { MatIcon } from '@angular/material/icon' +import { MatProgressBar } from '@angular/material/progress-bar' +import { MatSnackBar } from '@angular/material/snack-bar' +import { TranslatePipe, TranslateService } from '@ngx-translate/core' +import { finalize } from 'rxjs/operators' +import { ProfilesService } from '../profiles/profiles.service' +import { DomainsService } from '../domains/domains.service' +import { Profile, ACM_ACTIVATION } from '../profiles/profiles.constants' +import { Domain, FormOption, PackageRequest, RpcAuthMode, RpcCommand, RpcRelease } from '../../models/models' +import { environment } from '../../environments/environment' +import SnackbarDefaults from '../shared/config/snackBarDefault' +import { DownloadRpcService } from './download-rpc.service' +import { AuthModes, OsOptions, RpcArch, RpcCommands, TokenLifetimes } from './download-rpc.constants' + +@Component({ + selector: 'app-download-rpc', + templateUrl: './download-rpc.component.html', + styleUrl: './download-rpc.component.scss', + imports: [ + ReactiveFormsModule, + MatCard, + MatCardActions, + MatCardHeader, + MatCardTitle, + MatCardSubtitle, + MatCardContent, + MatFormField, + MatLabel, + MatError, + MatHint, + MatInput, + MatSelect, + MatOption, + MatRadioGroup, + MatRadioButton, + MatButton, + MatChip, + MatIcon, + MatProgressBar, + TranslatePipe + ], + providers: [{ provide: MAT_FORM_FIELD_DEFAULT_OPTIONS, useValue: { subscriptSizing: 'dynamic' } }] +}) +export class DownloadRpcComponent implements OnInit { + private readonly fb = inject(FormBuilder) + private readonly downloadService = inject(DownloadRpcService) + private readonly profilesService = inject(ProfilesService) + private readonly domainsService = inject(DomainsService) + private readonly snackBar = inject(MatSnackBar) + private readonly translate = inject(TranslateService) + + public readonly commands = RpcCommands + public readonly authMethods = AuthModes + public readonly tokenLifetimes = TokenLifetimes + public readonly REQUIRED_ERROR_KEY = 'fieldRequired.short.value' + + public releases = signal([]) + public profiles = signal([]) + public domains = signal([]) + public availableOses = signal[]>([]) + public isAcmSelected = signal(false) + public isLoading = signal(false) + + public form: FormGroup = this.fb.group({ + serverUrl: [this.defaultServerUrl(), [Validators.required, this.serverUrlValidator()]], + command: ['activate' as RpcCommand, Validators.required], + version: ['', Validators.required], + os: ['', Validators.required], + authMode: ['none' as RpcAuthMode, Validators.required], + tokenTtl: ['1h', Validators.required], + profile: [''], + domain: [''] + }) + + private readonly serverUrl = toSignal(this.form.controls['serverUrl'].valueChanges, { + initialValue: this.form.controls['serverUrl'].value + }) + + // rpc-go runs on the AMT device, so a loopback server URL only works when Console shares that machine. + public isLoopbackServerUrl = computed(() => { + let host: string + try { + host = new URL(String(this.serverUrl() ?? '').trim()).hostname.toLowerCase() + } catch { + return false + } + return host === 'localhost' || host.endsWith('.localhost') || host === '0.0.0.0' || host.startsWith('127.') + }) + + ngOnInit(): void { + this.downloadService.getVersions().subscribe({ + next: (releases) => { + this.releases.set(releases) + this.form.get('version')?.setValue(releases[0]?.version ?? '') + this.onVersionChange() + }, + error: () => this.showError('downloadRpc.failVersions.value') + }) + this.profilesService.getData().subscribe({ + next: (res) => { + this.profiles.set(res.data) + this.form.get('profile')?.setValue(res.data[0]?.profileName ?? '') + this.onProfileOrCommandChange() + }, + error: () => this.showError('downloadRpc.failProfiles.value') + }) + this.domainsService.getData().subscribe({ + next: (res) => { + this.domains.set(res.data) + }, + error: () => this.showError('downloadRpc.failDomains.value') + }) + this.onProfileOrCommandChange() + } + + onVersionChange(): void { + const version = this.form.get('version')?.value + const assets = this.releases().find((r) => r.version === version)?.assets ?? [] + const hasBuild = (os: string): boolean => assets.some((a) => a.os === os && a.arch === RpcArch) + const oses = OsOptions.filter((o) => + o.value === 'both' ? hasBuild('windows') && hasBuild('linux') : hasBuild(o.value) + ) + this.availableOses.set(oses) + this.form.get('os')?.setValue(oses[0]?.value ?? '') + } + + onProfileOrCommandChange(): void { + const isActivate = this.form.get('command')?.value === 'activate' + const profileCtrl = this.form.get('profile') + const domainCtrl = this.form.get('domain') + + if (isActivate) { + profileCtrl?.setValidators([Validators.required]) + } else { + profileCtrl?.clearValidators() + } + + this.isAcmSelected.set(this.isAcmProfile()) + + if (this.isAcmSelected()) { + domainCtrl?.setValidators([Validators.required]) + } else { + domainCtrl?.clearValidators() + } + profileCtrl?.updateValueAndValidity() + domainCtrl?.updateValueAndValidity() + } + + onSubmit(): void { + if (this.form.invalid || this.isLoading()) { + return + } + const v = this.form.value + const request: PackageRequest = { + command: v.command, + version: v.version, + os: v.os, + arch: RpcArch, + serverUrl: String(v.serverUrl).trim(), + auth: { mode: v.authMode } + } + if (v.authMode === 'token') { + request.tokenTtl = v.tokenTtl + } + if (v.command === 'activate') { + request.profile = v.profile + if (this.isAcmProfile()) { + request.domain = v.domain + } + } + + this.isLoading.set(true) + this.downloadService + .buildPackage(request) + .pipe(finalize(() => this.isLoading.set(false))) + .subscribe({ + next: (blob) => { + this.saveBlob(blob, `rpc-${request.command}-${request.os}.zip`) + this.snackBar.open( + this.translate.instant('downloadRpc.success.value'), + undefined, + SnackbarDefaults.defaultSuccess + ) + }, + error: () => this.showError('downloadRpc.failPackage.value') + }) + } + + private isAcmProfile(): boolean { + const isActivate = this.form.get('command')?.value === 'activate' + const selected = this.profiles().find((p) => p.profileName === this.form.get('profile')?.value) + return isActivate && selected?.activation === ACM_ACTIVATION + } + + // Empty values pass so that Validators.required owns the empty case. + private serverUrlValidator(): ValidatorFn { + return (control: AbstractControl): ValidationErrors | null => { + const value = String(control.value ?? '').trim() + if (value === '') { + return null + } + let parsed: URL + try { + parsed = new URL(value) + } catch { + return { serverUrl: true } + } + return parsed.protocol === 'http:' || parsed.protocol === 'https:' ? null : { serverUrl: true } + } + } + + // Pre-fills the server URL with the Console API base the UI itself talks to. + private defaultServerUrl(): string { + const configured = (environment.rpsServer ?? '').trim() + if (configured === '') { + return window.location.origin + } + try { + const url = new URL(configured, window.location.origin) + return `${url.origin}${url.pathname}`.replace(/\/+$/, '') + } catch { + return window.location.origin + } + } + + private saveBlob(blob: Blob, filename: string): void { + const url = window.URL.createObjectURL(blob) + const a = document.createElement('a') + a.href = url + a.download = filename + a.click() + window.URL.revokeObjectURL(url) + } + + private showError(key: string): void { + this.snackBar.open(this.translate.instant(key), undefined, SnackbarDefaults.defaultError) + } +} diff --git a/src/app/download-rpc/download-rpc.constants.ts b/src/app/download-rpc/download-rpc.constants.ts new file mode 100644 index 000000000..d4f41df20 --- /dev/null +++ b/src/app/download-rpc/download-rpc.constants.ts @@ -0,0 +1,35 @@ +/********************************************************************* + * Copyright (c) Intel Corporation 2026 + * SPDX-License-Identifier: Apache-2.0 + **********************************************************************/ + +import { FormOption, RpcAuthMode, RpcCommand } from '../../models/models' + +export const RpcCommands: FormOption[] = [ + { value: 'activate', label: 'downloadRpc.command.activate.value' }, + { value: 'deactivate', label: 'downloadRpc.command.deactivate.value' } +] + +// 'none' leaves the package without credentials; the operator supplies them on the device. +export const AuthModes: FormOption[] = [ + { value: 'none', label: 'downloadRpc.auth.none.value' }, + { value: 'token', label: 'downloadRpc.auth.token.value' } +] + +// Console rejects lifetimes above its package.max_token_ttl. +export const TokenLifetimes: FormOption[] = [ + { value: '15m', label: 'downloadRpc.tokenTtl.15m.value' }, + { value: '1h', label: 'downloadRpc.tokenTtl.1h.value' }, + { value: '8h', label: 'downloadRpc.tokenTtl.8h.value' }, + { value: '24h', label: 'downloadRpc.tokenTtl.24h.value' } +] + +// Offered in this order; the first one available in a release is pre-selected. +export const OsOptions: FormOption[] = [ + { value: 'windows', label: 'downloadRpc.os.windows.value' }, + { value: 'linux', label: 'downloadRpc.os.linux.value' }, + { value: 'both', label: 'downloadRpc.os.both.value' } +] + +// Only x64 rpc-go builds are packaged. +export const RpcArch = 'x64' diff --git a/src/app/download-rpc/download-rpc.service.spec.ts b/src/app/download-rpc/download-rpc.service.spec.ts new file mode 100644 index 000000000..adae706e9 --- /dev/null +++ b/src/app/download-rpc/download-rpc.service.spec.ts @@ -0,0 +1,118 @@ +/********************************************************************* + * Copyright (c) Intel Corporation 2026 + * SPDX-License-Identifier: Apache-2.0 + **********************************************************************/ + +import { afterEach, beforeEach, describe, expect, it } from 'vitest' +import { createSpyObj, type SpyObj } from '../../test-helpers' +import { TestBed } from '@angular/core/testing' +import { HttpTestingController, provideHttpClientTesting } from '@angular/common/http/testing' +import { provideHttpClient } from '@angular/common/http' +import { provideTranslateService } from '@ngx-translate/core' +import { DownloadRpcService } from './download-rpc.service' +import { AuthService } from '../auth.service' +import { environment } from '../../environments/environment' +import { PackageRequest, RpcRelease } from '../../models/models' + +describe('DownloadRpcService', () => { + let service: DownloadRpcService + let httpMock: HttpTestingController + let authServiceSpy: SpyObj + + const mockEnvironment = { rpsServer: 'https://test-server' } + const mockUrl = `${mockEnvironment.rpsServer}/api/package` + + beforeEach(() => { + authServiceSpy = createSpyObj('AuthService', ['onError']) + environment.rpsServer = mockEnvironment.rpsServer + TestBed.configureTestingModule({ + providers: [ + provideTranslateService(), + DownloadRpcService, + { provide: AuthService, useValue: authServiceSpy }, + provideHttpClient(), + provideHttpClientTesting() + ] + }) + service = TestBed.inject(DownloadRpcService) + httpMock = TestBed.inject(HttpTestingController) + }) + + afterEach(() => { + httpMock.verify() + }) + + it('should be created', () => { + expect(service).toBeTruthy() + }) + + describe('getVersions', () => { + it('should GET the rpc-versions endpoint', () => { + const mockReleases: RpcRelease[] = [ + { version: 'v3.0.1', assets: [{ os: 'linux', arch: 'x64' }] } + ] + service.getVersions().subscribe((res) => { + expect(res).toEqual(mockReleases) + }) + const req = httpMock.expectOne(`${mockUrl}/rpc-versions`) + expect(req.request.method).toBe('GET') + req.flush(mockReleases) + }) + + it('should route errors through AuthService.onError', () => { + authServiceSpy.onError.mockReturnValue(['boom']) + service.getVersions().subscribe({ + error: (err) => { + expect(err).toEqual(['boom']) + } + }) + const req = httpMock.expectOne(`${mockUrl}/rpc-versions`) + req.flush('error', { status: 500, statusText: 'Server Error' }) + expect(authServiceSpy.onError).toHaveBeenCalled() + }) + }) + + describe('buildPackage', () => { + it('should POST the request and return a blob', () => { + const body: PackageRequest = { + serverUrl: 'http://console.example:8181', + command: 'activate', + version: 'v3.0.1', + os: 'linux', + arch: 'x64', + auth: { mode: 'token' }, + profile: 'p1' + } + const blob = new Blob(['zip'], { type: 'application/zip' }) + service.buildPackage(body).subscribe((res) => { + expect(res).toEqual(blob) + }) + const req = httpMock.expectOne(mockUrl) + expect(req.request.method).toBe('POST') + expect(req.request.body).toEqual(body) + expect(req.request.responseType).toBe('blob') + req.flush(blob) + }) + + it('should route errors through AuthService.onError', () => { + authServiceSpy.onError.mockReturnValue(['boom']) + const body: PackageRequest = { + serverUrl: 'http://console.example:8181', + command: 'activate', + version: 'v3.0.1', + os: 'linux', + arch: 'x64', + auth: { mode: 'token' }, + profile: 'p1' + } + service.buildPackage(body).subscribe({ + error: (err) => { + expect(err).toEqual(['boom']) + } + }) + const req = httpMock.expectOne(mockUrl) + req.flush(new Blob(['error'], { type: 'application/json' }), { status: 500, statusText: 'Server Error' }) + expect(authServiceSpy.onError).toHaveBeenCalled() + }) + }) +}) diff --git a/src/app/download-rpc/download-rpc.service.ts b/src/app/download-rpc/download-rpc.service.ts new file mode 100644 index 000000000..be6e72379 --- /dev/null +++ b/src/app/download-rpc/download-rpc.service.ts @@ -0,0 +1,40 @@ +/********************************************************************* + * Copyright (c) Intel Corporation 2026 + * SPDX-License-Identifier: Apache-2.0 + **********************************************************************/ + +import { HttpClient } from '@angular/common/http' +import { Injectable, inject } from '@angular/core' +import { Observable, throwError } from 'rxjs' +import { catchError } from 'rxjs/operators' +import { environment } from '../../environments/environment' +import { AuthService } from '../auth.service' +import { PackageRequest, RpcRelease } from '../../models/models' + +@Injectable({ + providedIn: 'root' +}) +export class DownloadRpcService { + private readonly authService = inject(AuthService) + private readonly http = inject(HttpClient) + + private readonly url = `${environment.rpsServer}/api/package` + + getVersions(): Observable { + return this.http.get(`${this.url}/rpc-versions`).pipe( + catchError((err) => { + const errorMessages = this.authService.onError(err) + return throwError(errorMessages) + }) + ) + } + + buildPackage(request: PackageRequest): Observable { + return this.http.post(this.url, request, { responseType: 'blob' }).pipe( + catchError((err) => { + const errorMessages = this.authService.onError(err) + return throwError(errorMessages) + }) + ) + } +} diff --git a/src/app/routes.ts b/src/app/routes.ts index 767b42d3c..02d552649 100644 --- a/src/app/routes.ts +++ b/src/app/routes.ts @@ -20,6 +20,7 @@ import { WirelessComponent } from './wireless/wireless.component' import { IEEE8021xComponent } from './ieee8021x/ieee8021x.component' import { IEEE8021xDetailComponent } from './ieee8021x/ieee8021x-detail/ieee8021x-detail.component' import { DashboardComponent } from './dashboard/dashboard.component' +import { DownloadRpcComponent } from './download-rpc/download-rpc.component' import { LoginComponent } from './login/login.component' import { AuthGuard } from './shared/auth-guard.service' @@ -94,5 +95,6 @@ export const routes: Routes = [ ], canActivate: [AuthGuard] }, - { path: 'proxy-configs/:name', component: ProxyConfigDetailComponent, canActivate: [AuthGuard] } + { path: 'proxy-configs/:name', component: ProxyConfigDetailComponent, canActivate: [AuthGuard] }, + { path: 'download-rpc', component: DownloadRpcComponent, canActivate: [AuthGuard] } ] diff --git a/src/assets/i18n/ar.json b/src/assets/i18n/ar.json index de08542c7..5b2676320 100644 --- a/src/assets/i18n/ar.json +++ b/src/assets/i18n/ar.json @@ -3270,5 +3270,165 @@ "remotePlatformErase.capUnsupported": { "description": "تسمية تظهر في صف القدرة عندما لا يدعمها الجهاز", "value": "غير مدعوم على هذا الجهاز" + }, + "downloadRpc.title": { + "description": "عنوان صفحة تنزيل RPC", + "value": "تنزيل RPC" + }, + "downloadRpc.preview": { + "description": "شارة تشير إلى أن تنزيل RPC ميزة معاينة", + "value": "ميزة معاينة" + }, + "downloadRpc.serverUrl.label": { + "description": "تسمية حقل عنوان URL لخادم Console", + "value": "عنوان URL للخادم" + }, + "downloadRpc.serverUrl.hint": { + "description": "تلميح حقل عنوان URL لخادم Console", + "value": "عنوان URL الأساسي الذي سيصل به الجهاز إلى Console، مثل https://console.example.com:8181" + }, + "downloadRpc.serverUrl.invalid": { + "description": "خطأ التحقق من عنوان URL لخادم Console", + "value": "أدخل عنوان URL مطلقًا يبدأ بـ http:// أو https://" + }, + "downloadRpc.serverUrl.localWarning": { + "description": "تحذير عندما يشير عنوان URL للخادم إلى الاسترجاع المحلي", + "value": "يشير هذا العنوان إلى الجهاز الذي يعمل عليه هذا المتصفح. يعمل rpc-go على جهاز AMT، لذا لن يصل إلى Console إلا إذا كانا الجهاز نفسه، وهو أمر غير مستحسن. استخدم اسم المضيف أو عنوان IP الذي يمكن للجهاز الوصول إليه." + }, + "downloadRpc.tokenTtl.label": { + "description": "تسمية محدد مدة صلاحية الرمز المميز", + "value": "مدة صلاحية الرمز المميز" + }, + "downloadRpc.tokenTtl.hint": { + "description": "تلميح محدد مدة صلاحية الرمز المميز", + "value": "المدة التي يظل فيها الرمز المميز الذي تم إنشاؤه صالحًا. المدة الأقصر أكثر أمانًا؛ تتوقف الحزمة عن العمل بمجرد انتهاء صلاحيته." + }, + "downloadRpc.tokenTtl.15m": { + "description": "خيار مدة صلاحية الرمز المميز: 15 دقيقة", + "value": "15 دقيقة" + }, + "downloadRpc.tokenTtl.1h": { + "description": "خيار مدة صلاحية الرمز المميز: ساعة واحدة", + "value": "ساعة واحدة" + }, + "downloadRpc.tokenTtl.8h": { + "description": "خيار مدة صلاحية الرمز المميز: 8 ساعات", + "value": "8 ساعات" + }, + "downloadRpc.tokenTtl.24h": { + "description": "خيار مدة صلاحية الرمز المميز: 24 ساعة", + "value": "24 ساعة" + }, + "downloadRpc.command.label": { + "description": "تسمية محدد أمر RPC", + "value": "الأمر" + }, + "downloadRpc.command.activate": { + "description": "خيار أمر التنشيط", + "value": "تنشيط" + }, + "downloadRpc.command.deactivate": { + "description": "خيار أمر إلغاء التنشيط", + "value": "إلغاء التنشيط" + }, + "downloadRpc.version.label": { + "description": "تسمية محدد إصدار rpc-go", + "value": "إصدار rpc-go" + }, + "downloadRpc.os.label": { + "description": "تسمية محدد نظام التشغيل", + "value": "نظام التشغيل" + }, + "downloadRpc.profile.label": { + "description": "تسمية محدد الملف الشخصي", + "value": "الملف الشخصي" + }, + "downloadRpc.domain.label": { + "description": "تسمية محدد المجال", + "value": "المجال" + }, + "downloadRpc.auth.label": { + "description": "تسمية مجموعة طريقة المصادقة", + "value": "المصادقة" + }, + "downloadRpc.auth.none": { + "description": "خيار المصادقة دون بيانات اعتماد (افتراضي)", + "value": "عدم تقديم بيانات اعتماد" + }, + "downloadRpc.auth.noneNote": { + "description": "ملاحظة تظهر عندما لا تتضمن الحزمة بيانات اعتماد", + "value": "لن تحتوي الحزمة على بيانات اعتماد. يجب عليك تقديمها على الجهاز بطريقة أخرى: مرّر ‎--auth-username و‎--auth-password (أو ‎--auth-token) عند تشغيل rpc، أو اضبط متغيرات البيئة AUTH_USERNAME وAUTH_PASSWORD (أو AUTH_TOKEN)." + }, + "downloadRpc.auth.token": { + "description": "خيار المصادقة إنشاء رمز مميز", + "value": "إنشاء رمز مميز" + }, + "downloadRpc.download": { + "description": "تسمية زر التنزيل", + "value": "تنزيل" + }, + "downloadRpc.success": { + "description": "رسالة نجاح تنزيل الحزمة", + "value": "تم تنزيل الحزمة" + }, + "downloadRpc.failVersions": { + "description": "رسالة فشل تحميل إصدارات rpc-go", + "value": "فشل تحميل إصدارات rpc-go" + }, + "downloadRpc.failPackage": { + "description": "رسالة فشل إنشاء الحزمة", + "value": "فشل إنشاء الحزمة" + }, + "downloadRpc.failProfiles": { + "description": "رسالة فشل تحميل الملفات الشخصية", + "value": "فشل تحميل الملفات الشخصية" + }, + "downloadRpc.failDomains": { + "description": "رسالة فشل تحميل المجالات", + "value": "فشل تحميل المجالات" + }, + "downloadRpc.subtitle": { + "description": "العنوان الفرعي لصفحة تنزيل RPC", + "value": "أنشئ حزمة rpc-go جاهزة للتشغيل لتنشيط Intel AMT أو إلغاء تنشيطه على جهاز." + }, + "downloadRpc.intro.contents": { + "description": "يوضح محتويات الحزمة التي تم تنزيلها", + "value": "rpc-go هي أداة سطر الأوامر التي تعمل على جهاز AMT وتوصله بـ Console. التنزيل عبارة عن ملف zip يحتوي على الملف التنفيذي لـ rpc-go وملف config.yaml مملوء مسبقًا بعنوان Console هذا والخيارات التي تحددها أدناه." + }, + "downloadRpc.intro.usage": { + "description": "يوضح كيفية استخدام الحزمة التي تم تنزيلها على الجهاز", + "value": "انسخ ملف zip إلى الجهاز، واستخرجه، ثم شغّل من ذلك المجلد \"rpc activate\" أو \"rpc deactivate\" (rpc.exe على Windows) بصلاحيات المسؤول أو root. يقرأ rpc-go ملف config.yaml من المجلد الذي يعمل فيه." + }, + "downloadRpc.command.hint": { + "description": "تلميح محدد أمر RPC", + "value": "يقوم التنشيط بتوفير Intel AMT على الجهاز باستخدام الملف الشخصي المحدد. يزيل إلغاء التنشيط تكوين AMT." + }, + "downloadRpc.version.hint": { + "description": "تلميح محدد إصدار rpc-go", + "value": "إصدار rpc-go المراد تضمينه في الحزمة. الإصدار rpc-go v3 فقط متوافق، ويتم عرض أحدث 5 إصدارات." + }, + "downloadRpc.os.hint": { + "description": "تلميح محدد نظام التشغيل", + "value": "نظام تشغيل جهاز AMT الذي ستعمل عليه الحزمة. يضع خيار Windows وLinux الإصدارين كليهما في حزمة واحدة." + }, + "downloadRpc.os.windows": { + "description": "خيار Windows في محدد نظام التشغيل", + "value": "Windows" + }, + "downloadRpc.os.linux": { + "description": "خيار Linux في محدد نظام التشغيل", + "value": "Linux" + }, + "downloadRpc.os.both": { + "description": "خيار Windows وLinux في محدد نظام التشغيل", + "value": "Windows وLinux" + }, + "downloadRpc.profile.hint": { + "description": "تلميح محدد الملف الشخصي", + "value": "ملف AMT الشخصي الذي يتم تنشيط الجهاز به. تتم إدارة الملفات الشخصية من صفحة الملفات الشخصية." + }, + "downloadRpc.domain.hint": { + "description": "تلميح محدد المجال", + "value": "مطلوب لوضع Admin Control: المجال الذي تتطابق شهادة التوفير الخاصة به مع لاحقة DNS للجهاز." } } diff --git a/src/assets/i18n/de.json b/src/assets/i18n/de.json index 0fade9a0c..70cb27112 100644 --- a/src/assets/i18n/de.json +++ b/src/assets/i18n/de.json @@ -3266,5 +3266,165 @@ "remotePlatformErase.capUnsupported": { "description": "Beschriftung in einer Fähigkeitszeile, wenn das Gerät diese nicht unterstützt", "value": "Auf diesem Gerät nicht unterstützt" + }, + "downloadRpc.title": { + "description": "Seitentitel „RPC herunterladen“", + "value": "RPC herunterladen" + }, + "downloadRpc.preview": { + "description": "Chip, der „RPC herunterladen“ als Vorschaufunktion kennzeichnet", + "value": "Vorschaufunktion" + }, + "downloadRpc.serverUrl.label": { + "description": "Beschriftung des Eingabefelds für die Console-Server-URL", + "value": "Server-URL" + }, + "downloadRpc.serverUrl.hint": { + "description": "Hinweis zum Eingabefeld für die Console-Server-URL", + "value": "Basis-URL, unter der das Gerät Console erreicht, z. B. https://console.example.com:8181" + }, + "downloadRpc.serverUrl.invalid": { + "description": "Validierungsfehler für die Console-Server-URL", + "value": "Geben Sie eine absolute URL ein, die mit http:// oder https:// beginnt" + }, + "downloadRpc.serverUrl.localWarning": { + "description": "Warnung, wenn die Server-URL auf Loopback verweist", + "value": "Diese Adresse verweist auf den Rechner, auf dem dieser Browser läuft. rpc-go läuft auf dem AMT-Gerät und erreicht Console daher nur, wenn beide derselbe Rechner sind – was nicht empfohlen wird. Verwenden Sie den Hostnamen oder die IP-Adresse, die das Gerät erreichen kann." + }, + "downloadRpc.tokenTtl.label": { + "description": "Beschriftung der Auswahl für die Token-Gültigkeitsdauer", + "value": "Token-Gültigkeitsdauer" + }, + "downloadRpc.tokenTtl.hint": { + "description": "Hinweis zur Auswahl der Token-Gültigkeitsdauer", + "value": "Wie lange das generierte Token gültig bleibt. Kürzer ist sicherer; das Paket funktioniert nach Ablauf nicht mehr." + }, + "downloadRpc.tokenTtl.15m": { + "description": "Option für die Token-Gültigkeitsdauer: 15 Minuten", + "value": "15 Minuten" + }, + "downloadRpc.tokenTtl.1h": { + "description": "Option für die Token-Gültigkeitsdauer: 1 Stunde", + "value": "1 Stunde" + }, + "downloadRpc.tokenTtl.8h": { + "description": "Option für die Token-Gültigkeitsdauer: 8 Stunden", + "value": "8 Stunden" + }, + "downloadRpc.tokenTtl.24h": { + "description": "Option für die Token-Gültigkeitsdauer: 24 Stunden", + "value": "24 Stunden" + }, + "downloadRpc.command.label": { + "description": "Beschriftung der RPC-Befehlsauswahl", + "value": "Befehl" + }, + "downloadRpc.command.activate": { + "description": "Option für den Befehl „Aktivieren“", + "value": "Aktivieren" + }, + "downloadRpc.command.deactivate": { + "description": "Option für den Befehl „Deaktivieren“", + "value": "Deaktivieren" + }, + "downloadRpc.version.label": { + "description": "Beschriftung der Auswahl für die rpc-go-Version", + "value": "rpc-go-Version" + }, + "downloadRpc.os.label": { + "description": "Beschriftung der Betriebssystemauswahl", + "value": "Betriebssystem" + }, + "downloadRpc.profile.label": { + "description": "Beschriftung der Profilauswahl", + "value": "Profil" + }, + "downloadRpc.domain.label": { + "description": "Beschriftung der Domänenauswahl", + "value": "Domäne" + }, + "downloadRpc.auth.label": { + "description": "Beschriftung der Gruppe für die Authentifizierungsmethode", + "value": "Authentifizierung" + }, + "downloadRpc.auth.none": { + "description": "Authentifizierungsoption ohne Anmeldedaten (Standard)", + "value": "Keine Anmeldedaten angeben" + }, + "downloadRpc.auth.noneNote": { + "description": "Hinweis, wenn keine Anmeldedaten in das Paket eingebettet werden", + "value": "Das Paket enthält keine Anmeldedaten. Sie müssen diese auf dem Gerät auf anderem Weg angeben: Übergeben Sie beim Ausführen von rpc --auth-username und --auth-password (oder --auth-token), oder setzen Sie die Umgebungsvariablen AUTH_USERNAME und AUTH_PASSWORD (oder AUTH_TOKEN)." + }, + "downloadRpc.auth.token": { + "description": "Authentifizierungsoption „Token generieren“", + "value": "Token generieren" + }, + "downloadRpc.download": { + "description": "Beschriftung der Schaltfläche „Herunterladen“", + "value": "Herunterladen" + }, + "downloadRpc.success": { + "description": "Erfolgsmeldung nach dem Herunterladen des Pakets", + "value": "Paket heruntergeladen" + }, + "downloadRpc.failVersions": { + "description": "Meldung, wenn die rpc-go-Versionen nicht geladen werden konnten", + "value": "rpc-go-Versionen konnten nicht geladen werden" + }, + "downloadRpc.failPackage": { + "description": "Meldung, wenn das Paket nicht erstellt werden konnte", + "value": "Paket konnte nicht erstellt werden" + }, + "downloadRpc.failProfiles": { + "description": "Meldung, wenn die Profile nicht geladen werden konnten", + "value": "Profile konnten nicht geladen werden" + }, + "downloadRpc.failDomains": { + "description": "Meldung, wenn die Domänen nicht geladen werden konnten", + "value": "Domänen konnten nicht geladen werden" + }, + "downloadRpc.subtitle": { + "description": "Untertitel der Seite „RPC herunterladen“", + "value": "Erstellen Sie ein sofort einsatzbereites rpc-go-Paket, um Intel AMT auf einem Gerät zu aktivieren oder zu deaktivieren." + }, + "downloadRpc.intro.contents": { + "description": "Erklärt, was das heruntergeladene Paket enthält", + "value": "rpc-go ist das Befehlszeilentool, das auf dem AMT-Gerät läuft und es mit Console verbindet. Der Download ist eine ZIP-Datei mit der ausführbaren rpc-go-Datei und einer config.yaml, die bereits die Adresse dieser Console und die unten gewählten Optionen enthält." + }, + "downloadRpc.intro.usage": { + "description": "Erklärt, wie das heruntergeladene Paket auf dem Gerät verwendet wird", + "value": "Kopieren Sie die ZIP-Datei auf das Gerät, entpacken Sie sie und führen Sie in diesem Ordner \"rpc activate\" oder \"rpc deactivate\" (unter Windows rpc.exe) als Administrator oder root aus. rpc-go liest die config.yaml aus dem Ordner, in dem es ausgeführt wird." + }, + "downloadRpc.command.hint": { + "description": "Hinweis zur RPC-Befehlsauswahl", + "value": "Aktivieren stellt Intel AMT auf dem Gerät mit dem ausgewählten Profil bereit. Deaktivieren entfernt die AMT-Konfiguration." + }, + "downloadRpc.version.hint": { + "description": "Hinweis zur Auswahl der rpc-go-Version", + "value": "Zu verpackende rpc-go-Version. Nur rpc-go v3 ist kompatibel; die 5 neuesten Versionen werden angezeigt." + }, + "downloadRpc.os.hint": { + "description": "Hinweis zur Betriebssystemauswahl", + "value": "Betriebssystem des AMT-Geräts, auf dem das Paket ausgeführt wird. „Windows und Linux“ legt beide Builds in ein Paket." + }, + "downloadRpc.os.windows": { + "description": "Option „Windows“ der Betriebssystemauswahl", + "value": "Windows" + }, + "downloadRpc.os.linux": { + "description": "Option „Linux“ der Betriebssystemauswahl", + "value": "Linux" + }, + "downloadRpc.os.both": { + "description": "Option „Windows und Linux“ der Betriebssystemauswahl", + "value": "Windows und Linux" + }, + "downloadRpc.profile.hint": { + "description": "Hinweis zur Profilauswahl", + "value": "AMT-Profil, mit dem das Gerät aktiviert wird. Profile werden auf der Seite „Profile“ verwaltet." + }, + "downloadRpc.domain.hint": { + "description": "Hinweis zur Domänenauswahl", + "value": "Erforderlich für den Admin Control Mode: die Domäne, deren Bereitstellungszertifikat zum DNS-Suffix des Geräts passt." } } diff --git a/src/assets/i18n/en.json b/src/assets/i18n/en.json index a19e76dec..53c154214 100644 --- a/src/assets/i18n/en.json +++ b/src/assets/i18n/en.json @@ -1057,6 +1057,166 @@ "description": "Description for TLS settings", "value": "View TLS configuration" }, + "downloadRpc.title": { + "description": "Download RPC page title", + "value": "Download RPC" + }, + "downloadRpc.preview": { + "description": "Chip marking Download RPC as a preview feature", + "value": "Preview Feature" + }, + "downloadRpc.subtitle": { + "description": "Download RPC page subtitle", + "value": "Build a ready-to-run rpc-go package to activate or deactivate Intel AMT on a device." + }, + "downloadRpc.intro.contents": { + "description": "Explains what the downloaded package contains", + "value": "rpc-go is the command-line tool that runs on the AMT device and connects it to Console. The download is a zip containing the rpc-go executable and a config.yaml pre-filled with this Console's address and the options you choose below." + }, + "downloadRpc.intro.usage": { + "description": "Explains how to use the downloaded package on the device", + "value": "Copy the zip to the device, extract it, and from that folder run \"rpc activate\" or \"rpc deactivate\" (rpc.exe on Windows) as Administrator or root. rpc-go reads config.yaml from the folder it runs in." + }, + "downloadRpc.serverUrl.label": { + "description": "Console server URL input label", + "value": "Server URL" + }, + "downloadRpc.serverUrl.hint": { + "description": "Console server URL input hint", + "value": "Base URL the device will reach Console at, e.g. https://console.example.com:8181" + }, + "downloadRpc.serverUrl.invalid": { + "description": "Console server URL validation error", + "value": "Enter an absolute URL starting with http:// or https://" + }, + "downloadRpc.serverUrl.localWarning": { + "description": "Warning shown when the server URL points at loopback", + "value": "This address points at the machine running this browser. rpc-go runs on the AMT device, so it will only reach Console if both are the same machine — which is not recommended. Use the hostname or IP the device can reach." + }, + "downloadRpc.tokenTtl.label": { + "description": "Token lifetime selector label", + "value": "Token lifetime" + }, + "downloadRpc.tokenTtl.hint": { + "description": "Token lifetime selector hint", + "value": "How long the generated token stays valid. Shorter is safer; the package stops working once it expires." + }, + "downloadRpc.tokenTtl.15m": { + "description": "Token lifetime option: 15 minutes", + "value": "15 minutes" + }, + "downloadRpc.tokenTtl.1h": { + "description": "Token lifetime option: 1 hour", + "value": "1 hour" + }, + "downloadRpc.tokenTtl.8h": { + "description": "Token lifetime option: 8 hours", + "value": "8 hours" + }, + "downloadRpc.tokenTtl.24h": { + "description": "Token lifetime option: 24 hours", + "value": "24 hours" + }, + "downloadRpc.command.label": { + "description": "RPC command selector label", + "value": "Command" + }, + "downloadRpc.command.hint": { + "description": "RPC command selector hint", + "value": "Activate provisions Intel AMT on the device using the selected profile. Deactivate removes the AMT configuration." + }, + "downloadRpc.command.activate": { + "description": "Activate command option", + "value": "Activate" + }, + "downloadRpc.command.deactivate": { + "description": "Deactivate command option", + "value": "Deactivate" + }, + "downloadRpc.version.label": { + "description": "rpc-go version selector label", + "value": "rpc-go Version" + }, + "downloadRpc.version.hint": { + "description": "rpc-go version selector hint", + "value": "rpc-go release to package. Only rpc-go v3 is compatible, and the 5 most recent releases are shown." + }, + "downloadRpc.os.label": { + "description": "Operating system selector label", + "value": "Operating System" + }, + "downloadRpc.os.hint": { + "description": "Operating system selector hint", + "value": "Operating system of the AMT device the package will run on. Choose Windows and Linux to get both builds in one package." + }, + "downloadRpc.os.windows": { + "description": "Windows option for the operating system selector", + "value": "Windows" + }, + "downloadRpc.os.linux": { + "description": "Linux option for the operating system selector", + "value": "Linux" + }, + "downloadRpc.os.both": { + "description": "Windows and Linux option for the operating system selector", + "value": "Windows and Linux" + }, + "downloadRpc.profile.label": { + "description": "Profile selector label", + "value": "Profile" + }, + "downloadRpc.profile.hint": { + "description": "Profile selector hint", + "value": "AMT profile the device is activated with. Profiles are managed on the Profiles page." + }, + "downloadRpc.domain.label": { + "description": "Domain selector label", + "value": "Domain" + }, + "downloadRpc.domain.hint": { + "description": "Domain selector hint", + "value": "Required for Admin Control Mode: the domain whose provisioning certificate matches the device's DNS suffix." + }, + "downloadRpc.auth.label": { + "description": "Authentication method group label", + "value": "Authentication" + }, + "downloadRpc.auth.none": { + "description": "No-credentials auth option (default)", + "value": "Don't provide credentials" + }, + "downloadRpc.auth.noneNote": { + "description": "Note shown when no credentials will be embedded in the package", + "value": "The package will not contain credentials. You must provide them on the device by other means: pass --auth-username and --auth-password (or --auth-token) when running rpc, or set the AUTH_USERNAME and AUTH_PASSWORD (or AUTH_TOKEN) environment variables." + }, + "downloadRpc.auth.token": { + "description": "Generate token auth option", + "value": "Generate token" + }, + "downloadRpc.download": { + "description": "Download button label", + "value": "Download" + }, + "downloadRpc.success": { + "description": "Package downloaded success message", + "value": "Package downloaded" + }, + "downloadRpc.failVersions": { + "description": "Failed to load rpc-go versions message", + "value": "Failed to load rpc-go versions" + }, + "downloadRpc.failPackage": { + "description": "Failed to build package message", + "value": "Failed to build package" + }, + "downloadRpc.failProfiles": { + "description": "Failed to load profiles message", + "value": "Failed to load profiles" + }, + "downloadRpc.failDomains": { + "description": "Failed to load domains message", + "value": "Failed to load domains" + }, "deviceDetail.remotePlatformErase": { "description": "Category name for Remote Platform Erase", "value": "Remote Platform Erase" diff --git a/src/assets/i18n/es.json b/src/assets/i18n/es.json index 12b610279..5914f362c 100644 --- a/src/assets/i18n/es.json +++ b/src/assets/i18n/es.json @@ -3266,5 +3266,165 @@ "remotePlatformErase.capUnsupported": { "description": "Indicador mostrado en una fila de capacidad cuando el dispositivo no la admite", "value": "No compatible con este dispositivo" + }, + "downloadRpc.title": { + "description": "Título de la página Descargar RPC", + "value": "Descargar RPC" + }, + "downloadRpc.preview": { + "description": "Etiqueta que marca Descargar RPC como función en versión preliminar", + "value": "Función en versión preliminar" + }, + "downloadRpc.serverUrl.label": { + "description": "Etiqueta del campo de URL del servidor de Console", + "value": "URL del servidor" + }, + "downloadRpc.serverUrl.hint": { + "description": "Sugerencia del campo de URL del servidor de Console", + "value": "URL base con la que el dispositivo accederá a Console, p. ej. https://console.example.com:8181" + }, + "downloadRpc.serverUrl.invalid": { + "description": "Error de validación de la URL del servidor de Console", + "value": "Introduzca una URL absoluta que empiece por http:// o https://" + }, + "downloadRpc.serverUrl.localWarning": { + "description": "Advertencia cuando la URL del servidor apunta a loopback", + "value": "Esta dirección apunta al equipo donde se ejecuta este navegador. rpc-go se ejecuta en el dispositivo AMT, por lo que solo accederá a Console si ambos son el mismo equipo, lo cual no se recomienda. Use el nombre de host o la IP a la que pueda acceder el dispositivo." + }, + "downloadRpc.tokenTtl.label": { + "description": "Etiqueta del selector de duración del token", + "value": "Duración del token" + }, + "downloadRpc.tokenTtl.hint": { + "description": "Sugerencia del selector de duración del token", + "value": "Tiempo durante el cual el token generado sigue siendo válido. Cuanto más corto, más seguro; el paquete deja de funcionar cuando caduca." + }, + "downloadRpc.tokenTtl.15m": { + "description": "Opción de duración del token: 15 minutos", + "value": "15 minutos" + }, + "downloadRpc.tokenTtl.1h": { + "description": "Opción de duración del token: 1 hora", + "value": "1 hora" + }, + "downloadRpc.tokenTtl.8h": { + "description": "Opción de duración del token: 8 horas", + "value": "8 horas" + }, + "downloadRpc.tokenTtl.24h": { + "description": "Opción de duración del token: 24 horas", + "value": "24 horas" + }, + "downloadRpc.command.label": { + "description": "Etiqueta del selector de comando RPC", + "value": "Comando" + }, + "downloadRpc.command.activate": { + "description": "Opción del comando Activar", + "value": "Activar" + }, + "downloadRpc.command.deactivate": { + "description": "Opción del comando Desactivar", + "value": "Desactivar" + }, + "downloadRpc.version.label": { + "description": "Etiqueta del selector de versión de rpc-go", + "value": "Versión de rpc-go" + }, + "downloadRpc.os.label": { + "description": "Etiqueta del selector de sistema operativo", + "value": "Sistema operativo" + }, + "downloadRpc.profile.label": { + "description": "Etiqueta del selector de perfil", + "value": "Perfil" + }, + "downloadRpc.domain.label": { + "description": "Etiqueta del selector de dominio", + "value": "Dominio" + }, + "downloadRpc.auth.label": { + "description": "Etiqueta del grupo de método de autenticación", + "value": "Autenticación" + }, + "downloadRpc.auth.none": { + "description": "Opción de autenticación sin credenciales (predeterminada)", + "value": "No proporcionar credenciales" + }, + "downloadRpc.auth.noneNote": { + "description": "Nota que se muestra cuando el paquete no incluirá credenciales", + "value": "El paquete no contendrá credenciales. Debe proporcionarlas en el dispositivo por otros medios: pase --auth-username y --auth-password (o --auth-token) al ejecutar rpc, o defina las variables de entorno AUTH_USERNAME y AUTH_PASSWORD (o AUTH_TOKEN)." + }, + "downloadRpc.auth.token": { + "description": "Opción de autenticación Generar token", + "value": "Generar token" + }, + "downloadRpc.download": { + "description": "Etiqueta del botón Descargar", + "value": "Descargar" + }, + "downloadRpc.success": { + "description": "Mensaje de éxito al descargar el paquete", + "value": "Paquete descargado" + }, + "downloadRpc.failVersions": { + "description": "Mensaje de error al cargar las versiones de rpc-go", + "value": "No se pudieron cargar las versiones de rpc-go" + }, + "downloadRpc.failPackage": { + "description": "Mensaje de error al generar el paquete", + "value": "No se pudo generar el paquete" + }, + "downloadRpc.failProfiles": { + "description": "Mensaje de error al cargar los perfiles", + "value": "No se pudieron cargar los perfiles" + }, + "downloadRpc.failDomains": { + "description": "Mensaje de error al cargar los dominios", + "value": "No se pudieron cargar los dominios" + }, + "downloadRpc.subtitle": { + "description": "Subtítulo de la página Descargar RPC", + "value": "Genere un paquete de rpc-go listo para usar que active o desactive Intel AMT en un dispositivo." + }, + "downloadRpc.intro.contents": { + "description": "Explica qué contiene el paquete descargado", + "value": "rpc-go es la herramienta de línea de comandos que se ejecuta en el dispositivo AMT y lo conecta a Console. La descarga es un archivo zip con el ejecutable de rpc-go y un config.yaml ya rellenado con la dirección de esta Console y las opciones que elija a continuación." + }, + "downloadRpc.intro.usage": { + "description": "Explica cómo usar el paquete descargado en el dispositivo", + "value": "Copie el zip al dispositivo, extráigalo y, desde esa carpeta, ejecute \"rpc activate\" o \"rpc deactivate\" (rpc.exe en Windows) como administrador o root. rpc-go lee config.yaml de la carpeta en la que se ejecuta." + }, + "downloadRpc.command.hint": { + "description": "Sugerencia del selector de comando RPC", + "value": "Activar aprovisiona Intel AMT en el dispositivo con el perfil seleccionado. Desactivar elimina la configuración de AMT." + }, + "downloadRpc.version.hint": { + "description": "Sugerencia del selector de versión de rpc-go", + "value": "Versión de rpc-go que se empaquetará. Solo rpc-go v3 es compatible y se muestran las 5 versiones más recientes." + }, + "downloadRpc.os.hint": { + "description": "Sugerencia del selector de sistema operativo", + "value": "Sistema operativo del dispositivo AMT en el que se ejecutará el paquete. Windows y Linux incluye ambas compilaciones en un solo paquete." + }, + "downloadRpc.os.windows": { + "description": "Opción Windows del selector de sistema operativo", + "value": "Windows" + }, + "downloadRpc.os.linux": { + "description": "Opción Linux del selector de sistema operativo", + "value": "Linux" + }, + "downloadRpc.os.both": { + "description": "Opción Windows y Linux del selector de sistema operativo", + "value": "Windows y Linux" + }, + "downloadRpc.profile.hint": { + "description": "Sugerencia del selector de perfil", + "value": "Perfil de AMT con el que se activa el dispositivo. Los perfiles se gestionan en la página Perfiles." + }, + "downloadRpc.domain.hint": { + "description": "Sugerencia del selector de dominio", + "value": "Obligatorio para el modo de control de administrador: el dominio cuyo certificado de aprovisionamiento coincide con el sufijo DNS del dispositivo." } } diff --git a/src/assets/i18n/fi.json b/src/assets/i18n/fi.json index 601fe9c74..bff64a350 100644 --- a/src/assets/i18n/fi.json +++ b/src/assets/i18n/fi.json @@ -3266,5 +3266,165 @@ "remotePlatformErase.capUnsupported": { "description": "Teksti, joka näytetään ominaisuusrivillä, kun laite ei tue sitä", "value": "Ei tuettu tässä laitteessa" + }, + "downloadRpc.title": { + "description": "Lataa RPC -sivun otsikko", + "value": "Lataa RPC" + }, + "downloadRpc.preview": { + "description": "Merkki, joka osoittaa Lataa RPC -toiminnon esikatseluversioksi", + "value": "Esikatseluominaisuus" + }, + "downloadRpc.serverUrl.label": { + "description": "Console-palvelimen URL-kentän nimi", + "value": "Palvelimen URL" + }, + "downloadRpc.serverUrl.hint": { + "description": "Console-palvelimen URL-kentän vihje", + "value": "Perus-URL, jonka kautta laite tavoittaa Consolen, esim. https://console.example.com:8181" + }, + "downloadRpc.serverUrl.invalid": { + "description": "Console-palvelimen URL-osoitteen vahvistusvirhe", + "value": "Anna absoluuttinen URL, joka alkaa http:// tai https://" + }, + "downloadRpc.serverUrl.localWarning": { + "description": "Varoitus, kun palvelimen URL osoittaa loopback-osoitteeseen", + "value": "Tämä osoite viittaa koneeseen, jossa tämä selain on käynnissä. rpc-go toimii AMT-laitteessa, joten se tavoittaa Consolen vain, jos molemmat ovat samalla koneella, mitä ei suositella. Käytä isäntänimeä tai IP-osoitetta, jonka laite tavoittaa." + }, + "downloadRpc.tokenTtl.label": { + "description": "Tunnuksen voimassaoloajan valitsimen nimi", + "value": "Tunnuksen voimassaoloaika" + }, + "downloadRpc.tokenTtl.hint": { + "description": "Tunnuksen voimassaoloajan valitsimen vihje", + "value": "Kuinka kauan luotu tunnus on voimassa. Lyhyempi on turvallisempi; paketti lakkaa toimimasta, kun tunnus vanhenee." + }, + "downloadRpc.tokenTtl.15m": { + "description": "Tunnuksen voimassaoloaika: 15 minuuttia", + "value": "15 minuuttia" + }, + "downloadRpc.tokenTtl.1h": { + "description": "Tunnuksen voimassaoloaika: 1 tunti", + "value": "1 tunti" + }, + "downloadRpc.tokenTtl.8h": { + "description": "Tunnuksen voimassaoloaika: 8 tuntia", + "value": "8 tuntia" + }, + "downloadRpc.tokenTtl.24h": { + "description": "Tunnuksen voimassaoloaika: 24 tuntia", + "value": "24 tuntia" + }, + "downloadRpc.command.label": { + "description": "RPC-komennon valitsimen nimi", + "value": "Komento" + }, + "downloadRpc.command.activate": { + "description": "Aktivoi-komennon vaihtoehto", + "value": "Aktivoi" + }, + "downloadRpc.command.deactivate": { + "description": "Poista aktivointi -komennon vaihtoehto", + "value": "Poista aktivointi" + }, + "downloadRpc.version.label": { + "description": "rpc-go-version valitsimen nimi", + "value": "rpc-go-versio" + }, + "downloadRpc.os.label": { + "description": "Käyttöjärjestelmän valitsimen nimi", + "value": "Käyttöjärjestelmä" + }, + "downloadRpc.profile.label": { + "description": "Profiilin valitsimen nimi", + "value": "Profiili" + }, + "downloadRpc.domain.label": { + "description": "Verkkotunnuksen valitsimen nimi", + "value": "Verkkotunnus" + }, + "downloadRpc.auth.label": { + "description": "Todentamistavan ryhmän nimi", + "value": "Todentaminen" + }, + "downloadRpc.auth.none": { + "description": "Todentamisvaihtoehto ilman tunnistetietoja (oletus)", + "value": "Älä anna tunnistetietoja" + }, + "downloadRpc.auth.noneNote": { + "description": "Huomautus, kun pakettiin ei sisällytetä tunnistetietoja", + "value": "Paketti ei sisällä tunnistetietoja. Sinun on annettava ne laitteessa muulla tavoin: anna --auth-username ja --auth-password (tai --auth-token) suorittaessasi rpc:tä, tai aseta ympäristömuuttujat AUTH_USERNAME ja AUTH_PASSWORD (tai AUTH_TOKEN)." + }, + "downloadRpc.auth.token": { + "description": "Luo tunnus -todentamisvaihtoehto", + "value": "Luo tunnus" + }, + "downloadRpc.download": { + "description": "Lataa-painikkeen teksti", + "value": "Lataa" + }, + "downloadRpc.success": { + "description": "Ilmoitus paketin onnistuneesta latauksesta", + "value": "Paketti ladattu" + }, + "downloadRpc.failVersions": { + "description": "Ilmoitus, kun rpc-go-versioiden lataus epäonnistui", + "value": "rpc-go-versioiden lataaminen epäonnistui" + }, + "downloadRpc.failPackage": { + "description": "Ilmoitus, kun paketin luonti epäonnistui", + "value": "Paketin luominen epäonnistui" + }, + "downloadRpc.failProfiles": { + "description": "Ilmoitus, kun profiilien lataus epäonnistui", + "value": "Profiilien lataaminen epäonnistui" + }, + "downloadRpc.failDomains": { + "description": "Ilmoitus, kun verkkotunnusten lataus epäonnistui", + "value": "Verkkotunnusten lataaminen epäonnistui" + }, + "downloadRpc.subtitle": { + "description": "Lataa RPC -sivun alaotsikko", + "value": "Luo käyttövalmis rpc-go-paketti Intel AMT:n aktivointiin tai aktivoinnin poistamiseen laitteessa." + }, + "downloadRpc.intro.contents": { + "description": "Kertoo, mitä ladattu paketti sisältää", + "value": "rpc-go on komentorivityökalu, joka toimii AMT-laitteessa ja yhdistää sen Consoleen. Lataus on zip-tiedosto, joka sisältää rpc-go-ohjelman ja config.yaml-tiedoston, johon on valmiiksi täytetty tämän Consolen osoite ja alla valitsemasi asetukset." + }, + "downloadRpc.intro.usage": { + "description": "Kertoo, miten ladattua pakettia käytetään laitteessa", + "value": "Kopioi zip laitteeseen, pura se ja suorita kyseisessä kansiossa \"rpc activate\" tai \"rpc deactivate\" (Windowsissa rpc.exe) järjestelmänvalvojana tai root-käyttäjänä. rpc-go lukee config.yaml-tiedoston kansiosta, jossa se suoritetaan." + }, + "downloadRpc.command.hint": { + "description": "RPC-komennon valitsimen vihje", + "value": "Aktivoi ottaa Intel AMT:n käyttöön laitteessa valitulla profiililla. Poista aktivointi poistaa AMT-määrityksen." + }, + "downloadRpc.version.hint": { + "description": "rpc-go-version valitsimen vihje", + "value": "Pakettiin sisällytettävä rpc-go-versio. Vain rpc-go v3 on yhteensopiva, ja 5 uusinta versiota näytetään." + }, + "downloadRpc.os.hint": { + "description": "Käyttöjärjestelmän valitsimen vihje", + "value": "AMT-laitteen käyttöjärjestelmä, jossa pakettia suoritetaan. Windows ja Linux sisällyttää molemmat versiot samaan pakettiin." + }, + "downloadRpc.os.windows": { + "description": "Käyttöjärjestelmän valitsimen vaihtoehto Windows", + "value": "Windows" + }, + "downloadRpc.os.linux": { + "description": "Käyttöjärjestelmän valitsimen vaihtoehto Linux", + "value": "Linux" + }, + "downloadRpc.os.both": { + "description": "Käyttöjärjestelmän valitsimen vaihtoehto Windows ja Linux", + "value": "Windows ja Linux" + }, + "downloadRpc.profile.hint": { + "description": "Profiilin valitsimen vihje", + "value": "AMT-profiili, jolla laite aktivoidaan. Profiileja hallitaan Profiilit-sivulla." + }, + "downloadRpc.domain.hint": { + "description": "Verkkotunnuksen valitsimen vihje", + "value": "Pakollinen Admin Control Mode -tilassa: verkkotunnus, jonka käyttöönottovarmenne vastaa laitteen DNS-päätettä." } } diff --git a/src/assets/i18n/fr.json b/src/assets/i18n/fr.json index 161d5ad0d..01d5f0f6c 100644 --- a/src/assets/i18n/fr.json +++ b/src/assets/i18n/fr.json @@ -3270,5 +3270,165 @@ "remotePlatformErase.capUnsupported": { "description": "Légende affichée sur une ligne de capacité lorsque l'appareil ne la prend pas en charge", "value": "Non pris en charge sur cet appareil" + }, + "downloadRpc.title": { + "description": "Titre de la page Télécharger RPC", + "value": "Télécharger RPC" + }, + "downloadRpc.preview": { + "description": "Pastille indiquant que Télécharger RPC est une fonctionnalité en préversion", + "value": "Fonctionnalité en préversion" + }, + "downloadRpc.serverUrl.label": { + "description": "Libellé du champ URL du serveur Console", + "value": "URL du serveur" + }, + "downloadRpc.serverUrl.hint": { + "description": "Aide du champ URL du serveur Console", + "value": "URL de base à laquelle l’appareil joindra Console, par ex. https://console.example.com:8181" + }, + "downloadRpc.serverUrl.invalid": { + "description": "Erreur de validation de l’URL du serveur Console", + "value": "Saisissez une URL absolue commençant par http:// ou https://" + }, + "downloadRpc.serverUrl.localWarning": { + "description": "Avertissement lorsque l’URL du serveur pointe vers le loopback", + "value": "Cette adresse désigne la machine qui exécute ce navigateur. rpc-go s’exécute sur l’appareil AMT et ne joindra donc Console que si les deux sont la même machine, ce qui n’est pas recommandé. Utilisez le nom d’hôte ou l’adresse IP que l’appareil peut joindre." + }, + "downloadRpc.tokenTtl.label": { + "description": "Libellé du sélecteur de durée de validité du jeton", + "value": "Durée de validité du jeton" + }, + "downloadRpc.tokenTtl.hint": { + "description": "Aide du sélecteur de durée de validité du jeton", + "value": "Durée pendant laquelle le jeton généré reste valide. Plus elle est courte, plus c’est sûr ; le paquet cesse de fonctionner à son expiration." + }, + "downloadRpc.tokenTtl.15m": { + "description": "Option de durée du jeton : 15 minutes", + "value": "15 minutes" + }, + "downloadRpc.tokenTtl.1h": { + "description": "Option de durée du jeton : 1 heure", + "value": "1 heure" + }, + "downloadRpc.tokenTtl.8h": { + "description": "Option de durée du jeton : 8 heures", + "value": "8 heures" + }, + "downloadRpc.tokenTtl.24h": { + "description": "Option de durée du jeton : 24 heures", + "value": "24 heures" + }, + "downloadRpc.command.label": { + "description": "Libellé du sélecteur de commande RPC", + "value": "Commande" + }, + "downloadRpc.command.activate": { + "description": "Option de commande Activer", + "value": "Activer" + }, + "downloadRpc.command.deactivate": { + "description": "Option de commande Désactiver", + "value": "Désactiver" + }, + "downloadRpc.version.label": { + "description": "Libellé du sélecteur de version de rpc-go", + "value": "Version de rpc-go" + }, + "downloadRpc.os.label": { + "description": "Libellé du sélecteur de système d’exploitation", + "value": "Système d’exploitation" + }, + "downloadRpc.profile.label": { + "description": "Libellé du sélecteur de profil", + "value": "Profil" + }, + "downloadRpc.domain.label": { + "description": "Libellé du sélecteur de domaine", + "value": "Domaine" + }, + "downloadRpc.auth.label": { + "description": "Libellé du groupe de méthode d’authentification", + "value": "Authentification" + }, + "downloadRpc.auth.none": { + "description": "Option d’authentification sans identifiants (par défaut)", + "value": "Ne pas fournir d’identifiants" + }, + "downloadRpc.auth.noneNote": { + "description": "Note affichée lorsqu’aucun identifiant ne sera intégré au paquet", + "value": "Le paquet ne contiendra pas d’identifiants. Vous devez les fournir sur l’appareil par un autre moyen : passez --auth-username et --auth-password (ou --auth-token) lors de l’exécution de rpc, ou définissez les variables d’environnement AUTH_USERNAME et AUTH_PASSWORD (ou AUTH_TOKEN)." + }, + "downloadRpc.auth.token": { + "description": "Option d’authentification Générer un jeton", + "value": "Générer un jeton" + }, + "downloadRpc.download": { + "description": "Libellé du bouton Télécharger", + "value": "Télécharger" + }, + "downloadRpc.success": { + "description": "Message de succès du téléchargement du paquet", + "value": "Paquet téléchargé" + }, + "downloadRpc.failVersions": { + "description": "Message d’échec du chargement des versions de rpc-go", + "value": "Échec du chargement des versions de rpc-go" + }, + "downloadRpc.failPackage": { + "description": "Message d’échec de la création du paquet", + "value": "Échec de la création du paquet" + }, + "downloadRpc.failProfiles": { + "description": "Message d’échec du chargement des profils", + "value": "Échec du chargement des profils" + }, + "downloadRpc.failDomains": { + "description": "Message d’échec du chargement des domaines", + "value": "Échec du chargement des domaines" + }, + "downloadRpc.subtitle": { + "description": "Sous-titre de la page Télécharger RPC", + "value": "Créez un paquet rpc-go prêt à l’emploi pour activer ou désactiver Intel AMT sur un appareil." + }, + "downloadRpc.intro.contents": { + "description": "Explique le contenu du paquet téléchargé", + "value": "rpc-go est l’outil en ligne de commande qui s’exécute sur l’appareil AMT et le connecte à Console. Le téléchargement est un fichier zip contenant l’exécutable rpc-go et un config.yaml déjà renseigné avec l’adresse de cette Console et les options choisies ci-dessous." + }, + "downloadRpc.intro.usage": { + "description": "Explique comment utiliser le paquet téléchargé sur l’appareil", + "value": "Copiez le zip sur l’appareil, extrayez-le, puis depuis ce dossier exécutez \"rpc activate\" ou \"rpc deactivate\" (rpc.exe sous Windows) en tant qu’administrateur ou root. rpc-go lit config.yaml dans le dossier depuis lequel il s’exécute." + }, + "downloadRpc.command.hint": { + "description": "Aide du sélecteur de commande RPC", + "value": "Activer provisionne Intel AMT sur l’appareil avec le profil sélectionné. Désactiver supprime la configuration AMT." + }, + "downloadRpc.version.hint": { + "description": "Aide du sélecteur de version de rpc-go", + "value": "Version de rpc-go à empaqueter. Seul rpc-go v3 est compatible, et les 5 versions les plus récentes sont affichées." + }, + "downloadRpc.os.hint": { + "description": "Aide du sélecteur de système d’exploitation", + "value": "Système d’exploitation de l’appareil AMT sur lequel le paquet sera exécuté. Windows et Linux place les deux versions dans un seul paquet." + }, + "downloadRpc.os.windows": { + "description": "Option Windows du sélecteur de système d’exploitation", + "value": "Windows" + }, + "downloadRpc.os.linux": { + "description": "Option Linux du sélecteur de système d’exploitation", + "value": "Linux" + }, + "downloadRpc.os.both": { + "description": "Option Windows et Linux du sélecteur de système d’exploitation", + "value": "Windows et Linux" + }, + "downloadRpc.profile.hint": { + "description": "Aide du sélecteur de profil", + "value": "Profil AMT avec lequel l’appareil est activé. Les profils se gèrent sur la page Profils." + }, + "downloadRpc.domain.hint": { + "description": "Aide du sélecteur de domaine", + "value": "Obligatoire pour le mode Admin Control : le domaine dont le certificat de provisionnement correspond au suffixe DNS de l’appareil." } } diff --git a/src/assets/i18n/he.json b/src/assets/i18n/he.json index 9bde55f65..4d21cc9ec 100644 --- a/src/assets/i18n/he.json +++ b/src/assets/i18n/he.json @@ -3262,5 +3262,165 @@ "remotePlatformErase.capUnsupported": { "description": "תווית המוצגת בשורת יכולת כאשר המכשיר אינו תומך בה", "value": "לא נתמך במכשיר זה" + }, + "downloadRpc.title": { + "description": "כותרת הדף הורדת RPC", + "value": "הורדת RPC" + }, + "downloadRpc.preview": { + "description": "תווית המסמנת את הורדת RPC כתכונה בתצוגה מקדימה", + "value": "תכונה בתצוגה מקדימה" + }, + "downloadRpc.serverUrl.label": { + "description": "תווית שדה כתובת ה-URL של שרת Console", + "value": "כתובת URL של השרת" + }, + "downloadRpc.serverUrl.hint": { + "description": "רמז לשדה כתובת ה-URL של שרת Console", + "value": "כתובת ה-URL הבסיסית שדרכה המכשיר יגיע ל-Console, לדוגמה https://console.example.com:8181" + }, + "downloadRpc.serverUrl.invalid": { + "description": "שגיאת אימות של כתובת ה-URL של שרת Console", + "value": "הזן כתובת URL מוחלטת שמתחילה ב-http://‎ או ב-https://‎" + }, + "downloadRpc.serverUrl.localWarning": { + "description": "אזהרה כאשר כתובת ה-URL של השרת מצביעה על loopback", + "value": "כתובת זו מצביעה על המחשב שבו פועל הדפדפן הזה. rpc-go פועל במכשיר ה-AMT, ולכן יגיע ל-Console רק אם שניהם אותו מחשב, דבר שאינו מומלץ. השתמש בשם המארח או בכתובת ה-IP שהמכשיר יכול להגיע אליהם." + }, + "downloadRpc.tokenTtl.label": { + "description": "תווית בורר משך התוקף של האסימון", + "value": "משך תוקף האסימון" + }, + "downloadRpc.tokenTtl.hint": { + "description": "רמז לבורר משך התוקף של האסימון", + "value": "כמה זמן האסימון שנוצר נשאר בתוקף. קצר יותר בטוח יותר; החבילה מפסיקה לפעול כשתוקפו פג." + }, + "downloadRpc.tokenTtl.15m": { + "description": "אפשרות משך תוקף האסימון: 15 דקות", + "value": "15 דקות" + }, + "downloadRpc.tokenTtl.1h": { + "description": "אפשרות משך תוקף האסימון: שעה אחת", + "value": "שעה אחת" + }, + "downloadRpc.tokenTtl.8h": { + "description": "אפשרות משך תוקף האסימון: 8 שעות", + "value": "8 שעות" + }, + "downloadRpc.tokenTtl.24h": { + "description": "אפשרות משך תוקף האסימון: 24 שעות", + "value": "24 שעות" + }, + "downloadRpc.command.label": { + "description": "תווית בורר פקודת RPC", + "value": "פקודה" + }, + "downloadRpc.command.activate": { + "description": "אפשרות הפקודה הפעלה", + "value": "הפעלה" + }, + "downloadRpc.command.deactivate": { + "description": "אפשרות הפקודה ביטול הפעלה", + "value": "ביטול הפעלה" + }, + "downloadRpc.version.label": { + "description": "תווית בורר גרסת rpc-go", + "value": "גרסת rpc-go" + }, + "downloadRpc.os.label": { + "description": "תווית בורר מערכת ההפעלה", + "value": "מערכת הפעלה" + }, + "downloadRpc.profile.label": { + "description": "תווית בורר הפרופיל", + "value": "פרופיל" + }, + "downloadRpc.domain.label": { + "description": "תווית בורר הדומיין", + "value": "דומיין" + }, + "downloadRpc.auth.label": { + "description": "תווית קבוצת שיטת האימות", + "value": "אימות" + }, + "downloadRpc.auth.none": { + "description": "אפשרות אימות ללא אישורים (ברירת מחדל)", + "value": "אל תספק אישורים" + }, + "downloadRpc.auth.noneNote": { + "description": "הערה המוצגת כאשר החבילה לא תכיל אישורים", + "value": "החבילה לא תכיל אישורים. עליך לספק אותם במכשיר בדרך אחרת: העבר ‎--auth-username ו-‎--auth-password (או ‎--auth-token) בעת הרצת rpc, או הגדר את משתני הסביבה AUTH_USERNAME ו-AUTH_PASSWORD (או AUTH_TOKEN)." + }, + "downloadRpc.auth.token": { + "description": "אפשרות האימות יצירת אסימון", + "value": "צור אסימון" + }, + "downloadRpc.download": { + "description": "תווית לחצן ההורדה", + "value": "הורדה" + }, + "downloadRpc.success": { + "description": "הודעת הצלחה על הורדת החבילה", + "value": "החבילה הורדה" + }, + "downloadRpc.failVersions": { + "description": "הודעת כשל בטעינת גרסאות rpc-go", + "value": "טעינת גרסאות rpc-go נכשלה" + }, + "downloadRpc.failPackage": { + "description": "הודעת כשל בבניית החבילה", + "value": "בניית החבילה נכשלה" + }, + "downloadRpc.failProfiles": { + "description": "הודעת כשל בטעינת הפרופילים", + "value": "טעינת הפרופילים נכשלה" + }, + "downloadRpc.failDomains": { + "description": "הודעת כשל בטעינת הדומיינים", + "value": "טעינת הדומיינים נכשלה" + }, + "downloadRpc.subtitle": { + "description": "כותרת משנה של הדף הורדת RPC", + "value": "צור חבילת rpc-go מוכנה להפעלה כדי להפעיל או לבטל את הפעלת Intel AMT במכשיר." + }, + "downloadRpc.intro.contents": { + "description": "מסביר מה מכילה החבילה שהורדה", + "value": "rpc-go הוא כלי שורת הפקודה שפועל במכשיר ה-AMT ומחבר אותו ל-Console. ההורדה היא קובץ zip שמכיל את קובץ ההפעלה של rpc-go וקובץ config.yaml שכבר מולאו בו הכתובת של Console זה והאפשרויות שתבחר למטה." + }, + "downloadRpc.intro.usage": { + "description": "מסביר כיצד להשתמש בחבילה שהורדה במכשיר", + "value": "העתק את קובץ ה-zip למכשיר, חלץ אותו, ומתוך אותה תיקייה הרץ \"rpc activate\" או \"rpc deactivate\" (rpc.exe ב-Windows) כמנהל מערכת או כ-root. rpc-go קורא את config.yaml מהתיקייה שבה הוא רץ." + }, + "downloadRpc.command.hint": { + "description": "רמז לבורר פקודת RPC", + "value": "הפעלה מקצה את Intel AMT במכשיר באמצעות הפרופיל שנבחר. ביטול הפעלה מסיר את תצורת ה-AMT." + }, + "downloadRpc.version.hint": { + "description": "רמז לבורר גרסת rpc-go", + "value": "גרסת rpc-go שתיכלל בחבילה. רק rpc-go v3 תואם, ומוצגות 5 הגרסאות האחרונות." + }, + "downloadRpc.os.hint": { + "description": "רמז לבורר מערכת ההפעלה", + "value": "מערכת ההפעלה של מכשיר ה-AMT שבו החבילה תרוץ. Windows ו-Linux כולל את שתי הגרסאות בחבילה אחת." + }, + "downloadRpc.os.windows": { + "description": "אפשרות Windows בבורר מערכת ההפעלה", + "value": "Windows" + }, + "downloadRpc.os.linux": { + "description": "אפשרות Linux בבורר מערכת ההפעלה", + "value": "Linux" + }, + "downloadRpc.os.both": { + "description": "אפשרות Windows ו-Linux בבורר מערכת ההפעלה", + "value": "Windows ו-Linux" + }, + "downloadRpc.profile.hint": { + "description": "רמז לבורר הפרופיל", + "value": "פרופיל ה-AMT שבו המכשיר מופעל. ניהול הפרופילים מתבצע בדף הפרופילים." + }, + "downloadRpc.domain.hint": { + "description": "רמז לבורר הדומיין", + "value": "נדרש עבור Admin Control Mode: הדומיין שאישור ההקצאה שלו תואם לסיומת ה-DNS של המכשיר." } } diff --git a/src/assets/i18n/it.json b/src/assets/i18n/it.json index 2fc13d98e..03c8d4e6c 100644 --- a/src/assets/i18n/it.json +++ b/src/assets/i18n/it.json @@ -3262,5 +3262,165 @@ "remotePlatformErase.capUnsupported": { "description": "Didascalia mostrata su una riga di capacità quando il dispositivo non la supporta", "value": "Non supportato su questo dispositivo" + }, + "downloadRpc.title": { + "description": "Titolo della pagina Scarica RPC", + "value": "Scarica RPC" + }, + "downloadRpc.preview": { + "description": "Etichetta che indica Scarica RPC come funzionalità in anteprima", + "value": "Funzionalità in anteprima" + }, + "downloadRpc.serverUrl.label": { + "description": "Etichetta del campo URL del server Console", + "value": "URL del server" + }, + "downloadRpc.serverUrl.hint": { + "description": "Suggerimento del campo URL del server Console", + "value": "URL di base con cui il dispositivo raggiungerà Console, ad es. https://console.example.com:8181" + }, + "downloadRpc.serverUrl.invalid": { + "description": "Errore di convalida dell’URL del server Console", + "value": "Inserisci un URL assoluto che inizi con http:// o https://" + }, + "downloadRpc.serverUrl.localWarning": { + "description": "Avviso quando l’URL del server punta al loopback", + "value": "Questo indirizzo punta al computer su cui è in esecuzione questo browser. rpc-go viene eseguito sul dispositivo AMT, quindi raggiungerà Console solo se si tratta dello stesso computer, cosa sconsigliata. Usa il nome host o l’IP raggiungibile dal dispositivo." + }, + "downloadRpc.tokenTtl.label": { + "description": "Etichetta del selettore della durata del token", + "value": "Durata del token" + }, + "downloadRpc.tokenTtl.hint": { + "description": "Suggerimento del selettore della durata del token", + "value": "Per quanto tempo il token generato resta valido. Più breve è più sicuro; il pacchetto smette di funzionare alla scadenza." + }, + "downloadRpc.tokenTtl.15m": { + "description": "Opzione durata del token: 15 minuti", + "value": "15 minuti" + }, + "downloadRpc.tokenTtl.1h": { + "description": "Opzione durata del token: 1 ora", + "value": "1 ora" + }, + "downloadRpc.tokenTtl.8h": { + "description": "Opzione durata del token: 8 ore", + "value": "8 ore" + }, + "downloadRpc.tokenTtl.24h": { + "description": "Opzione durata del token: 24 ore", + "value": "24 ore" + }, + "downloadRpc.command.label": { + "description": "Etichetta del selettore del comando RPC", + "value": "Comando" + }, + "downloadRpc.command.activate": { + "description": "Opzione del comando Attiva", + "value": "Attiva" + }, + "downloadRpc.command.deactivate": { + "description": "Opzione del comando Disattiva", + "value": "Disattiva" + }, + "downloadRpc.version.label": { + "description": "Etichetta del selettore della versione di rpc-go", + "value": "Versione di rpc-go" + }, + "downloadRpc.os.label": { + "description": "Etichetta del selettore del sistema operativo", + "value": "Sistema operativo" + }, + "downloadRpc.profile.label": { + "description": "Etichetta del selettore del profilo", + "value": "Profilo" + }, + "downloadRpc.domain.label": { + "description": "Etichetta del selettore del dominio", + "value": "Dominio" + }, + "downloadRpc.auth.label": { + "description": "Etichetta del gruppo del metodo di autenticazione", + "value": "Autenticazione" + }, + "downloadRpc.auth.none": { + "description": "Opzione di autenticazione senza credenziali (predefinita)", + "value": "Non fornire credenziali" + }, + "downloadRpc.auth.noneNote": { + "description": "Nota mostrata quando il pacchetto non conterrà credenziali", + "value": "Il pacchetto non conterrà credenziali. Devi fornirle sul dispositivo in altro modo: passa --auth-username e --auth-password (o --auth-token) quando esegui rpc, oppure imposta le variabili d’ambiente AUTH_USERNAME e AUTH_PASSWORD (o AUTH_TOKEN)." + }, + "downloadRpc.auth.token": { + "description": "Opzione di autenticazione Genera token", + "value": "Genera token" + }, + "downloadRpc.download": { + "description": "Etichetta del pulsante Scarica", + "value": "Scarica" + }, + "downloadRpc.success": { + "description": "Messaggio di conferma del download del pacchetto", + "value": "Pacchetto scaricato" + }, + "downloadRpc.failVersions": { + "description": "Messaggio di errore nel caricamento delle versioni di rpc-go", + "value": "Impossibile caricare le versioni di rpc-go" + }, + "downloadRpc.failPackage": { + "description": "Messaggio di errore nella creazione del pacchetto", + "value": "Impossibile creare il pacchetto" + }, + "downloadRpc.failProfiles": { + "description": "Messaggio di errore nel caricamento dei profili", + "value": "Impossibile caricare i profili" + }, + "downloadRpc.failDomains": { + "description": "Messaggio di errore nel caricamento dei domini", + "value": "Impossibile caricare i domini" + }, + "downloadRpc.subtitle": { + "description": "Sottotitolo della pagina Scarica RPC", + "value": "Crea un pacchetto rpc-go pronto all’uso per attivare o disattivare Intel AMT su un dispositivo." + }, + "downloadRpc.intro.contents": { + "description": "Spiega cosa contiene il pacchetto scaricato", + "value": "rpc-go è lo strumento da riga di comando che viene eseguito sul dispositivo AMT e lo collega a Console. Il download è un file zip contenente l’eseguibile rpc-go e un config.yaml già compilato con l’indirizzo di questa Console e le opzioni scelte qui sotto." + }, + "downloadRpc.intro.usage": { + "description": "Spiega come usare il pacchetto scaricato sul dispositivo", + "value": "Copia lo zip sul dispositivo, estrailo e da quella cartella esegui \"rpc activate\" o \"rpc deactivate\" (rpc.exe su Windows) come amministratore o root. rpc-go legge config.yaml dalla cartella in cui viene eseguito." + }, + "downloadRpc.command.hint": { + "description": "Suggerimento del selettore del comando RPC", + "value": "Attiva esegue il provisioning di Intel AMT sul dispositivo con il profilo selezionato. Disattiva rimuove la configurazione AMT." + }, + "downloadRpc.version.hint": { + "description": "Suggerimento del selettore della versione di rpc-go", + "value": "Versione di rpc-go da includere nel pacchetto. È compatibile solo rpc-go v3 e vengono mostrate le 5 versioni più recenti." + }, + "downloadRpc.os.hint": { + "description": "Suggerimento del selettore del sistema operativo", + "value": "Sistema operativo del dispositivo AMT su cui verrà eseguito il pacchetto. Windows e Linux include entrambe le build in un unico pacchetto." + }, + "downloadRpc.os.windows": { + "description": "Opzione Windows del selettore del sistema operativo", + "value": "Windows" + }, + "downloadRpc.os.linux": { + "description": "Opzione Linux del selettore del sistema operativo", + "value": "Linux" + }, + "downloadRpc.os.both": { + "description": "Opzione Windows e Linux del selettore del sistema operativo", + "value": "Windows e Linux" + }, + "downloadRpc.profile.hint": { + "description": "Suggerimento del selettore del profilo", + "value": "Profilo AMT con cui viene attivato il dispositivo. I profili si gestiscono nella pagina Profili." + }, + "downloadRpc.domain.hint": { + "description": "Suggerimento del selettore del dominio", + "value": "Obbligatorio per la modalità Admin Control: il dominio il cui certificato di provisioning corrisponde al suffisso DNS del dispositivo." } } diff --git a/src/assets/i18n/ja.json b/src/assets/i18n/ja.json index 9e1007124..6fe7da98a 100644 --- a/src/assets/i18n/ja.json +++ b/src/assets/i18n/ja.json @@ -3262,5 +3262,165 @@ "remotePlatformErase.capUnsupported": { "description": "デバイスが対応していない機能の行に表示されるキャプション", "value": "このデバイスでサポートされていません" + }, + "downloadRpc.title": { + "description": "RPC ダウンロードページのタイトル", + "value": "RPC のダウンロード" + }, + "downloadRpc.preview": { + "description": "RPC のダウンロードがプレビュー機能であることを示すチップ", + "value": "プレビュー機能" + }, + "downloadRpc.serverUrl.label": { + "description": "Console サーバー URL 入力欄のラベル", + "value": "サーバー URL" + }, + "downloadRpc.serverUrl.hint": { + "description": "Console サーバー URL 入力欄のヒント", + "value": "デバイスが Console に接続するためのベース URL(例: https://console.example.com:8181)" + }, + "downloadRpc.serverUrl.invalid": { + "description": "Console サーバー URL の検証エラー", + "value": "http:// または https:// で始まる絶対 URL を入力してください" + }, + "downloadRpc.serverUrl.localWarning": { + "description": "サーバー URL がループバックを指している場合の警告", + "value": "このアドレスは、このブラウザーを実行しているマシンを指しています。rpc-go は AMT デバイス上で実行されるため、両者が同じマシンでない限り Console に接続できません(推奨されません)。デバイスから到達できるホスト名または IP アドレスを使用してください。" + }, + "downloadRpc.tokenTtl.label": { + "description": "トークン有効期間の選択欄のラベル", + "value": "トークンの有効期間" + }, + "downloadRpc.tokenTtl.hint": { + "description": "トークン有効期間の選択欄のヒント", + "value": "生成されたトークンが有効な期間です。短いほど安全です。有効期限が切れるとパッケージは動作しなくなります。" + }, + "downloadRpc.tokenTtl.15m": { + "description": "トークン有効期間の選択肢: 15 分", + "value": "15 分" + }, + "downloadRpc.tokenTtl.1h": { + "description": "トークン有効期間の選択肢: 1 時間", + "value": "1 時間" + }, + "downloadRpc.tokenTtl.8h": { + "description": "トークン有効期間の選択肢: 8 時間", + "value": "8 時間" + }, + "downloadRpc.tokenTtl.24h": { + "description": "トークン有効期間の選択肢: 24 時間", + "value": "24 時間" + }, + "downloadRpc.command.label": { + "description": "RPC コマンドの選択欄のラベル", + "value": "コマンド" + }, + "downloadRpc.command.activate": { + "description": "アクティブ化コマンドの選択肢", + "value": "アクティブ化" + }, + "downloadRpc.command.deactivate": { + "description": "非アクティブ化コマンドの選択肢", + "value": "非アクティブ化" + }, + "downloadRpc.version.label": { + "description": "rpc-go バージョンの選択欄のラベル", + "value": "rpc-go バージョン" + }, + "downloadRpc.os.label": { + "description": "オペレーティングシステムの選択欄のラベル", + "value": "オペレーティングシステム" + }, + "downloadRpc.profile.label": { + "description": "プロフィールの選択欄のラベル", + "value": "プロフィール" + }, + "downloadRpc.domain.label": { + "description": "ドメインの選択欄のラベル", + "value": "ドメイン" + }, + "downloadRpc.auth.label": { + "description": "認証方法グループのラベル", + "value": "認証" + }, + "downloadRpc.auth.none": { + "description": "資格情報なしの認証オプション(既定)", + "value": "資格情報を指定しない" + }, + "downloadRpc.auth.noneNote": { + "description": "パッケージに資格情報が含まれない場合に表示される注記", + "value": "パッケージには資格情報が含まれません。デバイス上で別の方法で指定する必要があります。rpc の実行時に --auth-username と --auth-password(または --auth-token)を渡すか、環境変数 AUTH_USERNAME と AUTH_PASSWORD(または AUTH_TOKEN)を設定してください。" + }, + "downloadRpc.auth.token": { + "description": "トークン生成の認証オプション", + "value": "トークンを生成" + }, + "downloadRpc.download": { + "description": "ダウンロードボタンのラベル", + "value": "ダウンロード" + }, + "downloadRpc.success": { + "description": "パッケージのダウンロード成功メッセージ", + "value": "パッケージをダウンロードしました" + }, + "downloadRpc.failVersions": { + "description": "rpc-go バージョンの読み込み失敗メッセージ", + "value": "rpc-go バージョンを読み込めませんでした" + }, + "downloadRpc.failPackage": { + "description": "パッケージの作成失敗メッセージ", + "value": "パッケージを作成できませんでした" + }, + "downloadRpc.failProfiles": { + "description": "プロフィールの読み込み失敗メッセージ", + "value": "プロフィールを読み込めませんでした" + }, + "downloadRpc.failDomains": { + "description": "ドメインの読み込み失敗メッセージ", + "value": "ドメインを読み込めませんでした" + }, + "downloadRpc.subtitle": { + "description": "RPC ダウンロードページのサブタイトル", + "value": "デバイスで Intel AMT をアクティブ化または非アクティブ化するための、すぐに使える rpc-go パッケージを作成します。" + }, + "downloadRpc.intro.contents": { + "description": "ダウンロードしたパッケージの内容の説明", + "value": "rpc-go は AMT デバイス上で動作し、デバイスを Console に接続するコマンドラインツールです。ダウンロードされる zip には、rpc-go の実行ファイルと、この Console のアドレスおよび下で選択したオプションが設定済みの config.yaml が含まれます。" + }, + "downloadRpc.intro.usage": { + "description": "ダウンロードしたパッケージをデバイスで使用する方法の説明", + "value": "zip をデバイスにコピーして展開し、そのフォルダーで管理者または root として \"rpc activate\" または \"rpc deactivate\"(Windows では rpc.exe)を実行してください。rpc-go は実行したフォルダーにある config.yaml を読み込みます。" + }, + "downloadRpc.command.hint": { + "description": "RPC コマンドの選択欄のヒント", + "value": "アクティブ化は、選択したプロフィールでデバイスの Intel AMT をプロビジョニングします。非アクティブ化は AMT の構成を削除します。" + }, + "downloadRpc.version.hint": { + "description": "rpc-go バージョンの選択欄のヒント", + "value": "パッケージに含める rpc-go のリリースです。互換性があるのは rpc-go v3 のみで、最新の 5 つのリリースが表示されます。" + }, + "downloadRpc.os.hint": { + "description": "オペレーティングシステムの選択欄のヒント", + "value": "パッケージを実行する AMT デバイスのオペレーティングシステムです。「Windows と Linux」を選ぶと両方のビルドが 1 つのパッケージに含まれます。" + }, + "downloadRpc.os.windows": { + "description": "オペレーティングシステムの選択肢: Windows", + "value": "Windows" + }, + "downloadRpc.os.linux": { + "description": "オペレーティングシステムの選択肢: Linux", + "value": "Linux" + }, + "downloadRpc.os.both": { + "description": "オペレーティングシステムの選択肢: Windows と Linux", + "value": "Windows と Linux" + }, + "downloadRpc.profile.hint": { + "description": "プロフィールの選択欄のヒント", + "value": "デバイスのアクティブ化に使用する AMT プロフィールです。プロフィールは「プロフィール」ページで管理します。" + }, + "downloadRpc.domain.hint": { + "description": "ドメインの選択欄のヒント", + "value": "Admin Control Mode で必須: プロビジョニング証明書がデバイスの DNS サフィックスと一致するドメインです。" } } diff --git a/src/assets/i18n/nl.json b/src/assets/i18n/nl.json index 439175801..a78d0b057 100644 --- a/src/assets/i18n/nl.json +++ b/src/assets/i18n/nl.json @@ -3270,5 +3270,165 @@ "remotePlatformErase.capUnsupported": { "description": "Bijschrift dat wordt weergegeven op een capaciteitsrij wanneer het apparaat deze niet ondersteunt", "value": "Niet ondersteund op dit apparaat" + }, + "downloadRpc.title": { + "description": "Paginatitel RPC downloaden", + "value": "RPC downloaden" + }, + "downloadRpc.preview": { + "description": "Label dat RPC downloaden markeert als previewfunctie", + "value": "Previewfunctie" + }, + "downloadRpc.serverUrl.label": { + "description": "Label van het invoerveld voor de Console-server-URL", + "value": "Server-URL" + }, + "downloadRpc.serverUrl.hint": { + "description": "Hint bij het invoerveld voor de Console-server-URL", + "value": "Basis-URL waarop het apparaat Console bereikt, bijv. https://console.example.com:8181" + }, + "downloadRpc.serverUrl.invalid": { + "description": "Validatiefout voor de Console-server-URL", + "value": "Voer een absolute URL in die begint met http:// of https://" + }, + "downloadRpc.serverUrl.localWarning": { + "description": "Waarschuwing wanneer de server-URL naar loopback verwijst", + "value": "Dit adres verwijst naar de computer waarop deze browser draait. rpc-go draait op het AMT-apparaat en bereikt Console dus alleen als beide dezelfde computer zijn, wat niet wordt aanbevolen. Gebruik de hostnaam of het IP-adres dat het apparaat kan bereiken." + }, + "downloadRpc.tokenTtl.label": { + "description": "Label van de keuzelijst voor de geldigheidsduur van het token", + "value": "Geldigheidsduur van token" + }, + "downloadRpc.tokenTtl.hint": { + "description": "Hint bij de keuzelijst voor de geldigheidsduur van het token", + "value": "Hoe lang het gegenereerde token geldig blijft. Korter is veiliger; het pakket werkt niet meer zodra het verloopt." + }, + "downloadRpc.tokenTtl.15m": { + "description": "Optie voor geldigheidsduur van token: 15 minuten", + "value": "15 minuten" + }, + "downloadRpc.tokenTtl.1h": { + "description": "Optie voor geldigheidsduur van token: 1 uur", + "value": "1 uur" + }, + "downloadRpc.tokenTtl.8h": { + "description": "Optie voor geldigheidsduur van token: 8 uur", + "value": "8 uur" + }, + "downloadRpc.tokenTtl.24h": { + "description": "Optie voor geldigheidsduur van token: 24 uur", + "value": "24 uur" + }, + "downloadRpc.command.label": { + "description": "Label van de keuzelijst voor het RPC-commando", + "value": "Commando" + }, + "downloadRpc.command.activate": { + "description": "Optie voor het commando Activeren", + "value": "Activeren" + }, + "downloadRpc.command.deactivate": { + "description": "Optie voor het commando Deactiveren", + "value": "Deactiveren" + }, + "downloadRpc.version.label": { + "description": "Label van de keuzelijst voor de rpc-go-versie", + "value": "rpc-go-versie" + }, + "downloadRpc.os.label": { + "description": "Label van de keuzelijst voor het besturingssysteem", + "value": "Besturingssysteem" + }, + "downloadRpc.profile.label": { + "description": "Label van de keuzelijst voor het profiel", + "value": "Profiel" + }, + "downloadRpc.domain.label": { + "description": "Label van de keuzelijst voor het domein", + "value": "Domein" + }, + "downloadRpc.auth.label": { + "description": "Label van de groep voor de authenticatiemethode", + "value": "Authenticatie" + }, + "downloadRpc.auth.none": { + "description": "Authenticatieoptie zonder referenties (standaard)", + "value": "Geen referenties opgeven" + }, + "downloadRpc.auth.noneNote": { + "description": "Opmerking die wordt getoond wanneer er geen referenties in het pakket worden opgenomen", + "value": "Het pakket bevat geen referenties. U moet ze op het apparaat op een andere manier opgeven: geef --auth-username en --auth-password (of --auth-token) mee bij het uitvoeren van rpc, of stel de omgevingsvariabelen AUTH_USERNAME en AUTH_PASSWORD (of AUTH_TOKEN) in." + }, + "downloadRpc.auth.token": { + "description": "Authenticatieoptie Token genereren", + "value": "Token genereren" + }, + "downloadRpc.download": { + "description": "Label van de knop Downloaden", + "value": "Downloaden" + }, + "downloadRpc.success": { + "description": "Succesmelding na het downloaden van het pakket", + "value": "Pakket gedownload" + }, + "downloadRpc.failVersions": { + "description": "Melding wanneer de rpc-go-versies niet konden worden geladen", + "value": "Kan rpc-go-versies niet laden" + }, + "downloadRpc.failPackage": { + "description": "Melding wanneer het pakket niet kon worden gemaakt", + "value": "Kan pakket niet maken" + }, + "downloadRpc.failProfiles": { + "description": "Melding wanneer de profielen niet konden worden geladen", + "value": "Kan profielen niet laden" + }, + "downloadRpc.failDomains": { + "description": "Melding wanneer de domeinen niet konden worden geladen", + "value": "Kan domeinen niet laden" + }, + "downloadRpc.subtitle": { + "description": "Ondertitel van de pagina RPC downloaden", + "value": "Maak een gebruiksklaar rpc-go-pakket om Intel AMT op een apparaat te activeren of te deactiveren." + }, + "downloadRpc.intro.contents": { + "description": "Legt uit wat het gedownloade pakket bevat", + "value": "rpc-go is het opdrachtregelprogramma dat op het AMT-apparaat draait en het met Console verbindt. De download is een zip-bestand met het rpc-go-programma en een config.yaml die al is ingevuld met het adres van deze Console en de opties die u hieronder kiest." + }, + "downloadRpc.intro.usage": { + "description": "Legt uit hoe het gedownloade pakket op het apparaat wordt gebruikt", + "value": "Kopieer de zip naar het apparaat, pak deze uit en voer vanuit die map \"rpc activate\" of \"rpc deactivate\" (rpc.exe op Windows) uit als Administrator of root. rpc-go leest config.yaml uit de map waarin het wordt uitgevoerd." + }, + "downloadRpc.command.hint": { + "description": "Hint bij de keuzelijst voor het RPC-commando", + "value": "Activeren richt Intel AMT op het apparaat in met het geselecteerde profiel. Deactiveren verwijdert de AMT-configuratie." + }, + "downloadRpc.version.hint": { + "description": "Hint bij de keuzelijst voor de rpc-go-versie", + "value": "rpc-go-versie die in het pakket komt. Alleen rpc-go v3 is compatibel en de 5 meest recente versies worden getoond." + }, + "downloadRpc.os.hint": { + "description": "Hint bij de keuzelijst voor het besturingssysteem", + "value": "Besturingssysteem van het AMT-apparaat waarop het pakket wordt uitgevoerd. Windows en Linux plaatst beide builds in één pakket." + }, + "downloadRpc.os.windows": { + "description": "Optie Windows van de keuzelijst voor het besturingssysteem", + "value": "Windows" + }, + "downloadRpc.os.linux": { + "description": "Optie Linux van de keuzelijst voor het besturingssysteem", + "value": "Linux" + }, + "downloadRpc.os.both": { + "description": "Optie Windows en Linux van de keuzelijst voor het besturingssysteem", + "value": "Windows en Linux" + }, + "downloadRpc.profile.hint": { + "description": "Hint bij de keuzelijst voor het profiel", + "value": "AMT-profiel waarmee het apparaat wordt geactiveerd. Profielen beheert u op de pagina Profielen." + }, + "downloadRpc.domain.hint": { + "description": "Hint bij de keuzelijst voor het domein", + "value": "Vereist voor Admin Control Mode: het domein waarvan het inrichtingscertificaat overeenkomt met het DNS-achtervoegsel van het apparaat." } } diff --git a/src/assets/i18n/ru.json b/src/assets/i18n/ru.json index 1e303836c..9f3f1f51d 100644 --- a/src/assets/i18n/ru.json +++ b/src/assets/i18n/ru.json @@ -3262,5 +3262,165 @@ "remotePlatformErase.capUnsupported": { "description": "Подпись в строке возможности, когда устройство её не поддерживает", "value": "Не поддерживается на этом устройстве" + }, + "downloadRpc.title": { + "description": "Заголовок страницы «Скачать RPC»", + "value": "Скачать RPC" + }, + "downloadRpc.preview": { + "description": "Метка, обозначающая «Скачать RPC» как предварительную функцию", + "value": "Предварительная функция" + }, + "downloadRpc.serverUrl.label": { + "description": "Метка поля URL сервера Console", + "value": "URL сервера" + }, + "downloadRpc.serverUrl.hint": { + "description": "Подсказка к полю URL сервера Console", + "value": "Базовый URL, по которому устройство будет обращаться к Console, например https://console.example.com:8181" + }, + "downloadRpc.serverUrl.invalid": { + "description": "Ошибка проверки URL сервера Console", + "value": "Введите абсолютный URL, начинающийся с http:// или https://" + }, + "downloadRpc.serverUrl.localWarning": { + "description": "Предупреждение, когда URL сервера указывает на loopback", + "value": "Этот адрес указывает на компьютер, на котором запущен этот браузер. rpc-go работает на устройстве AMT, поэтому доступ к Console будет только в том случае, если это один и тот же компьютер, что не рекомендуется. Используйте имя хоста или IP-адрес, доступный с устройства." + }, + "downloadRpc.tokenTtl.label": { + "description": "Метка выбора срока действия токена", + "value": "Срок действия токена" + }, + "downloadRpc.tokenTtl.hint": { + "description": "Подсказка к выбору срока действия токена", + "value": "Сколько времени созданный токен остаётся действительным. Чем короче, тем безопаснее; после истечения срока пакет перестаёт работать." + }, + "downloadRpc.tokenTtl.15m": { + "description": "Вариант срока действия токена: 15 минут", + "value": "15 минут" + }, + "downloadRpc.tokenTtl.1h": { + "description": "Вариант срока действия токена: 1 час", + "value": "1 час" + }, + "downloadRpc.tokenTtl.8h": { + "description": "Вариант срока действия токена: 8 часов", + "value": "8 часов" + }, + "downloadRpc.tokenTtl.24h": { + "description": "Вариант срока действия токена: 24 часа", + "value": "24 часа" + }, + "downloadRpc.command.label": { + "description": "Метка выбора команды RPC", + "value": "Команда" + }, + "downloadRpc.command.activate": { + "description": "Вариант команды «Активировать»", + "value": "Активировать" + }, + "downloadRpc.command.deactivate": { + "description": "Вариант команды «Деактивировать»", + "value": "Деактивировать" + }, + "downloadRpc.version.label": { + "description": "Метка выбора версии rpc-go", + "value": "Версия rpc-go" + }, + "downloadRpc.os.label": { + "description": "Метка выбора операционной системы", + "value": "Операционная система" + }, + "downloadRpc.profile.label": { + "description": "Метка выбора профиля", + "value": "Профиль" + }, + "downloadRpc.domain.label": { + "description": "Метка выбора домена", + "value": "Домен" + }, + "downloadRpc.auth.label": { + "description": "Метка группы способа аутентификации", + "value": "Аутентификация" + }, + "downloadRpc.auth.none": { + "description": "Вариант аутентификации без учётных данных (по умолчанию)", + "value": "Не указывать учётные данные" + }, + "downloadRpc.auth.noneNote": { + "description": "Примечание, когда в пакет не будут встроены учётные данные", + "value": "Пакет не будет содержать учётных данных. Их нужно указать на устройстве другим способом: передайте --auth-username и --auth-password (или --auth-token) при запуске rpc либо задайте переменные окружения AUTH_USERNAME и AUTH_PASSWORD (или AUTH_TOKEN)." + }, + "downloadRpc.auth.token": { + "description": "Вариант аутентификации «Создать токен»", + "value": "Создать токен" + }, + "downloadRpc.download": { + "description": "Текст кнопки «Скачать»", + "value": "Скачать" + }, + "downloadRpc.success": { + "description": "Сообщение об успешной загрузке пакета", + "value": "Пакет загружен" + }, + "downloadRpc.failVersions": { + "description": "Сообщение об ошибке загрузки версий rpc-go", + "value": "Не удалось загрузить версии rpc-go" + }, + "downloadRpc.failPackage": { + "description": "Сообщение об ошибке сборки пакета", + "value": "Не удалось собрать пакет" + }, + "downloadRpc.failProfiles": { + "description": "Сообщение об ошибке загрузки профилей", + "value": "Не удалось загрузить профили" + }, + "downloadRpc.failDomains": { + "description": "Сообщение об ошибке загрузки доменов", + "value": "Не удалось загрузить домены" + }, + "downloadRpc.subtitle": { + "description": "Подзаголовок страницы «Скачать RPC»", + "value": "Соберите готовый к запуску пакет rpc-go для активации или деактивации Intel AMT на устройстве." + }, + "downloadRpc.intro.contents": { + "description": "Поясняет, что содержит загруженный пакет", + "value": "rpc-go — это утилита командной строки, которая работает на устройстве AMT и подключает его к Console. Загружается zip-архив с исполняемым файлом rpc-go и файлом config.yaml, в котором уже указаны адрес этой Console и выбранные ниже параметры." + }, + "downloadRpc.intro.usage": { + "description": "Поясняет, как использовать загруженный пакет на устройстве", + "value": "Скопируйте архив на устройство, распакуйте его и из этой папки выполните \"rpc activate\" или \"rpc deactivate\" (rpc.exe в Windows) с правами администратора или root. rpc-go читает config.yaml из папки, в которой запускается." + }, + "downloadRpc.command.hint": { + "description": "Подсказка к выбору команды RPC", + "value": "«Активировать» подготавливает Intel AMT на устройстве с выбранным профилем. «Деактивировать» удаляет конфигурацию AMT." + }, + "downloadRpc.version.hint": { + "description": "Подсказка к выбору версии rpc-go", + "value": "Версия rpc-go для пакета. Совместима только rpc-go v3; показаны 5 последних версий." + }, + "downloadRpc.os.hint": { + "description": "Подсказка к выбору операционной системы", + "value": "Операционная система устройства AMT, на котором будет запускаться пакет. «Windows и Linux» помещает обе сборки в один пакет." + }, + "downloadRpc.os.windows": { + "description": "Вариант «Windows» при выборе операционной системы", + "value": "Windows" + }, + "downloadRpc.os.linux": { + "description": "Вариант «Linux» при выборе операционной системы", + "value": "Linux" + }, + "downloadRpc.os.both": { + "description": "Вариант «Windows и Linux» при выборе операционной системы", + "value": "Windows и Linux" + }, + "downloadRpc.profile.hint": { + "description": "Подсказка к выбору профиля", + "value": "Профиль AMT, с которым активируется устройство. Профили настраиваются на странице «Профили»." + }, + "downloadRpc.domain.hint": { + "description": "Подсказка к выбору домена", + "value": "Обязательно для режима Admin Control: домен, сертификат подготовки которого соответствует DNS-суффиксу устройства." } } diff --git a/src/assets/i18n/sv.json b/src/assets/i18n/sv.json index 7b5999397..1ac7b7483 100644 --- a/src/assets/i18n/sv.json +++ b/src/assets/i18n/sv.json @@ -3134,5 +3134,165 @@ "remotePlatformErase.capUnsupported": { "description": "Bildtext som visas på en funktionsrad när enheten inte stöder den", "value": "Stöds inte på den här enheten" + }, + "downloadRpc.title": { + "description": "Sidrubrik för Ladda ned RPC", + "value": "Ladda ned RPC" + }, + "downloadRpc.preview": { + "description": "Etikett som markerar Ladda ned RPC som en förhandsversion", + "value": "Förhandsfunktion" + }, + "downloadRpc.serverUrl.label": { + "description": "Etikett för fältet för Console-serverns URL", + "value": "Server-URL" + }, + "downloadRpc.serverUrl.hint": { + "description": "Tips för fältet för Console-serverns URL", + "value": "Bas-URL som enheten når Console på, t.ex. https://console.example.com:8181" + }, + "downloadRpc.serverUrl.invalid": { + "description": "Valideringsfel för Console-serverns URL", + "value": "Ange en absolut URL som börjar med http:// eller https://" + }, + "downloadRpc.serverUrl.localWarning": { + "description": "Varning när server-URL:en pekar på loopback", + "value": "Den här adressen pekar på datorn som kör den här webbläsaren. rpc-go körs på AMT-enheten och når därför bara Console om båda är samma dator, vilket inte rekommenderas. Använd det värdnamn eller den IP-adress som enheten kan nå." + }, + "downloadRpc.tokenTtl.label": { + "description": "Etikett för val av tokenets giltighetstid", + "value": "Tokenets giltighetstid" + }, + "downloadRpc.tokenTtl.hint": { + "description": "Tips för val av tokenets giltighetstid", + "value": "Hur länge den genererade token är giltig. Kortare är säkrare; paketet slutar fungera när den går ut." + }, + "downloadRpc.tokenTtl.15m": { + "description": "Alternativ för giltighetstid: 15 minuter", + "value": "15 minuter" + }, + "downloadRpc.tokenTtl.1h": { + "description": "Alternativ för giltighetstid: 1 timme", + "value": "1 timme" + }, + "downloadRpc.tokenTtl.8h": { + "description": "Alternativ för giltighetstid: 8 timmar", + "value": "8 timmar" + }, + "downloadRpc.tokenTtl.24h": { + "description": "Alternativ för giltighetstid: 24 timmar", + "value": "24 timmar" + }, + "downloadRpc.command.label": { + "description": "Etikett för val av RPC-kommando", + "value": "Kommando" + }, + "downloadRpc.command.activate": { + "description": "Alternativ för kommandot Aktivera", + "value": "Aktivera" + }, + "downloadRpc.command.deactivate": { + "description": "Alternativ för kommandot Inaktivera", + "value": "Inaktivera" + }, + "downloadRpc.version.label": { + "description": "Etikett för val av rpc-go-version", + "value": "rpc-go-version" + }, + "downloadRpc.os.label": { + "description": "Etikett för val av operativsystem", + "value": "Operativsystem" + }, + "downloadRpc.profile.label": { + "description": "Etikett för val av profil", + "value": "Profil" + }, + "downloadRpc.domain.label": { + "description": "Etikett för val av domän", + "value": "Domän" + }, + "downloadRpc.auth.label": { + "description": "Etikett för gruppen för autentiseringsmetod", + "value": "Autentisering" + }, + "downloadRpc.auth.none": { + "description": "Autentiseringsalternativ utan autentiseringsuppgifter (standard)", + "value": "Ange inga autentiseringsuppgifter" + }, + "downloadRpc.auth.noneNote": { + "description": "Anteckning som visas när inga autentiseringsuppgifter bäddas in i paketet", + "value": "Paketet innehåller inga autentiseringsuppgifter. Du måste ange dem på enheten på annat sätt: skicka --auth-username och --auth-password (eller --auth-token) när du kör rpc, eller ställ in miljövariablerna AUTH_USERNAME och AUTH_PASSWORD (eller AUTH_TOKEN)." + }, + "downloadRpc.auth.token": { + "description": "Autentiseringsalternativet Generera token", + "value": "Generera token" + }, + "downloadRpc.download": { + "description": "Etikett för knappen Ladda ned", + "value": "Ladda ned" + }, + "downloadRpc.success": { + "description": "Meddelande när paketet har laddats ned", + "value": "Paketet har laddats ned" + }, + "downloadRpc.failVersions": { + "description": "Meddelande när rpc-go-versioner inte kunde läsas in", + "value": "Det gick inte att läsa in rpc-go-versioner" + }, + "downloadRpc.failPackage": { + "description": "Meddelande när paketet inte kunde skapas", + "value": "Det gick inte att skapa paketet" + }, + "downloadRpc.failProfiles": { + "description": "Meddelande när profiler inte kunde läsas in", + "value": "Det gick inte att läsa in profiler" + }, + "downloadRpc.failDomains": { + "description": "Meddelande när domäner inte kunde läsas in", + "value": "Det gick inte att läsa in domäner" + }, + "downloadRpc.subtitle": { + "description": "Underrubrik för sidan Ladda ned RPC", + "value": "Skapa ett färdigt rpc-go-paket för att aktivera eller inaktivera Intel AMT på en enhet." + }, + "downloadRpc.intro.contents": { + "description": "Förklarar vad det nedladdade paketet innehåller", + "value": "rpc-go är kommandoradsverktyget som körs på AMT-enheten och ansluter den till Console. Nedladdningen är en zip-fil med den körbara rpc-go-filen och en config.yaml som redan innehåller den här Consolens adress och alternativen du väljer nedan." + }, + "downloadRpc.intro.usage": { + "description": "Förklarar hur det nedladdade paketet används på enheten", + "value": "Kopiera zip-filen till enheten, packa upp den och kör \"rpc activate\" eller \"rpc deactivate\" (rpc.exe i Windows) från den mappen som administratör eller root. rpc-go läser config.yaml från mappen där den körs." + }, + "downloadRpc.command.hint": { + "description": "Tips för val av RPC-kommando", + "value": "Aktivera etablerar Intel AMT på enheten med den valda profilen. Inaktivera tar bort AMT-konfigurationen." + }, + "downloadRpc.version.hint": { + "description": "Tips för val av rpc-go-version", + "value": "rpc-go-version som paketeras. Endast rpc-go v3 är kompatibel, och de 5 senaste versionerna visas." + }, + "downloadRpc.os.hint": { + "description": "Tips för val av operativsystem", + "value": "Operativsystemet på AMT-enheten där paketet ska köras. Windows och Linux lägger båda versionerna i ett paket." + }, + "downloadRpc.os.windows": { + "description": "Alternativet Windows för val av operativsystem", + "value": "Windows" + }, + "downloadRpc.os.linux": { + "description": "Alternativet Linux för val av operativsystem", + "value": "Linux" + }, + "downloadRpc.os.both": { + "description": "Alternativet Windows och Linux för val av operativsystem", + "value": "Windows och Linux" + }, + "downloadRpc.profile.hint": { + "description": "Tips för val av profil", + "value": "AMT-profilen som enheten aktiveras med. Profiler hanteras på sidan Profiler." + }, + "downloadRpc.domain.hint": { + "description": "Tips för val av domän", + "value": "Krävs för Admin Control Mode: domänen vars etableringscertifikat matchar enhetens DNS-suffix." } } diff --git a/src/models/models.ts b/src/models/models.ts index 06b395413..87802d55c 100644 --- a/src/models/models.ts +++ b/src/models/models.ts @@ -626,3 +626,35 @@ export interface DisplaySelectionRequest { export interface ServerFeatures { ciraEnabled: boolean } + +export type RpcCommand = 'activate' | 'deactivate' +export type RpcAuthMode = 'none' | 'token' + +// One downloadable rpc-go build, as returned by Console. +export interface RpcAsset { + os: string // e.g. 'windows' | 'linux' + arch: string // e.g. 'x64' | 'x86' +} + +// An rpc-go release (v3+, betas included) returned by Console. +export interface RpcRelease { + version: string + assets: RpcAsset[] +} + +export interface PackageAuth { + mode: RpcAuthMode +} + +// Body posted to POST /api/package. +export interface PackageRequest { + command: RpcCommand + version: string + os: string + arch: string + auth: PackageAuth + serverUrl: string // base URL rpc-go is pointed at + tokenTtl?: string // token auth only + profile?: string // activate only + domain?: string // activate + ACM only +}