From daf1cdce657621f897ab5f8a43bfe3ada71a7381 Mon Sep 17 00:00:00 2001 From: GraceSolutions Date: Mon, 8 Jun 2026 17:59:52 -0400 Subject: [PATCH 1/2] Rename spec --- docs/{DesignSpec.md => DesignSpec_PSInfisicalAPI.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename docs/{DesignSpec.md => DesignSpec_PSInfisicalAPI.md} (100%) diff --git a/docs/DesignSpec.md b/docs/DesignSpec_PSInfisicalAPI.md similarity index 100% rename from docs/DesignSpec.md rename to docs/DesignSpec_PSInfisicalAPI.md From 94bd15a8f8676fe0b5a3c3a7153e40e7924cc5fa Mon Sep 17 00:00:00 2001 From: GraceSolutions Date: Wed, 10 Jun 2026 16:20:13 -0400 Subject: [PATCH 2/2] Rename prefix parameters to SecretsPrefix/ForceSecretsPrefix and -Secret to -Secrets Renames -Prefix to -SecretsPrefix and -ForcePrefix to -ForceSecretsPrefix across ConvertTo-InfisicalSecretDictionary, Import-InfisicalSecret, Export-InfisicalSecrets, and Start-InfisicalProcess. Start-InfisicalProcess also renames the pipeline parameter -Secret to -Secrets. The previous names remain available as parameter aliases (Prefix, ForcePrefix, Secret) for backward compatibility. Internal InfisicalProcessOptions properties renamed to match. --- CHANGELOG.md | 30 +++++++++++------- Module/PSInfisicalAPI/PSInfisicalAPI.psd1 | 4 +-- Module/PSInfisicalAPI/bin/PSInfisicalAPI.dll | Bin 424448 -> 424960 bytes docs/DesignSpec_PSInfisicalAPI.md | 10 +++--- ...onvertToInfisicalSecretDictionaryCmdlet.cs | 8 +++-- .../Cmdlets/ExportInfisicalSecretsCmdlet.cs | 10 +++--- .../Cmdlets/ImportInfisicalSecretCmdlet.cs | 8 +++-- .../Cmdlets/StartInfisicalProcessCmdlet.cs | 18 ++++++----- .../Process/InfisicalProcessOptions.cs | 4 +-- .../Process/InfisicalProcessRunnerHelpers.cs | 2 +- 10 files changed, 56 insertions(+), 38 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 46a3eba..d554b9a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,17 +6,25 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) loos ## Unreleased +## 2026.06.10.2018 + +- Build produced from commit daf1cdce6576. + +## Unreleased (carried forward) + +- Renamed prefix-related parameters across `ConvertTo-InfisicalSecretDictionary`, `Import-InfisicalSecret`, `Export-InfisicalSecrets`, and `Start-InfisicalProcess`: `-Prefix` is now `-SecretsPrefix` and `-ForcePrefix` is now `-ForceSecretsPrefix`. `Start-InfisicalProcess` also renames the pipeline parameter `-Secret` to `-Secrets`. The previous names remain available as parameter aliases (`Prefix`, `ForcePrefix`, `Secret`) for backward compatibility. + ## 2026.06.07.1435 - Build produced from commit 97193d46f2ff. -## Unreleased (carried forward) +## Unreleased (carried forward) ## 2026.06.07.1426 - Build produced from commit b5575222eb36. -## Unreleased (carried forward) +## Unreleased (carried forward) - Added `-ForcePrefix` switch to `ConvertTo-InfisicalSecretDictionary`, `Import-InfisicalSecret`, `Export-InfisicalSecrets`, and `Start-InfisicalProcess`. When `-Prefix` is supplied, names that already start with the prefix (case-insensitive) are now left as-is to prevent double-prefixing (e.g. `MYAPP_API_KEY` stays `MYAPP_API_KEY` when `-Prefix 'MYAPP_'` is supplied). Pass `-ForcePrefix` to restore unconditional prepending. Centralized in a new `PSInfisicalAPI.Common.InfisicalPrefix.Apply` helper. @@ -43,7 +51,7 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) loos - Added `Get-InfisicalSANList` cmdlet: emits a deduplicated SAN candidate set containing the local device name, the device name suffixed with each non-empty DNS suffix found across operational adapters and the system primary domain, every IPv4 unicast address falling within RFC 1918 (10/8, 172.16/12, 192.168/16) or CGNAT (100.64/10), and the IPv4/IPv6 loopback addresses (127.0.0.1, ::1). Intended to feed `Request-InfisicalCertificate -DnsName` directly. - `Get-InfisicalSANList`: added optional `-InclusionExpression` and `-ExclusionExpression` case-insensitive regex filters. Applied in fetch -> include -> exclude -> output order after the deduplicated set is built; both default to unset (no filtering). - `Get-InfisicalSANList`: output is a single strongly-typed `System.String[]` array emitted non-enumerated (`OutputType(string[])`), so variable assignment yields `string[]` rather than `object[]`. This lets `[System.Collections.Generic.List[string]]::AddRange()` consume the result directly and lets the array bind straight to `string[]` parameters such as `Request-InfisicalCertificate -DnsName`. -- `build.ps1` `CmdletsToExport` and `Test-ModuleImports` expected list now contain 51 cmdlets. `docs/DesignSpec.md` updated with `§16.7` (Organizations) and `§16.8` (Sub-Organizations); full MAML help added for all 9 new cmdlets in `Module/PSInfisicalAPI/en-US/PSInfisicalAPI.dll-Help.xml`. +- `build.ps1` `CmdletsToExport` and `Test-ModuleImports` expected list now contain 51 cmdlets. `docs/DesignSpec.md` updated with `§16.7` (Organizations) and `§16.8` (Sub-Organizations); full MAML help added for all 9 new cmdlets in `Module/PSInfisicalAPI/en-US/PSInfisicalAPI.dll-Help.xml`. ## 2026.06.06.2229 @@ -205,7 +213,7 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) loos - **BREAKING**: Removed the plural-noun discovery cmdlets `Get-InfisicalProjects`, `Get-InfisicalEnvironments`, `Get-InfisicalFolders`, `Get-InfisicalTags`, `Get-InfisicalSecrets`, and `Get-InfisicalCertificates`. Their behavior is now folded into the corresponding singular cmdlets via a `List` (default) / single-record parameter set pair, matching the existing `Get-InfisicalCertificateAuthority` precedent. Callers should drop the trailing `s`; invocation without the identity parameter (`-ProjectId`, `-EnvironmentSlugOrId`, `-FolderNameOrId`, `-TagSlugOrId`, `-SecretName`, `-SerialNumber`) now returns the list, and supplying the identity parameter returns the single record. No back-compat aliases were added. - Added `Get-InfisicalPkiSubscriber` with `List` (default) and `ByName` parameter sets, backed by new `InfisicalPkiClient.ListPkiSubscribers` and `GetPkiSubscriber` methods, an `InfisicalPkiSubscriber` model, and corresponding DTOs/mapper. Use the emitted `Name` (slug) on `Request-InfisicalCertificate -PkiSubscriberSlug`. - **Bug fix**: `Request-InfisicalCertificate -PkiSubscriberSlug ...` was returning 404 because the registry's `SignCertificateBySubscriber` endpoint pointed at `/api/v1/pki/pki-subscribers/{subscriberName}/sign-certificate` and `/api/v1/cert-manager/pki-subscribers/...`. Per Infisical's `v1/index.ts`, the subscriber router is mounted at `/pki/subscribers`, so the single correct path is `/api/v1/pki/subscribers/{subscriberName}/sign-certificate`. The redundant `cert-manager` template was removed; the PKI endpoint registry tests were updated to match. -- Updated MAML help in `Module/PSInfisicalAPI/en-US/PSInfisicalAPI.dll-Help.xml`: the six consolidated cmdlets and the new `Get-InfisicalPkiSubscriber` each ship three examples — two straight-line invocations (one per parameter set) plus one `OrderedDictionary` splat example. All in-text references to the removed plural cmdlets across other cmdlets' examples were updated to the singular form. +- Updated MAML help in `Module/PSInfisicalAPI/en-US/PSInfisicalAPI.dll-Help.xml`: the six consolidated cmdlets and the new `Get-InfisicalPkiSubscriber` each ship three examples — two straight-line invocations (one per parameter set) plus one `OrderedDictionary` splat example. All in-text references to the removed plural cmdlets across other cmdlets' examples were updated to the singular form. - `build.ps1`: `CmdletsToExport` and the `Test-ModuleImports` expected cmdlet list were updated to drop the six plural cmdlets and add `Get-InfisicalPkiSubscriber` (total: 34 exported cmdlets). ## 2026.06.04.1825 @@ -283,9 +291,9 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) loos - List/single CA and single certificate response parsing now tolerate raw arrays, wrapper objects (`{certificate: {...}}`, `{certificates: [...]}`), and nested `configuration` blocks. `InfisicalCaMapper` reads CA detail fields from `configuration` first, falling back to top-level. - `RetrieveCertificate(connection, identifier)` added on `InfisicalPkiClient`. - **New cmdlets**: - - **`Get-InfisicalCertificate`** — single-record retrieval by `-SerialNumber`/`-Id` (mandatory positional). - - **`Get-InfisicalCertificates`** — listing with light filtering (`-CommonName`, `-FriendlyName`, `-Status`, `-CaId`, `-Limit`, `-Offset`, `-NoAutoPage`). Auto-paginates by default. - - **`Request-InfisicalCertificate`** — generates a keypair locally (private key never leaves the device), submits a PKCS#10 CSR to either `pki-subscribers/{name}/sign-certificate` (`-PkiSubscriberSlug`) or `ca/{caId}/sign-certificate` (`-CertificateAuthorityId`), and returns a single `InfisicalCertificateResult` object with the leaf and chain pre-classified. The result exposes `Leaf : X509Certificate2`, `Intermediates : X509Certificate2[]`, `Root : X509Certificate2` (nullable), `Chain : X509Certificate2[]` (ordered leaf → intermediates → root, deduplicated by thumbprint), plus pass-through `SerialNumber`, `CertificatePem`, `CertificateChainPem`, and `PrivateKeyPem`. Supports `-Subject` (`IDictionary` with `CN`/`C`/`ST`/`L`/`O`/`OU`/`E` keys) merged with individual `-CommonName`/`-Country`/etc. parameters (individual params win), `-DnsName`/`-IpAddress` SANs (auto-populated from local FQDN when omitted). Idempotency: scans the local `X509Store` for an existing certificate matching `CN` and an Infisical-known serial number; returns the existing certificate wrapped in an `InfisicalCertificateResult` whose `Intermediates`/`Root`/`Chain` are populated by walking the local trust stores via `X509Chain` (no network calls, revocation checks disabled), and whose `CertificatePem`/`CertificateChainPem` are reconstructed from the resolved certs. Reuse is short-circuited unless `-Force` or `-AllowRenewal` (with optional `-RenewalThresholdDays`, default 30) requests a new one. Installation: `-Install` adds the leaf to `-StoreName`/`-StoreLocation` (default `My`/`CurrentUser`); `-InstallChain` additionally places intermediates into `CertificateAuthority` and self-signed roots into `Root` for the same `-StoreLocation`. `-KeyStorageFlags` is passed through to `X509Certificate2` import. + - **`Get-InfisicalCertificate`** — single-record retrieval by `-SerialNumber`/`-Id` (mandatory positional). + - **`Get-InfisicalCertificates`** — listing with light filtering (`-CommonName`, `-FriendlyName`, `-Status`, `-CaId`, `-Limit`, `-Offset`, `-NoAutoPage`). Auto-paginates by default. + - **`Request-InfisicalCertificate`** — generates a keypair locally (private key never leaves the device), submits a PKCS#10 CSR to either `pki-subscribers/{name}/sign-certificate` (`-PkiSubscriberSlug`) or `ca/{caId}/sign-certificate` (`-CertificateAuthorityId`), and returns a single `InfisicalCertificateResult` object with the leaf and chain pre-classified. The result exposes `Leaf : X509Certificate2`, `Intermediates : X509Certificate2[]`, `Root : X509Certificate2` (nullable), `Chain : X509Certificate2[]` (ordered leaf → intermediates → root, deduplicated by thumbprint), plus pass-through `SerialNumber`, `CertificatePem`, `CertificateChainPem`, and `PrivateKeyPem`. Supports `-Subject` (`IDictionary` with `CN`/`C`/`ST`/`L`/`O`/`OU`/`E` keys) merged with individual `-CommonName`/`-Country`/etc. parameters (individual params win), `-DnsName`/`-IpAddress` SANs (auto-populated from local FQDN when omitted). Idempotency: scans the local `X509Store` for an existing certificate matching `CN` and an Infisical-known serial number; returns the existing certificate wrapped in an `InfisicalCertificateResult` whose `Intermediates`/`Root`/`Chain` are populated by walking the local trust stores via `X509Chain` (no network calls, revocation checks disabled), and whose `CertificatePem`/`CertificateChainPem` are reconstructed from the resolved certs. Reuse is short-circuited unless `-Force` or `-AllowRenewal` (with optional `-RenewalThresholdDays`, default 30) requests a new one. Installation: `-Install` adds the leaf to `-StoreName`/`-StoreLocation` (default `My`/`CurrentUser`); `-InstallChain` additionally places intermediates into `CertificateAuthority` and self-signed roots into `Root` for the same `-StoreLocation`. `-KeyStorageFlags` is passed through to `X509Certificate2` import. - **Multi-algorithm CSR support** on `Request-InfisicalCertificate` via split parameters: `-KeyAlgorithm` (`Rsa`/`Ecdsa`/`Ed25519`, default `Rsa`), `-KeySize` (`2048`/`3072`/`4096`, default `2048`, applies to RSA only), `-Curve` (`P256`/`P384`, default `P256`, applies to ECDSA only). Signature algorithms are picked automatically: SHA256WITHRSA for RSA, SHA256WITHECDSA / SHA384WITHECDSA for ECDSA P-256/P-384, and Ed25519 (pure-EdDSA) for Ed25519. The underlying `InfisicalCsrBuilder.Build(subject, dns, ip, options)` API was updated to take an `InfisicalCsrOptions` object in place of the prior `keySize` int. - **Sign-certificate endpoint registrations**: `SignCertificateBySubscriber` and `SignCertificateByCa` registered with both `/api/v1/pki/...` and `/api/v1/cert-manager/...` candidate paths and marked `ContainsSecretMaterialInResponse = true`. @@ -307,7 +315,7 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) loos ## Unreleased (carried forward) -- **CI — Gitea artifact upload fix**: Replaced `actions/upload-artifact@v4` and `actions/download-artifact@v4` with the Gitea-compatible forks `christopherhx/gitea-upload-artifact@v4` and `christopherhx/gitea-download-artifact@v4` in `.gitea/workflows/publish-psgallery.yml`. The upstream v4 actions abort on Gitea because Gitea is detected as GHES, which the upstream v4 actions do not support (see [go-gitea/gitea#28853](https://github.com/go-gitea/gitea/issues/28853)). +- **CI — Gitea artifact upload fix**: Replaced `actions/upload-artifact@v4` and `actions/download-artifact@v4` with the Gitea-compatible forks `christopherhx/gitea-upload-artifact@v4` and `christopherhx/gitea-download-artifact@v4` in `.gitea/workflows/publish-psgallery.yml`. The upstream v4 actions abort on Gitea because Gitea is detected as GHES, which the upstream v4 actions do not support (see [go-gitea/gitea#28853](https://github.com/go-gitea/gitea/issues/28853)). ## 2026.06.04.0123 @@ -315,7 +323,7 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) loos ## Unreleased (carried forward) -- **M10 polish — formatting, type metadata, and PKI route aliases**: +- **M10 polish — formatting, type metadata, and PKI route aliases**: - Added default table views and `DefaultDisplayPropertySet` entries for `InfisicalCertificateAuthority`, `InfisicalCertificate`, and `InfisicalCertificateBundle` in the module `Format.ps1xml` / `Types.ps1xml`. - Realigned PKI endpoint registry to current Infisical paths: `ListInternalCertificateAuthorities` and `RetrieveInternalCertificateAuthority` now use `/api/v1/cert-manager/ca/internal[/{caId}]` as primary, with legacy `/api/v1/pki/ca/internal[/{caId}]` retained as a fallback alias. `GetCertificateBundle` and `RetrieveCertificate` similarly carry `cert-manager` fallback aliases. - `InfisicalApiInvoker.InvokeWithCandidateFallback` walks the candidate list and falls back on `404`/`405`, used by `InfisicalPkiClient` so older self-hosted Infisical instances are tolerated transparently. @@ -326,7 +334,7 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) loos ## Unreleased (carried forward) -- **M10 — PKI Internal CAs, Certificates & Windows Store integration**: +- **M10 — PKI Internal CAs, Certificates & Windows Store integration**: - **`Get-InfisicalCertificateAuthority`** lists internal certificate authorities for the current project, or returns a single CA with `-CaId`. - **`Search-InfisicalCertificate`** wraps `POST /api/v1/projects/{projectId}/certificates/search` with rich filters (`-CommonName`, `-FriendlyName`, `-Search`, `-Status`, `-CaId`, `-ProfileId`, `-ApplicationId`, `-EnrollmentType`, `-KeyAlgorithm`, `-SignatureAlgorithm`, `-Source`, `-NotAfterFrom/To`, `-NotBeforeFrom/To`, `-SortBy/-SortOrder`, `-Limit/-Offset`). Auto-paginates unless `-NoAutoPage` is set. - **`ConvertTo-InfisicalCertificate`** accepts an `InfisicalCertificate`, `InfisicalCertificateBundle`, or `-SerialNumber`, fetches the bundle endpoint when needed, and emits a `System.Security.Cryptography.X509Certificates.X509Certificate2` with the private key attached. `-NoPrivateKey` skips key parsing; `-IncludeChain` additionally emits intermediates; `-KeyStorageFlags` controls import behavior. @@ -353,7 +361,7 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) loos ## 2026.06.03.2207 - Build produced from commit 09c3d5c68bbc. -- **M9 — Bulk, Duplicate & Inheritance**: +- **M9 — Bulk, Duplicate & Inheritance**: - **Bulk parameter sets** added to `New-InfisicalSecret`, `Update-InfisicalSecret`, and `Remove-InfisicalSecret` accepting `-Secrets Hashtable[]`; client methods `CreateBatch`/`UpdateBatch`/`DeleteBatch` wrap `POST|PATCH|DELETE /api/v3/secrets/batch/raw`. - **`Copy-InfisicalSecret`** cmdlet added, wrapping `POST /api/v4/secrets/duplicate` with source/destination environment + path parameters and per-attribute copy toggles. - **Connection inheritance** centralized in `InfisicalCmdletBase` (`ResolveProjectId`/`ResolveEnvironment`/`ResolveSecretPath`/`ResolveApiVersion`/`ResolveOrganizationId`). Explicit parameters always win; missing values fall back to the active connection and emit a `-Verbose` line. diff --git a/Module/PSInfisicalAPI/PSInfisicalAPI.psd1 b/Module/PSInfisicalAPI/PSInfisicalAPI.psd1 index 92f4aaa..a730dbe 100644 --- a/Module/PSInfisicalAPI/PSInfisicalAPI.psd1 +++ b/Module/PSInfisicalAPI/PSInfisicalAPI.psd1 @@ -1,6 +1,6 @@ @{ RootModule = 'PSInfisicalAPI.psm1' - ModuleVersion = '2026.06.07.1435' + ModuleVersion = '2026.06.10.2018' GUID = 'b8a2f3d4-7c51-4d2f-9e6a-1f0c8b3d4e51' Author = 'Grace Solutions' CompanyName = 'Grace Solutions' @@ -74,7 +74,7 @@ LicenseUri = 'https://www.gnu.org/licenses/agpl-3.0.html' ProjectUri = 'https://prod.git.gracesolution.info/gsadmin/PSInfisicalAPI' ReleaseNotes = 'See CHANGELOG.md in the project repository for release history.' - CommitHash = '97193d46f2ff' + CommitHash = 'daf1cdce6576' } } } \ No newline at end of file diff --git a/Module/PSInfisicalAPI/bin/PSInfisicalAPI.dll b/Module/PSInfisicalAPI/bin/PSInfisicalAPI.dll index f6b314266047cf77a19cfaab5d88adc6a83cbcbd..f776afa8ec738c78093896217c67154eb4820199 100644 GIT binary patch delta 80137 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ℜidl@>IXKtt?1FRMO?Vc@D%kT% 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 diff --git a/docs/DesignSpec_PSInfisicalAPI.md b/docs/DesignSpec_PSInfisicalAPI.md index d63f3af..e7946ad 100644 --- a/docs/DesignSpec_PSInfisicalAPI.md +++ b/docs/DesignSpec_PSInfisicalAPI.md @@ -1222,7 +1222,8 @@ Export-InfisicalSecrets ` [-Scope ] ` [-Force] ` [-Encoding ] ` - [-Prefix ] + [-SecretsPrefix ] ` + [-ForceSecretsPrefix] ``` ## Parameter Rules @@ -1521,8 +1522,9 @@ Start-InfisicalProcess [-SecureArgumentList] [-LogOutput] [-ContinueOnError] - [-Secret ] - [-Prefix ] + [-Secrets ] + [-SecretsPrefix ] + [-ForceSecretsPrefix] ``` Behavior: @@ -1530,7 +1532,7 @@ Behavior: ```text Buffer pipeline InfisicalSecret objects in ProcessRecord. Decrypt secrets only into ProcessStartInfo.Environment. -Apply -Prefix to each secret name before injection. +Apply -SecretsPrefix to each secret name before injection. Never write secret plaintext to user or machine environment scope. Honor -WhatIf / -Confirm. Default -AcceptableExitCodeList = @('0','3010'). diff --git a/src/PSInfisicalAPI/Cmdlets/ConvertToInfisicalSecretDictionaryCmdlet.cs b/src/PSInfisicalAPI/Cmdlets/ConvertToInfisicalSecretDictionaryCmdlet.cs index 68768fb..1bc6213 100644 --- a/src/PSInfisicalAPI/Cmdlets/ConvertToInfisicalSecretDictionaryCmdlet.cs +++ b/src/PSInfisicalAPI/Cmdlets/ConvertToInfisicalSecretDictionaryCmdlet.cs @@ -23,10 +23,12 @@ namespace PSInfisicalAPI.Cmdlets public SwitchParameter AsPlainText { get; set; } [Parameter] - public string Prefix { get; set; } + [Alias("Prefix")] + public string SecretsPrefix { get; set; } [Parameter] - public SwitchParameter ForcePrefix { get; set; } + [Alias("ForcePrefix")] + public SwitchParameter ForceSecretsPrefix { get; set; } private readonly List _buffer = new List(); @@ -70,7 +72,7 @@ namespace PSInfisicalAPI.Cmdlets foreach (InfisicalSecret secret in _buffer) { - string key = InfisicalPrefix.Apply(secret.SecretName ?? string.Empty, Prefix, ForcePrefix.IsPresent); + string key = InfisicalPrefix.Apply(secret.SecretName ?? string.Empty, SecretsPrefix, ForceSecretsPrefix.IsPresent); if (dictionary.ContainsKey(key)) { diff --git a/src/PSInfisicalAPI/Cmdlets/ExportInfisicalSecretsCmdlet.cs b/src/PSInfisicalAPI/Cmdlets/ExportInfisicalSecretsCmdlet.cs index 21860dd..eb4f459 100644 --- a/src/PSInfisicalAPI/Cmdlets/ExportInfisicalSecretsCmdlet.cs +++ b/src/PSInfisicalAPI/Cmdlets/ExportInfisicalSecretsCmdlet.cs @@ -39,10 +39,12 @@ namespace PSInfisicalAPI.Cmdlets public InfisicalExportEncoding Encoding { get; set; } = InfisicalExportEncoding.UTF8; [Parameter] - public string Prefix { get; set; } + [Alias("Prefix")] + public string SecretsPrefix { get; set; } [Parameter] - public SwitchParameter ForcePrefix { get; set; } + [Alias("ForcePrefix")] + public SwitchParameter ForceSecretsPrefix { get; set; } private readonly List _buffer = new List(); @@ -75,7 +77,7 @@ namespace PSInfisicalAPI.Cmdlets InfisicalExportRequest request = new InfisicalExportRequest { - Secrets = ApplyPrefix(_buffer, Prefix, ForcePrefix.IsPresent), + Secrets = ApplySecretsPrefix(_buffer, SecretsPrefix, ForceSecretsPrefix.IsPresent), Format = Format, Path = Path, Scope = Scope, @@ -92,7 +94,7 @@ namespace PSInfisicalAPI.Cmdlets } } - private static InfisicalSecret[] ApplyPrefix(List source, string prefix, bool force) + private static InfisicalSecret[] ApplySecretsPrefix(List source, string prefix, bool force) { if (string.IsNullOrEmpty(prefix)) { return source.ToArray(); } diff --git a/src/PSInfisicalAPI/Cmdlets/ImportInfisicalSecretCmdlet.cs b/src/PSInfisicalAPI/Cmdlets/ImportInfisicalSecretCmdlet.cs index 87a63ab..636c1a8 100644 --- a/src/PSInfisicalAPI/Cmdlets/ImportInfisicalSecretCmdlet.cs +++ b/src/PSInfisicalAPI/Cmdlets/ImportInfisicalSecretCmdlet.cs @@ -30,10 +30,12 @@ namespace PSInfisicalAPI.Cmdlets public SwitchParameter AsPlainText { get; set; } [Parameter] - public string Prefix { get; set; } + [Alias("Prefix")] + public string SecretsPrefix { get; set; } [Parameter] - public SwitchParameter ForcePrefix { get; set; } + [Alias("ForcePrefix")] + public SwitchParameter ForceSecretsPrefix { get; set; } protected override void EndProcessing() { @@ -74,7 +76,7 @@ namespace PSInfisicalAPI.Cmdlets foreach (KeyValuePair pair in pairs) { if (pair.Key == null) { continue; } - string key = InfisicalPrefix.Apply(pair.Key, Prefix, ForcePrefix.IsPresent); + string key = InfisicalPrefix.Apply(pair.Key, SecretsPrefix, ForceSecretsPrefix.IsPresent); if (dictionary.ContainsKey(key)) { diff --git a/src/PSInfisicalAPI/Cmdlets/StartInfisicalProcessCmdlet.cs b/src/PSInfisicalAPI/Cmdlets/StartInfisicalProcessCmdlet.cs index 2cd5c18..393eea2 100644 --- a/src/PSInfisicalAPI/Cmdlets/StartInfisicalProcessCmdlet.cs +++ b/src/PSInfisicalAPI/Cmdlets/StartInfisicalProcessCmdlet.cs @@ -89,21 +89,23 @@ namespace PSInfisicalAPI.Cmdlets public SwitchParameter ContinueOnError { get; set; } [Parameter(ValueFromPipeline = true)] - [Alias("Secrets", "InputObject")] - public InfisicalSecret[] Secret { get; set; } + [Alias("Secret", "InputObject")] + public InfisicalSecret[] Secrets { get; set; } [Parameter] - public string Prefix { get; set; } + [Alias("Prefix")] + public string SecretsPrefix { get; set; } [Parameter] - public SwitchParameter ForcePrefix { get; set; } + [Alias("ForcePrefix")] + public SwitchParameter ForceSecretsPrefix { get; set; } private readonly List _secretBuffer = new List(); protected override void ProcessRecord() { - if (Secret == null) { return; } - foreach (InfisicalSecret secret in Secret) + if (Secrets == null) { return; } + foreach (InfisicalSecret secret in Secrets) { if (secret != null) { _secretBuffer.Add(secret); } } @@ -138,8 +140,8 @@ namespace PSInfisicalAPI.Cmdlets LogOutput = LogOutput.IsPresent, ContinueOnError = ContinueOnError.IsPresent, Secrets = _secretBuffer.ToArray(), - Prefix = Prefix, - ForcePrefix = ForcePrefix.IsPresent + SecretsPrefix = SecretsPrefix, + ForceSecretsPrefix = ForceSecretsPrefix.IsPresent }; InfisicalProcessResult result = InfisicalProcessRunner.Run(options, Logger); diff --git a/src/PSInfisicalAPI/Process/InfisicalProcessOptions.cs b/src/PSInfisicalAPI/Process/InfisicalProcessOptions.cs index e081740..469cf40 100644 --- a/src/PSInfisicalAPI/Process/InfisicalProcessOptions.cs +++ b/src/PSInfisicalAPI/Process/InfisicalProcessOptions.cs @@ -25,7 +25,7 @@ namespace PSInfisicalAPI.Process public bool LogOutput { get; set; } public bool ContinueOnError { get; set; } public InfisicalSecret[] Secrets { get; set; } - public string Prefix { get; set; } - public bool ForcePrefix { get; set; } + public string SecretsPrefix { get; set; } + public bool ForceSecretsPrefix { get; set; } } } diff --git a/src/PSInfisicalAPI/Process/InfisicalProcessRunnerHelpers.cs b/src/PSInfisicalAPI/Process/InfisicalProcessRunnerHelpers.cs index 4326f31..2554a2b 100644 --- a/src/PSInfisicalAPI/Process/InfisicalProcessRunnerHelpers.cs +++ b/src/PSInfisicalAPI/Process/InfisicalProcessRunnerHelpers.cs @@ -40,7 +40,7 @@ namespace PSInfisicalAPI.Process foreach (InfisicalSecret secret in options.Secrets) { if (secret == null || string.IsNullOrEmpty(secret.SecretName) || secret.SecretValue == null) { continue; } - string name = InfisicalPrefix.Apply(secret.SecretName, options.Prefix, options.ForcePrefix); + string name = InfisicalPrefix.Apply(secret.SecretName, options.SecretsPrefix, options.ForceSecretsPrefix); SecureStringUtility.UsePlainText(secret.SecretValue, plain => { processEnv[name] = plain;