conjur-cli 4.26.0 → 4.27.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/acceptance-features/audit/audit_event_send.feature +104 -0
- data/acceptance-features/audit/send.feature +70 -0
- data/acceptance-features/authentication/authenticate.feature +10 -0
- data/acceptance-features/authentication/login.feature +14 -0
- data/acceptance-features/authentication/logout.feature +16 -0
- data/acceptance-features/authentication/whoami.feature +5 -0
- data/acceptance-features/authorization/resource/annotate.feature +35 -0
- data/acceptance-features/authorization/resource/check.feature +22 -0
- data/acceptance-features/authorization/resource/create.feature +19 -0
- data/acceptance-features/authorization/resource/deny.feature +12 -0
- data/acceptance-features/authorization/resource/exists.feature +16 -0
- data/acceptance-features/authorization/resource/give.feature +22 -0
- data/acceptance-features/authorization/resource/permit.feature +20 -0
- data/acceptance-features/authorization/resource/permitted_roles.feature +16 -0
- data/acceptance-features/authorization/resource/show.feature +26 -0
- data/acceptance-features/authorization/role/create.feature +13 -0
- data/acceptance-features/authorization/role/exists.feature +19 -0
- data/acceptance-features/authorization/role/grant_to.feature +21 -0
- data/acceptance-features/authorization/role/graph.feature +58 -0
- data/acceptance-features/authorization/role/members.feature +23 -0
- data/acceptance-features/authorization/role/memberships.feature +27 -0
- data/acceptance-features/conjurenv/check.feature +28 -0
- data/acceptance-features/conjurenv/run.feature +10 -0
- data/acceptance-features/conjurenv/template.feature +11 -0
- data/acceptance-features/directory/group/create.feature +20 -0
- data/acceptance-features/directory/group/retire.feature +54 -0
- data/acceptance-features/directory/host/create.feature +23 -0
- data/acceptance-features/directory/host/retire.feature +6 -0
- data/acceptance-features/directory/layer/create.feature +10 -0
- data/acceptance-features/directory/layer/hosts-add.feature +9 -0
- data/acceptance-features/directory/layer/hosts-remove.feature +10 -0
- data/acceptance-features/directory/user/create.feature +23 -0
- data/acceptance-features/directory/user/retire.feature +6 -0
- data/acceptance-features/directory/user/update_password.feature +16 -0
- data/acceptance-features/directory/variable/create.feature +14 -0
- data/acceptance-features/directory/variable/retire.feature +17 -0
- data/acceptance-features/directory/variable/value.feature +13 -0
- data/acceptance-features/directory/variable/values-add.feature +12 -0
- data/acceptance-features/global-privilege/elevate.feature +20 -0
- data/acceptance-features/global-privilege/reveal.privilege +20 -0
- data/acceptance-features/pubkeys/add.feature +20 -0
- data/acceptance-features/pubkeys/delete.feature +9 -0
- data/acceptance-features/pubkeys/names.feature +23 -0
- data/acceptance-features/pubkeys/show.feature +25 -0
- data/acceptance-features/step_definitions/cli.rb +21 -0
- data/acceptance-features/step_definitions/graph_steps.rb +22 -0
- data/acceptance-features/step_definitions/user_steps.rb +54 -0
- data/acceptance-features/support/env.rb +5 -0
- data/acceptance-features/support/hooks.rb +179 -0
- data/acceptance-features/support/world.rb +153 -0
- data/conjur.gemspec +4 -1
- data/features/step_definitions/graph_steps.rb +2 -2
- data/features/support/hooks.rb +1 -5
- data/lib/conjur/cli.rb +1 -1
- data/lib/conjur/command/bootstrap.rb +3 -2
- data/lib/conjur/command/elevate.rb +76 -0
- data/lib/conjur/command/rspec/mock_services.rb +3 -3
- data/lib/conjur/command.rb +15 -0
- data/lib/conjur/version.rb +1 -1
- data/spec/command/elevate_spec.rb +28 -0
- metadata +85 -4
@@ -0,0 +1,28 @@
|
|
1
|
+
Feature: Check an environment
|
2
|
+
|
3
|
+
Background:
|
4
|
+
Given I run `conjur variable create $ns/access_key ABCDEF`
|
5
|
+
And I run `conjur variable create $ns/secret_key XYZQWER`
|
6
|
+
And I run `conjur variable create $ns/ssh_private_key PRIVATE_KEY_BODY`
|
7
|
+
And I run `conjur user create -p alice@$ns` interactively
|
8
|
+
And I type "foobar"
|
9
|
+
And I type "foobar"
|
10
|
+
And the exit status should be 0
|
11
|
+
And I run `conjur resource permit variable:$ns/access_key user:alice@$ns execute`
|
12
|
+
And I run `conjur resource permit variable:$ns/secret_key user:alice@$ns execute`
|
13
|
+
And I run `conjur authn login -u alice@$ns` interactively
|
14
|
+
And I type "foobar"
|
15
|
+
And the exit status should be 0
|
16
|
+
|
17
|
+
|
18
|
+
Scenario: Check against permitted variables
|
19
|
+
|
20
|
+
When I run `conjur env check --yaml '{ aws_access_key: !var $ns/access_key , aws_secret_key: !var $ns/secret_key }'`
|
21
|
+
Then the exit status should be 0
|
22
|
+
And the stdout should contain "aws_access_key: available\naws_secret_key: available\n"
|
23
|
+
|
24
|
+
Scenario: Check against restricted variables
|
25
|
+
When I run `conjur env check --yaml '{ aws_access_key: !var $ns/access_key , ssh_private_key: !var $ns/ssh_private_key }'`
|
26
|
+
Then the exit status should be 1
|
27
|
+
And the stdout should contain "aws_access_key: available\nssh_private_key: unavailable\n"
|
28
|
+
|
@@ -0,0 +1,10 @@
|
|
1
|
+
Feature: Run command in an environment populated from Conjur variables
|
2
|
+
|
3
|
+
Background:
|
4
|
+
Given I run `conjur variable create $ns/access_key ABCDEF`
|
5
|
+
And I run `conjur variable create $ns/secret_key XYZQWER`
|
6
|
+
|
7
|
+
Scenario:
|
8
|
+
When I run `conjur env run --yaml '{ cloud_access_key: !var $ns/access_key , cloud_secret_key: !var $ns/secret_key }' -- printenv CLOUD_ACCESS_KEY CLOUD_SECRET_KEY`
|
9
|
+
Then the stdout should contain "ABCDEF\nXYZQWER"
|
10
|
+
|
@@ -0,0 +1,11 @@
|
|
1
|
+
Feature: Embed values of Conjur variables into ERB template
|
2
|
+
|
3
|
+
Background:
|
4
|
+
Given a file named "template.erb" with: 'aws credentials: [<%= conjurenv["aws_access_key"] %>, <%= conjurenv["aws_secret_key"] %>]'
|
5
|
+
And I run `conjur variable create $ns/access_key ABCDEF`
|
6
|
+
And I run `conjur variable create $ns/secret_key XYZQWER`
|
7
|
+
|
8
|
+
Scenario:
|
9
|
+
When I run `conjur env template --yaml '{ aws_access_key: !var $ns/access_key , aws_secret_key: !var $ns/secret_key }' template.erb `
|
10
|
+
Then it prints the path to temporary file which contains: 'aws credentials: [ABCDEF, XYZQWER]'
|
11
|
+
|
@@ -0,0 +1,20 @@
|
|
1
|
+
Feature: Create a group
|
2
|
+
|
3
|
+
Scenario: Create a new group
|
4
|
+
When I successfully run `conjur group create $ns/ops`
|
5
|
+
Then the JSON response should have the following:
|
6
|
+
| id |
|
7
|
+
| ownerid |
|
8
|
+
| resource_identifier |
|
9
|
+
| roleid |
|
10
|
+
And the JSON response at "id" should include "/ops"
|
11
|
+
|
12
|
+
Scenario: Add a user to the group and show the list of members
|
13
|
+
Given I successfully run `conjur user create bob@$ns`
|
14
|
+
And I successfully run `conjur group create $ns/ops`
|
15
|
+
And I successfully run `conjur group members add $ns/ops user:bob@$ns`
|
16
|
+
When I successfully run `conjur group members list $ns/ops`
|
17
|
+
Then the JSON response should have 2 entries
|
18
|
+
And the JSON response at "0" should include "admin@"
|
19
|
+
And the JSON response at "1" should include "bob@"
|
20
|
+
|
@@ -0,0 +1,54 @@
|
|
1
|
+
Feature: Retire a group
|
2
|
+
Background:
|
3
|
+
When I successfully run `conjur group create $ns/ops`
|
4
|
+
|
5
|
+
Scenario: Basic retirement
|
6
|
+
Then I successfully run `conjur group retire -d user:attic@$ns $ns/ops`
|
7
|
+
|
8
|
+
Scenario: Retiring a non-existent thing propagates the 404
|
9
|
+
Then I run `conjur group retire -d user:attic@$ns $ns/foobar`
|
10
|
+
Then the exit status should be 1
|
11
|
+
And the stderr should contain "Resource Not Found"
|
12
|
+
|
13
|
+
Scenario: A foreign user can't retire a group
|
14
|
+
Given I login as a new user
|
15
|
+
And I run `conjur group retire -d user:attic@$ns $ns/ops`
|
16
|
+
Then the exit status should be 1
|
17
|
+
And the stderr should contain "You can't administer this record"
|
18
|
+
|
19
|
+
Scenario: Can't retire to a non-existant role
|
20
|
+
And I run `conjur group retire -d user:foobar $ns/ops`
|
21
|
+
Then the exit status should be 1
|
22
|
+
And the output should match /error: Destination role/
|
23
|
+
And the output should match /doesn't exist$/
|
24
|
+
|
25
|
+
Scenario: I can retire a group which I've granted to another group
|
26
|
+
Given I successfully run `conjur group create $ns/admin`
|
27
|
+
And I successfully run `conjur role grant_to group:$ns/ops group:$ns/admin`
|
28
|
+
Then I successfully run `conjur group retire -d user:attic@$ns $ns/ops`
|
29
|
+
|
30
|
+
Scenario: I can retire a group which I've given to a group that I can admin
|
31
|
+
Given I successfully run `conjur group create $ns/admin`
|
32
|
+
And I successfully run `conjur resource give group:$ns/ops group:$ns/admin`
|
33
|
+
Then I successfully run `conjur group retire -d user:attic@$ns $ns/ops`
|
34
|
+
|
35
|
+
Scenario: I can't retire a group if I can't admin the group's role
|
36
|
+
Given I successfully run `conjur group create $ns/admin`
|
37
|
+
And I successfully run `conjur role grant_to group:$ns/ops group:$ns/admin`
|
38
|
+
Given I create a new user named "alice@$ns"
|
39
|
+
And I successfully run `conjur group members add -a $ns/admin alice@$ns`
|
40
|
+
And I login as "alice@$ns"
|
41
|
+
And I run `conjur group retire -d user:attic@$ns $ns/ops`
|
42
|
+
Then the exit status should be 1
|
43
|
+
And the stderr should contain "You can't administer this record"
|
44
|
+
|
45
|
+
Scenario: I can't retire a group if I can't admin the group's record
|
46
|
+
Given I successfully run `conjur group create $ns/admin`
|
47
|
+
And I successfully run `conjur role grant_to -a group:$ns/ops group:$ns/admin`
|
48
|
+
Given I create a new user named "alice@$ns"
|
49
|
+
And I successfully run `conjur group members add -a $ns/admin alice@$ns`
|
50
|
+
And I login as "alice@$ns"
|
51
|
+
And I run `conjur group retire -d user:attic@$ns $ns/ops`
|
52
|
+
Then the exit status should be 1
|
53
|
+
And the stderr should contain "You don't own the record"
|
54
|
+
|
@@ -0,0 +1,23 @@
|
|
1
|
+
Feature: Create a Host
|
2
|
+
|
3
|
+
Scenario: Create a host with automatically generated ID
|
4
|
+
When I successfully run `conjur host create`
|
5
|
+
And the JSON should have "api_key"
|
6
|
+
And the JSON should have "id"
|
7
|
+
|
8
|
+
Scenario: Create a host with explicit ID
|
9
|
+
When I successfully run `conjur host create $ns.myhost.example.com`
|
10
|
+
And the JSON should have "api_key"
|
11
|
+
And I keep the JSON response at "id" as "ID"
|
12
|
+
Then the output should contain "myhost.example.com"
|
13
|
+
|
14
|
+
Scenario: Create a host owned by the security_admin group
|
15
|
+
When I successfully run `conjur host create --as-group $ns/security_admin`
|
16
|
+
And I keep the JSON response at "ownerid" as "OWNERID"
|
17
|
+
Then the output should contain "/security_admin"
|
18
|
+
|
19
|
+
Scenario: Host does not belong to any layers by default
|
20
|
+
When I successfully run `conjur host create $ns.myhost.example.com`
|
21
|
+
And I successfully run `conjur host layers $ns.myhost.example.com`
|
22
|
+
And the JSON should be []
|
23
|
+
|
@@ -0,0 +1,10 @@
|
|
1
|
+
Feature: Create a layer
|
2
|
+
|
3
|
+
Scenario: Create a layer
|
4
|
+
When I successfully run `conjur layer create $ns/test_layer`
|
5
|
+
Then the JSON response at "id" should include "test_layer"
|
6
|
+
And the JSON response at "hosts" should be []
|
7
|
+
|
8
|
+
Scenario: Create a layer owned by the security_admin group
|
9
|
+
When I successfully run `conjur layer create --as-group $ns/security_admin $ns/test_layer`
|
10
|
+
Then the JSON response at "ownerid" should include "security_admin"
|
@@ -0,0 +1,9 @@
|
|
1
|
+
Feature: Add hosts to layer
|
2
|
+
|
3
|
+
Background:
|
4
|
+
Given I run `conjur layer create $ns/testlayer`
|
5
|
+
And I run `conjur host create $ns.example.com`
|
6
|
+
|
7
|
+
Scenario: Add host to layer
|
8
|
+
When I successfully run `conjur layer hosts add $ns/testlayer $ns.example.com`
|
9
|
+
Then the output should contain "Host added"
|
@@ -0,0 +1,10 @@
|
|
1
|
+
Feature: Remove hosts from layer
|
2
|
+
|
3
|
+
Background:
|
4
|
+
Given I run `conjur layer create $ns/testlayer`
|
5
|
+
And I run `conjur host create $ns.example.com`
|
6
|
+
And I run `conjur layer hosts add $ns/testlayer $ns.example.com`
|
7
|
+
|
8
|
+
Scenario: Remove host from layer
|
9
|
+
When I successfully run `conjur layer hosts remove $ns/testlayer $ns.example.com`
|
10
|
+
Then the output should contain "Host removed"
|
@@ -0,0 +1,23 @@
|
|
1
|
+
Feature: Create a User
|
2
|
+
|
3
|
+
Scenario: Create a passwordless user
|
4
|
+
When I successfully run `conjur user create alice-without-password@$ns`
|
5
|
+
And the JSON should have "api_key"
|
6
|
+
|
7
|
+
Scenario: Create a user with a password
|
8
|
+
When I run `conjur user create -p alice-with-password@$ns` interactively
|
9
|
+
And I type "foobar"
|
10
|
+
And I type "foobar"
|
11
|
+
Then the exit status should be 0
|
12
|
+
And the JSON should have "api_key"
|
13
|
+
|
14
|
+
Scenario: Create a user owned by the security_admin group
|
15
|
+
When I successfully run `conjur user create --as-group $ns/security_admin alice-without-password@$ns`
|
16
|
+
And I keep the JSON response at "ownerid" as "OWNERID"
|
17
|
+
Then the output should contain "/security_admin"
|
18
|
+
|
19
|
+
Scenario: Some characters are disallowed in user ids, such as /
|
20
|
+
When I run `conjur user create alice/$ns`
|
21
|
+
Then the exit status should be 1
|
22
|
+
And the stderr should contain "error: 403 Forbidden"
|
23
|
+
And the stdout should not contain anything
|
@@ -0,0 +1,16 @@
|
|
1
|
+
Feature: Update the password of the logged-in user
|
2
|
+
|
3
|
+
Background:
|
4
|
+
Given I login as a new user
|
5
|
+
|
6
|
+
Scenario: A user can update her own password
|
7
|
+
And I run `conjur user update_password` interactively
|
8
|
+
Then I can type and confirm a new password
|
9
|
+
|
10
|
+
@announce
|
11
|
+
Scenario: The new password can be used to login
|
12
|
+
And I run `conjur user update_password` interactively
|
13
|
+
And I type and confirm a new password
|
14
|
+
And I run `conjur authn login alice@$ns` interactively
|
15
|
+
And I enter the password
|
16
|
+
Then the exit status should be 0
|
@@ -0,0 +1,14 @@
|
|
1
|
+
Feature: create an empty variable
|
2
|
+
|
3
|
+
Background:
|
4
|
+
Given I successfully run `conjur variable create $ns/secret`
|
5
|
+
|
6
|
+
Scenario: Variable is created and responds to metadata
|
7
|
+
When I run `conjur variable show $ns/secret`
|
8
|
+
Then the JSON should have "id"
|
9
|
+
And the JSON should have "ownerid"
|
10
|
+
And the JSON at "version_count" should be 0
|
11
|
+
|
12
|
+
Scenario: Variable keeps no value
|
13
|
+
When I run `conjur variable value $ns/secret`
|
14
|
+
Then the exit status should be 1
|
@@ -0,0 +1,17 @@
|
|
1
|
+
Feature: Retire a variable
|
2
|
+
Background:
|
3
|
+
Given I successfully run `conjur variable create $ns/secret the-value`
|
4
|
+
|
5
|
+
Scenario: Basic retirement
|
6
|
+
Then I successfully run `conjur variable retire -d user:attic@$ns $ns/secret`
|
7
|
+
|
8
|
+
Scenario: A foreign user can't retire a secret
|
9
|
+
Given I login as a new user
|
10
|
+
And I run `conjur variable retire -d user:attic@$ns $ns/secret`
|
11
|
+
Then the exit status should be 1
|
12
|
+
And the stderr should contain "You don't own the record"
|
13
|
+
|
14
|
+
Scenario: I can retire a variable which I've given to a group that I can admin
|
15
|
+
Given I successfully run `conjur group create $ns/admin`
|
16
|
+
And I successfully run `conjur resource give variable:$ns/secret group:$ns/admin`
|
17
|
+
Then I successfully run `conjur variable retire -d user:attic@$ns $ns/secret`
|
@@ -0,0 +1,13 @@
|
|
1
|
+
Feature: Obtain value from variable
|
2
|
+
|
3
|
+
Background:
|
4
|
+
Given I successfully run `conjur variable create $ns/secret secretvalue`
|
5
|
+
And I successfully run `conjur variable values add $ns/secret updatedvalue`
|
6
|
+
|
7
|
+
Scenario: Recent value is obtained by default
|
8
|
+
When I run `conjur variable value $ns/secret`
|
9
|
+
Then the output should match /updatedvalue$/
|
10
|
+
|
11
|
+
Scenario: Previous values can be obtained by version
|
12
|
+
When I run `conjur variable value -v 1 $ns/secret`
|
13
|
+
Then the output should match /secretvalue$/
|
@@ -0,0 +1,12 @@
|
|
1
|
+
Feature: Populate variable with values
|
2
|
+
|
3
|
+
Background:
|
4
|
+
Given I successfully run `conjur variable create $ns/secret initialvalue`
|
5
|
+
|
6
|
+
Scenario: Value provided via command-line parameter
|
7
|
+
When I run `conjur variable values add $ns/secret secretvalue`
|
8
|
+
Then the output should contain "Value added"
|
9
|
+
|
10
|
+
Scenario: Value provided via stdin
|
11
|
+
When I run `bash -c 'echo "secretvalue" | conjur variable values add $ns/secret'`
|
12
|
+
Then the output should contain "Value added"
|
@@ -0,0 +1,20 @@
|
|
1
|
+
Feature: 'elevate' can be used to activate root-like privileges
|
2
|
+
|
3
|
+
Background:
|
4
|
+
Given I successfully run `conjur variable create $ns/secret secretvalue`
|
5
|
+
And I create a new user named "alice@$ns"
|
6
|
+
|
7
|
+
Scenario: The secret value is not accessible without 'elevate' privilege
|
8
|
+
Given I login as "alice@$ns"
|
9
|
+
When I run `conjur variable value $ns/secret`
|
10
|
+
Then the exit status should be 1
|
11
|
+
|
12
|
+
Scenario: 'elevate' can't be used without permission
|
13
|
+
Given I login as "alice@$ns"
|
14
|
+
When I run `conjur elevate variable show $ns/secret`
|
15
|
+
Then the exit status should be 1
|
16
|
+
|
17
|
+
Scenario: The secret value is accessible with 'elevate' privilege
|
18
|
+
Given I successfully run `conjur resource permit '!:!:conjur' user:alice@$ns elevate`
|
19
|
+
And I login as "alice@$ns"
|
20
|
+
Then I successfully run `conjur elevate variable value $ns/secret`
|
@@ -0,0 +1,20 @@
|
|
1
|
+
Feature: 'reveal' can be used to see all records
|
2
|
+
|
3
|
+
Background:
|
4
|
+
Given I successfully run `conjur variable create $ns/secret secretvalue`
|
5
|
+
And I create a new user named "alice@$ns"
|
6
|
+
|
7
|
+
Scenario: The secret value is not accessible without 'reveal' privilege
|
8
|
+
Given I login as "alice@$ns"
|
9
|
+
When I run `conjur variable show $ns/secret`
|
10
|
+
Then the exit status should be 1
|
11
|
+
|
12
|
+
Scenario: 'reveal' can't be used without permission
|
13
|
+
Given I login as "alice@$ns"
|
14
|
+
When I run `conjur reveal variable show $ns/secret`
|
15
|
+
Then the exit status should be 1
|
16
|
+
|
17
|
+
Scenario: The secret value is accessible with 'reveal' privilege
|
18
|
+
Given I successfully run `conjur resource permit '!:!:conjur' user:alice@$ns reveal`
|
19
|
+
And I login as "alice@$ns"
|
20
|
+
Then I successfully run `conjur reveal variable show $ns/secret`
|
@@ -0,0 +1,20 @@
|
|
1
|
+
Feature: Register a public key
|
2
|
+
|
3
|
+
Background:
|
4
|
+
Given I successfully run `conjur user create alice@$ns`
|
5
|
+
And I successfully run `ssh-keygen -t rsa -C "laptop" -N "" -f ./id_alice_$ns`
|
6
|
+
|
7
|
+
Scenario: Register a public key file for a user
|
8
|
+
When I run `conjur pubkeys add alice@$ns @id_alice_$ns.pub`
|
9
|
+
Then the exit status should be 0
|
10
|
+
|
11
|
+
Scenario: You can't accidentally register the private key
|
12
|
+
When I run `conjur pubkeys add alice@$ns @id_alice_$ns`
|
13
|
+
Then the exit status should be 1
|
14
|
+
And the stderr from "conjur pubkeys add alice@$ns @id_alice_$ns" should contain "Unprocessable Entity"
|
15
|
+
|
16
|
+
Scenario: Unauthorized users cannot modify public keys
|
17
|
+
Given I login as new user "bob@$ns"
|
18
|
+
And I run `conjur pubkeys add alice@$ns @id_alice_$ns.pub`
|
19
|
+
Then the exit status should be 1
|
20
|
+
And the stderr from "conjur pubkeys add alice@$ns @id_alice_$ns.pub" should contain "Forbidden"
|
@@ -0,0 +1,9 @@
|
|
1
|
+
Feature: Remove a public key
|
2
|
+
|
3
|
+
Background:
|
4
|
+
Given I successfully run `conjur user create alice@$ns`
|
5
|
+
And I successfully run `ssh-keygen -t rsa -C "laptop" -N "" -f ./id_alice_$ns`
|
6
|
+
|
7
|
+
Scenario: To remove a public key, use the user's login name and the key name (-C option to ssh-keygen)
|
8
|
+
Given I successfully run `conjur pubkeys add alice@$ns @id_alice_$ns.pub`
|
9
|
+
Then I successfully run `conjur pubkeys delete alice@$ns laptop`
|
@@ -0,0 +1,23 @@
|
|
1
|
+
Feature: List known public key names for a user
|
2
|
+
|
3
|
+
Background:
|
4
|
+
Given I successfully run `conjur user create alice@$ns`
|
5
|
+
And I successfully run `ssh-keygen -t rsa -C "laptop" -N "" -f ./id_alice_$ns`
|
6
|
+
|
7
|
+
Scenario: Initial key names list is empty
|
8
|
+
When I run `conjur pubkeys names alice@$ns`
|
9
|
+
Then the stdout from "conjur pubkeys names alice@$ns" should contain exactly ""
|
10
|
+
|
11
|
+
Scenario: After adding a key, the key name is shown
|
12
|
+
Given I successfully run `conjur pubkeys add alice@$ns @id_alice_$ns.pub`
|
13
|
+
And I run `conjur pubkeys names alice@$ns`
|
14
|
+
Then the stdout from "conjur pubkeys names alice@$ns" should contain exactly:
|
15
|
+
"""
|
16
|
+
laptop\n
|
17
|
+
"""
|
18
|
+
|
19
|
+
Scenario: After deleting the key, the key names list is empty again
|
20
|
+
Given I successfully run `conjur pubkeys add alice@$ns @id_alice_$ns.pub`
|
21
|
+
And I successfully run `conjur pubkeys delete alice@$ns laptop`
|
22
|
+
And I run `conjur pubkeys names alice@$ns`
|
23
|
+
Then the stdout from "conjur pubkeys names alice@$ns" should contain exactly ""
|
@@ -0,0 +1,25 @@
|
|
1
|
+
Feature: Show public keys for a user
|
2
|
+
|
3
|
+
Background:
|
4
|
+
Given I successfully run `conjur user create alice@$ns`
|
5
|
+
And I successfully run `ssh-keygen -t rsa -C "laptop" -N "" -f ./id_alice_$ns`
|
6
|
+
|
7
|
+
Scenario: Initial key list is empty
|
8
|
+
When I run `conjur pubkeys show alice@$ns`
|
9
|
+
Then the stdout from "conjur pubkeys show alice@$ns" should contain exactly "\n"
|
10
|
+
|
11
|
+
Scenario: After adding a key, the key is shown
|
12
|
+
Given I successfully run `conjur pubkeys add alice@$ns @id_alice_$ns.pub`
|
13
|
+
And I run `conjur pubkeys show alice@$ns`
|
14
|
+
And the output should match /^ssh-rsa .* laptop$/
|
15
|
+
|
16
|
+
Scenario: After deleting the key, the key list is empty again
|
17
|
+
Given I successfully run `conjur pubkeys add alice@$ns @id_alice_$ns.pub`
|
18
|
+
And I successfully run `conjur pubkeys delete alice@$ns laptop`
|
19
|
+
And I run `conjur pubkeys show alice@$ns`
|
20
|
+
Then the stdout from "conjur pubkeys show alice@$ns" should contain exactly "\n"
|
21
|
+
|
22
|
+
Scenario: Public keys can be listed using cURL, without authentication
|
23
|
+
Given I successfully run `conjur pubkeys add alice@$ns @id_alice_$ns.pub`
|
24
|
+
When I successfully run `curl -k $pubkeys_url/alice@$ns`
|
25
|
+
Then the output should match /^ssh-rsa .* laptop$/
|
@@ -0,0 +1,21 @@
|
|
1
|
+
Then /^I show the output$/ do
|
2
|
+
puts all_output
|
3
|
+
end
|
4
|
+
|
5
|
+
# this is step copypasted from https://github.com/cucumber/aruba/blob/master/lib/aruba/cucumber.rb#L24
|
6
|
+
# original has typo in regexp, which is fixed here
|
7
|
+
Given(/^a file named "([^"]*?)" with: '(.*?)'$/) do |file_name, file_content|
|
8
|
+
file_content.gsub!('$ns',@namespace)
|
9
|
+
write_file(file_name, file_content)
|
10
|
+
end
|
11
|
+
|
12
|
+
Given(/^a file named "([^"]*?)" with namespace substitution:$/) do |file_name, file_content|
|
13
|
+
step "a file named \"#{file_name}\" with:", file_content.gsub('$ns',@namespace)
|
14
|
+
end
|
15
|
+
|
16
|
+
Then /^it prints the path to temporary file which contains: '(.*)'$/ do |content|
|
17
|
+
filename = all_output.split("\n").last
|
18
|
+
tempfiles << filename
|
19
|
+
actual_content=File.read(filename) rescue ""
|
20
|
+
expect(actual_content).to match(content)
|
21
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
|
2
|
+
Given /^a graph with edges$/ do |table|
|
3
|
+
graph table.raw
|
4
|
+
end
|
5
|
+
|
6
|
+
Then %r{^the graph JSON should be:$} do |json|
|
7
|
+
json = expand_roles json
|
8
|
+
last_graph = extract_filtered_graph json
|
9
|
+
expect(last_graph.to_json).to be_json_eql(json)
|
10
|
+
end
|
11
|
+
|
12
|
+
When(/^I( successfully)? run with role expansion "(.*)"$/) do |successfully, cmd|
|
13
|
+
role_id_map.each do |role, expanded_role|
|
14
|
+
cmd.gsub! role, expanded_role
|
15
|
+
end
|
16
|
+
self.last_cmd = cmd
|
17
|
+
if successfully
|
18
|
+
step "I successfully run `#{cmd}`"
|
19
|
+
else
|
20
|
+
step "I run `#{cmd}`"
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
Given(/^I login as a new user$/) do
|
2
|
+
@username_index ||= 0
|
3
|
+
username = %w(alice bob charles dave edward)[@username_index]
|
4
|
+
raise "I'm out of usernames!" unless username
|
5
|
+
@username_index += 1
|
6
|
+
@username = "#{username}@$ns"
|
7
|
+
step %Q(I login as new user "#{@username}")
|
8
|
+
end
|
9
|
+
|
10
|
+
Given(/^I create a new user named "(.*?)"$/) do |username|
|
11
|
+
username_ns = username.gsub('$ns',@namespace)
|
12
|
+
password = find_or_create_password(username_ns)
|
13
|
+
|
14
|
+
step "I run `conjur user create --as-role user:admin@#{@namespace} -p #{username_ns}` interactively"
|
15
|
+
step %Q(I type "#{password}")
|
16
|
+
step %Q(I type "#{password}")
|
17
|
+
step "the exit status should be 0"
|
18
|
+
end
|
19
|
+
|
20
|
+
Given(/^I create a new host with id "(.*?)"$/) do |hostid|
|
21
|
+
step "I successfully run `conjur host create #{@namespace}/monitoring/server`"
|
22
|
+
step 'I keep the JSON response at "api_key" as "API_KEY"'
|
23
|
+
step 'I keep the JSON response at "id" as "HOST_ID"'
|
24
|
+
end
|
25
|
+
|
26
|
+
Given(/^I login as a new host/) do
|
27
|
+
step "I run `conjur authn login -u host/%{HOST_ID} -p %{API_KEY}` interactively"
|
28
|
+
step "the exit status should be 0"
|
29
|
+
end
|
30
|
+
|
31
|
+
Given(/^I login as new user "(.*?)"$/) do |username|
|
32
|
+
username_ns = username.gsub('$ns',@namespace)
|
33
|
+
step %Q(I create a new user named "#{username_ns}")
|
34
|
+
step %Q(I login as "#{username_ns}")
|
35
|
+
end
|
36
|
+
|
37
|
+
Given(/^I login as "(.*?)"$/) do |username|
|
38
|
+
username_ns = username.gsub('$ns',@namespace)
|
39
|
+
password = find_or_create_password(username_ns)
|
40
|
+
|
41
|
+
Conjur::Authn.save_credentials username: username_ns, password: password
|
42
|
+
end
|
43
|
+
|
44
|
+
Then(/^I(?: can)? type and confirm a new password/) do
|
45
|
+
@password = SecureRandom.hex(12)
|
46
|
+
step %Q(I type "#{@password}")
|
47
|
+
step %Q(I type "#{@password}")
|
48
|
+
step "the exit status should be 0"
|
49
|
+
end
|
50
|
+
|
51
|
+
When(/^I enter the password/) do
|
52
|
+
raise "No current password" unless @password
|
53
|
+
step %Q(I type "#{@password}")
|
54
|
+
end
|