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
|
"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");
|
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
|
proposal
|
||||||
};
|
};
|
||||||
if proposal == current.doc {
|
if proposal == current.doc {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue