cffda99591
BREAKING CHANGES
- Connect-Infisical no longer accepts -ProjectId, -Environment, or -SecretPath.
- InfisicalConnection no longer carries ProjectId, Environment, or DefaultSecretPath.
- Every cmdlet that previously inherited those fields now requires -ProjectId
and/or -Environment as Mandatory=true. -SecretPath / -Path remain optional
and default to "/" at the client layer.
- INFISICAL_PROJECT_ID, INFISICAL_ENVIRONMENT, INFISICAL_SECRET_PATH env-var
scanning removed from Connect-Infisical.
- Resolve{ProjectId,Environment,SecretPath} helpers removed from
InfisicalCmdletBase. ResolveOrganizationId retained.
ADDED
- Get-InfisicalProject -Type <enum> filters the list by product surface
(secret-manager, cert-manager, kms, ssh, secret-scanning, pam, ai) with
IntelliSense via ValidateSet.
- Get-InfisicalProject -IncludeRoles switch maps to includeRoles=true/false
query parameter (always sent).
RATIONALE
- Implicit connection scoping caused 400 Bad Request when the active
connection's ProjectId belonged to a different product surface than the
cmdlet's target (e.g. secret-manager project id passed to /cert-manager/*).
- Explicit parameters make scope unambiguous and make scripts portable
across projects.
- The new -Type filter on Get-InfisicalProject lets callers discover the
correct project id for each subsequent CRUD invocation without needing
connection-level inheritance.
INTERNAL
- All client classes (Secrets / Folders / Environments / Tags / Projects /
Pki) now receive scoping as explicit arguments rather than reading the
InfisicalConnection object.
- Client-layer SecretPath / Path defaulting to "/" is preserved via
FirstNonEmpty(...).
- Help XML updated to remove all "session-pinned" / "active connection"
phrasing; OrderedDictionary splatting examples now include the mandatory
parameters.
- 216/216 unit tests passing.
46 lines
1.6 KiB
C#
46 lines
1.6 KiB
C#
using System;
|
|
using System.Management.Automation;
|
|
using PSInfisicalAPI.Connections;
|
|
using PSInfisicalAPI.Folders;
|
|
using PSInfisicalAPI.Models;
|
|
|
|
namespace PSInfisicalAPI.Cmdlets
|
|
{
|
|
[Cmdlet(VerbsData.Update, "InfisicalFolder", SupportsShouldProcess = true)]
|
|
[OutputType(typeof(InfisicalFolder))]
|
|
public sealed class UpdateInfisicalFolderCmdlet : InfisicalCmdletBase
|
|
{
|
|
[Parameter(Mandatory = true, ValueFromPipelineByPropertyName = true, Position = 0)]
|
|
[Alias("Id")]
|
|
public string FolderId { get; set; }
|
|
|
|
[Parameter(Mandatory = true, Position = 1)] public string Name { get; set; }
|
|
[Parameter(Mandatory = true)] public string ProjectId { get; set; }
|
|
[Parameter(Mandatory = true)] public string Environment { get; set; }
|
|
[Parameter] public string Path { get; set; }
|
|
|
|
protected override void ProcessRecord()
|
|
{
|
|
try
|
|
{
|
|
if (!ShouldProcess(FolderId, "Update Infisical folder"))
|
|
{
|
|
return;
|
|
}
|
|
|
|
InfisicalConnection connection = InfisicalSessionManager.RequireCurrent();
|
|
InfisicalFolderClient client = new InfisicalFolderClient(HttpClient, Logger);
|
|
InfisicalFolder folder = client.Update(connection, ProjectId, Environment, FolderId, Name, Path);
|
|
if (folder != null)
|
|
{
|
|
WriteObject(folder);
|
|
}
|
|
}
|
|
catch (Exception exception)
|
|
{
|
|
ThrowTerminatingForException("UpdateInfisicalFolderCmdlet", "UpdateFolder", exception);
|
|
}
|
|
}
|
|
}
|
|
}
|