cli: reject `rad id` proposals that do not verify
To ensure that the `rad id` command does not modify the project payload without it being able to be deserialized into the `Project` type, the command performs this check throught the `project` method, and returns an error if this fails. Signed-off-by: Fintan Halpenny <fintan.halpenny@gmail.com> X-Clacks-Overhead: GNU Terry Pratchett
This commit is contained in:
parent
11a1bca0fc
commit
cb2cbf014a
|
|
@ -69,3 +69,10 @@ $ rad id update --title "Delete field" --description "Delete 'web'" --payload xy
|
|||
"threshold": 1
|
||||
}
|
||||
```
|
||||
|
||||
Note that we cannot delete mandatory fields:
|
||||
|
||||
``` (fails)
|
||||
$ rad id update --title "Delete default branch" --payload xyz.radicle.project defaultBranch null
|
||||
✗ Error: failed to verify `xyz.radicle.project`, failed with json: missing field `defaultBranch`
|
||||
```
|
||||
|
|
|
|||
|
|
@ -390,6 +390,11 @@ pub fn run(options: Options, ctx: impl term::Context) -> anyhow::Result<()> {
|
|||
anyhow::bail!("payload `{id}` not found in identity document");
|
||||
}
|
||||
}
|
||||
// Verify that the project payload can still be parsed into the
|
||||
// `Project` type.
|
||||
if let Err(e) = proposal.project() {
|
||||
anyhow::bail!("failed to verify `xyz.radicle.project`, failed with {e}",);
|
||||
}
|
||||
proposal
|
||||
};
|
||||
if proposal == current.doc {
|
||||
|
|
|
|||
Loading…
Reference in New Issue