You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Both ockam project ticket and ockam project enroll currently do not support the --output json option.
Currently:
ockam project ticket produces a HEX string (base64 encoded JSON blob) that is output to stdout or redirected to a file or saved to an env var. The benefit of use this HEX string is that it can easily be saved to an env var, and used by the ockam project enroll command, w/out having to worry about CR/LF for a multiline JSON string.
It is easy to manipulate the single string (which is base64 encoded JSON blob), by copying it to the clipboard, redirecting it to a file, or saving it to an env var.
The downside is that this output is opaque and does not really show what information the ticket holds (the JSON blob). Applying base64 encoding to the readable JSON blob renders it unreadable (for humans).
ockam project enroll can accept this HEX string (base64 encoded JSON blob) as a string, or a file path.
# Using an env var
ockam enroll
TICKET=$(ockam project ticket)
OCKAM_HOME=/tmp/ock_1 project enroll $TICKET
This is a related issue that affects the output of this command (not --output json): #7478
1) Desired behavior for ockam project ticket --output json
If --output json is used in ockam project ticket, then this JSON output should be usable by ockam project enroll. So there are 2 possibilities for ockam project ticket:
ockam project ticket -> outputs a HEX string (base64 encoded JSON blob) to stdout, and JSON blob to stderr (using opts.terminal.write_line() as described above).
ockam project ticket --output json -> produces a JSON blob that is displayed to stdout (can be redirected to a file). This does not generate the HEX base64 encoded string.
On the flip side, ockam project enroll should be able to work with either HEX string or JSON blob. Additionally, the positional argument that it takes can be a string or a filepath. This means that the command should apply the following strategy to parse this positional argument:
Check if it is a file path. If so, then load the contents of the file into a string, and process it below (this is the current behavior).
If it isn't a file path, then try and process the string below.
To process the string:
Check to see if it can be parsed as JSON (valid JSON)? If so, then try to use it to enroll.
If it can't be parsed as JSON, then assume it is the base64 encoded version and use it to enroll (this is the current behavior).
2) Desired behavior for ockam project enroll --output json
Currently the CredentialAndPurposeKeyDisplay is used to display the credential that is generated to stdout. If --output json is passed, then generate JSON output by creating a new function in output.rs to generate the JSON String output manually. If you look at the implementation of Output for CredentialAndPurposeKeyDisplay you have to repeat similar steps to create the JSON formatted string.
Another approach you might take to create JSON output is add the Serialize attribute to the derive macro for CredentialAndPurposeKeyDisplay and all the structs that it depends on. In this case you might also need to add the following
Note that the implementation of write_line() has some side effects when the terminal is uninteractive. This is the case in bats tests and in CI/CD environments (where bats tests are also run). When both json and plain outputs are available, and the terminal is non-interactive, then the JSON output is used by default, unless the --output plain option is explicitly passed in to the command. Here's the code for this.
This is something to keep in mind when providing both JSON and plain output here. This may have an effect in the bats tests (below) that may need to be updated to pass the --output plain option.
Current behavior
Both
ockam project ticket
andockam project enroll
currently do not support the--output json
option.Currently:
ockam project ticket
produces a HEX string (base64 encoded JSON blob) that is output to stdout or redirected to a file or saved to an env var. The benefit of use this HEX string is that it can easily be saved to an env var, and used by theockam project enroll
command, w/out having to worry about CR/LF for a multiline JSON string.ockam project enroll
can accept this HEX string (base64 encoded JSON blob) as a string, or a file path.Here are examples:
1) Desired behavior for
ockam project ticket --output json
If
--output json
is used inockam project ticket
, then this JSON output should be usable byockam project enroll
. So there are 2 possibilities forockam project ticket
:ockam project ticket
-> outputs a HEX string (base64 encoded JSON blob) to stdout, and JSON blob to stderr (usingopts.terminal.write_line()
as described above).ockam project ticket --output json
-> produces a JSON blob that is displayed to stdout (can be redirected to a file). This does not generate the HEX base64 encoded string.On the flip side,
ockam project enroll
should be able to work with either HEX string or JSON blob. Additionally, the positional argument that it takes can be a string or a filepath. This means that the command should apply the following strategy to parse this positional argument:To process the string:
2) Desired behavior for
ockam project enroll --output json
Currently the
CredentialAndPurposeKeyDisplay
is used to display the credential that is generated to stdout. If--output json
is passed, then generate JSON output by creating a new function in output.rs to generate the JSON String output manually. If you look at the implementation ofOutput
forCredentialAndPurposeKeyDisplay
you have to repeat similar steps to create the JSON formatted string.Finally, to actually output this to stdout, you can use
Here's a code example of this: https://github.com/build-trust/ockam/blob/develop/implementations/rust/ockam/ockam_command/src/node/show.rs#L206
3) Update bats tests
Additionally bats tests might need to be updated to exercise all these new command paths.
https://github.com/build-trust/ockam/blob/develop/implementations/rust/ockam/ockam_command/tests/bats/
The text was updated successfully, but these errors were encountered: