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:
Fintan Halpenny 2024-05-14 15:59:08 +01:00
parent 11a1bca0fc
commit cb2cbf014a
No known key found for this signature in database
GPG Key ID: C93C17467280C75B
2 changed files with 12 additions and 0 deletions

View File

@ -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`
```

View File

@ -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 {