public async Task Create_SupportsSettingSingleIssuerAndMultipleSchemes() { var projectPath = _fixture.CreateProject(); var project = Path.Combine(projectPath, "TestProject.csproj"); var secretsFilePath = PathHelper.GetSecretsPathFromSecretsId(_fixture.TestSecretsId); var app = new Program(_console); app.Run(new[] { "create", "--project", project, "--issuer", "test-issuer", "--scheme", "test-scheme" }); app.Run(new[] { "create", "--project", project, "--issuer", "test-issuer", "--scheme", "test-scheme-2" }); Assert.Contains("New JWT saved", _console.GetOutput()); using FileStream openStream = File.OpenRead(secretsFilePath); var secretsJson = await JsonSerializer.DeserializeAsync <JsonObject>(openStream); var signingKey1 = Assert.Single(secretsJson[SigningKeysHandler.GetSigningKeyPropertyName("test-scheme")].AsArray()); Assert.Equal("test-issuer", signingKey1["Issuer"].GetValue <string>()); Assert.Equal(32, signingKey1["Length"].GetValue <int>()); Assert.True(Convert.TryFromBase64String(signingKey1["Value"].GetValue <string>(), new byte[32], out var _)); var signingKey2 = Assert.Single(secretsJson[SigningKeysHandler.GetSigningKeyPropertyName("test-scheme-2")].AsArray()); Assert.Equal("test-issuer", signingKey2["Issuer"].GetValue <string>()); Assert.Equal(32, signingKey2["Length"].GetValue <int>()); Assert.True(Convert.TryFromBase64String(signingKey2["Value"].GetValue <string>(), new byte[32], out var _)); }
public async Task Key_CanResetSigningKey_WhenSecretsHasPrepulatedData() { var project = Path.Combine(_fixture.CreateProject(), "TestProject.csproj"); var app = new Program(_console); var secretsFilePath = PathHelper.GetSecretsPathFromSecretsId(_fixture.TestSecretsId); await File.WriteAllTextAsync(secretsFilePath, @"{ ""Foo"": { ""Bar"": ""baz"" } }"); app.Run(new[] { "create", "--project", project }); app.Run(new[] { "key", "--project", project }); Assert.Contains("Signing Key:", _console.GetOutput()); app.Run(new[] { "key", "--reset", "--force", "--project", project }); Assert.Contains("New signing key created:", _console.GetOutput()); using FileStream openStream = File.OpenRead(secretsFilePath); var secretsJson = await JsonSerializer.DeserializeAsync <JsonObject>(openStream); Assert.NotNull(secretsJson); Assert.True(secretsJson.ContainsKey(SigningKeysHandler.GetSigningKeyPropertyName(DevJwtsDefaults.Scheme))); Assert.True(secretsJson.TryGetPropertyValue("Foo", out var fooField)); Assert.Equal("baz", fooField["Bar"].GetValue <string>()); }
public async Task Create_GracefullyHandles_PrepopulatedSecrets() { var projectPath = _fixture.CreateProject(); var project = Path.Combine(projectPath, "TestProject.csproj"); var secretsFilePath = PathHelper.GetSecretsPathFromSecretsId(_fixture.TestSecretsId); await File.WriteAllTextAsync(secretsFilePath, @"{ ""Foo"": { ""Bar"": ""baz"" } }"); var app = new Program(_console); app.Run(new[] { "create", "--project", project }); var output = _console.GetOutput(); Assert.Contains("New JWT saved", output); using FileStream openStream = File.OpenRead(secretsFilePath); var secretsJson = await JsonSerializer.DeserializeAsync <JsonObject>(openStream); Assert.NotNull(secretsJson); var signingKey = Assert.Single(secretsJson[SigningKeysHandler.GetSigningKeyPropertyName(DevJwtsDefaults.Scheme)].AsArray()); Assert.Equal(32, signingKey["Length"].GetValue <int>()); Assert.True(Convert.TryFromBase64String(signingKey["Value"].GetValue <string>(), new byte[32], out var _)); Assert.True(secretsJson.TryGetPropertyValue("Foo", out var fooField)); Assert.Equal("baz", fooField["Bar"].GetValue <string>()); }
public async Task Create_SupportsSettingMutlipleIssuersAndSingleScheme() { var projectPath = _fixture.CreateProject(); var project = Path.Combine(projectPath, "TestProject.csproj"); var secretsFilePath = PathHelper.GetSecretsPathFromSecretsId(_fixture.TestSecretsId); var app = new Program(_console); app.Run(new[] { "create", "--project", project, "--issuer", "test-issuer", "--scheme", "test-scheme" }); app.Run(new[] { "create", "--project", project, "--issuer", "test-issuer-2", "--scheme", "test-scheme" }); Assert.Contains("New JWT saved", _console.GetOutput()); using FileStream openStream = File.OpenRead(secretsFilePath); var secretsJson = await JsonSerializer.DeserializeAsync <JsonObject>(openStream); Assert.True(secretsJson.ContainsKey(SigningKeysHandler.GetSigningKeyPropertyName("test-scheme"))); var signingKeys = secretsJson[SigningKeysHandler.GetSigningKeyPropertyName("test-scheme")].AsArray(); Assert.Equal(2, signingKeys.Count); Assert.NotNull(signingKeys.SingleOrDefault(signingKey => signingKey["Issuer"].GetValue <string>() == "test-issuer")); Assert.NotNull(signingKeys.SingleOrDefault(signingKey => signingKey["Issuer"].GetValue <string>() == "test-issuer-2")); }
private static int Execute(IReporter reporter, string projectPath, string scheme, string issuer, bool reset, bool force) { if (!DevJwtCliHelpers.GetProjectAndSecretsId(projectPath, reporter, out var _, out var userSecretsId)) { return(1); } if (reset == true) { if (!force) { reporter.Output(Resources.KeyCommand_Permission); reporter.Error("[Y]es / [N]o"); if (Console.ReadLine().Trim().ToUpperInvariant() != "Y") { reporter.Output(Resources.KeyCommand_Canceled); return(0); } } var key = SigningKeysHandler.CreateSigningKeyMaterial(userSecretsId, scheme, issuer, reset: true); reporter.Output(Resources.FormatKeyCommand_KeyCreated(Convert.ToBase64String(key))); return(0); } var signingKeyMaterial = SigningKeysHandler.GetSigningKeyMaterial(userSecretsId, scheme, issuer); if (signingKeyMaterial is null) { reporter.Output(Resources.KeyCommand_KeyNotFound); return(0); } reporter.Output(Resources.FormatKeyCommand_Confirmed(signingKeyMaterial)); return(0); }