Skip to content

Commit a009846

Browse files
committed
Factor out request body parsing to separate function.
1 parent b0b4276 commit a009846

File tree

1 file changed

+20
-16
lines changed

1 file changed

+20
-16
lines changed

src/controllers/krate/owners.rs

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -68,10 +68,29 @@ pub fn remove_owners(req: &mut dyn Request) -> CargoResult<Response> {
6868
modify_owners(req, false)
6969
}
7070

71-
fn modify_owners(req: &mut dyn Request, add: bool) -> CargoResult<Response> {
71+
/// Parse the JSON request body of requests to modify the owners of a crate.
72+
/// The format is
73+
///
74+
/// {"owners": ["username", "github:org:team", ...]}
75+
fn parse_owners_request(req: &mut dyn Request) -> CargoResult<Vec<String>> {
7276
let mut body = String::new();
7377
req.body().read_to_string(&mut body)?;
78+
#[derive(Deserialize)]
79+
struct Request {
80+
// identical, for back-compat (owners preferred)
81+
users: Option<Vec<String>>,
82+
owners: Option<Vec<String>>,
83+
}
84+
let request: Request =
85+
serde_json::from_str(&body).map_err(|_| human("invalid json request"))?;
86+
request
87+
.owners
88+
.or(request.users)
89+
.ok_or_else(|| human("invalid json request"))
90+
}
7491

92+
fn modify_owners(req: &mut dyn Request, add: bool) -> CargoResult<Response> {
93+
let logins = parse_owners_request(req)?;
7594
let user = req.user()?;
7695
let conn = req.db_conn()?;
7796
let krate = Crate::by_name(&req.params()["crate_id"]).first::<Crate>(&*conn)?;
@@ -88,21 +107,6 @@ fn modify_owners(req: &mut dyn Request, add: bool) -> CargoResult<Response> {
88107
}
89108
}
90109

91-
#[derive(Deserialize)]
92-
struct Request {
93-
// identical, for back-compat (owners preferred)
94-
users: Option<Vec<String>>,
95-
owners: Option<Vec<String>>,
96-
}
97-
98-
let request: Request =
99-
serde_json::from_str(&body).map_err(|_| human("invalid json request"))?;
100-
101-
let logins = request
102-
.owners
103-
.or(request.users)
104-
.ok_or_else(|| human("invalid json request"))?;
105-
106110
let mut msgs = Vec::new();
107111

108112
for login in &logins {

0 commit comments

Comments
 (0)