示例#1
0
    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 _));
    }
示例#2
0
    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>());
    }
示例#3
0
    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>());
    }
示例#4
0
    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"));
    }
示例#5
0
    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);
    }