Skip to content

Commit 95a55e0

Browse files
committed
Use methods instead of add/remove for owners
1 parent f554928 commit 95a55e0

File tree

3 files changed

+27
-32
lines changed

3 files changed

+27
-32
lines changed

src/krate.rs

Lines changed: 19 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -703,7 +703,15 @@ pub fn owners(req: &mut Request) -> CargoResult<Response> {
703703
Ok(req.json(&R{ users: owners }))
704704
}
705705

706-
pub fn modify_owners(req: &mut Request) -> CargoResult<Response> {
706+
pub fn add_owners(req: &mut Request) -> CargoResult<Response> {
707+
modify_owners(req, true)
708+
}
709+
710+
pub fn remove_owners(req: &mut Request) -> CargoResult<Response> {
711+
modify_owners(req, false)
712+
}
713+
714+
fn modify_owners(req: &mut Request, add: bool) -> CargoResult<Response> {
707715
let body = try!(req.body().read_to_string());
708716
let (user, krate) = try!(user_and_crate(req));
709717
let tx = try!(req.tx());
@@ -712,31 +720,21 @@ pub fn modify_owners(req: &mut Request) -> CargoResult<Response> {
712720
return Err(human("must already be an owner to modify owners"))
713721
}
714722

715-
#[deriving(Decodable)]
716-
struct Request { add: Option<Vec<String>>, remove: Option<Vec<String>> }
717-
let request: Request = try!(json::decode(body.as_slice()).map_err(|_| {
723+
#[deriving(Decodable)] struct Request { users: Vec<String> }
724+
let request: Request = try!(json::decode(body.as_slice()).map_err(|e| {
718725
human("invalid json request")
719726
}));
720727

721-
match request.add {
722-
Some(to_add) => {
723-
for to_add in to_add.iter() {
724-
try!(krate.owner_add(tx, user.id, to_add.as_slice()));
725-
}
726-
}
727-
None => {}
728-
}
729-
match request.remove {
730-
Some(to_remove) => {
731-
for to_remove in to_remove.iter() {
732-
if to_remove.as_slice() == user.gh_login.as_slice() {
733-
req.rollback();
734-
return Err(human("cannot remove yourself as an owner"))
735-
}
736-
try!(krate.owner_remove(tx, user.id, to_remove.as_slice()));
728+
for login in request.users.iter() {
729+
if add {
730+
try!(krate.owner_add(tx, user.id, login.as_slice()));
731+
} else {
732+
if login.as_slice() == user.gh_login.as_slice() {
733+
req.rollback();
734+
return Err(human("cannot remove yourself as an owner"))
737735
}
736+
try!(krate.owner_remove(tx, user.id, login.as_slice()));
738737
}
739-
None => {}
740738
}
741739

742740
#[deriving(Encodable)]

src/lib.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,8 @@ pub fn middleware(app: Arc<App>) -> MiddlewareBuilder {
8888
router.put("/crates/:crate_id/unfollow", C(krate::unfollow));
8989
router.get("/crates/:crate_id/following", C(krate::following));
9090
router.get("/crates/:crate_id/owners", C(krate::owners));
91-
router.put("/crates/:crate_id/owners", C(krate::modify_owners));
91+
router.put("/crates/:crate_id/owners", C(krate::add_owners));
92+
router.delete("/crates/:crate_id/owners", C(krate::remove_owners));
9293
router.get("/versions", C(version::index));
9394
router.get("/versions/:version_id", C(version::show));
9495
router.get("/git/index/*path", C(git::serve_index));

src/tests/krate.rs

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,7 @@ fn new_crate_owner() {
287287
let mut response = t_resp!(middle.call(&mut req));
288288
::json::<GoodCrate>(&mut response);
289289

290-
let body = r#"{"add":["foobar"]}"#;
290+
let body = r#"{"users":["foobar"]}"#;
291291
let mut response = ok_resp!(middle.call(req.with_path("/crates/foo/owners")
292292
.with_method(conduit::Put)
293293
.with_body(body)));
@@ -541,15 +541,11 @@ fn owners() {
541541
let r: R = ::json(&mut response);
542542
assert_eq!(r.users.len(), 1);
543543

544-
let mut response = ok_resp!(middle.call(req.with_method(conduit::Put)
545-
.with_body("{}")));
546-
assert!(::json::<O>(&mut response).ok);
547-
548544
let mut response = ok_resp!(middle.call(req.with_method(conduit::Get)));
549545
let r: R = ::json(&mut response);
550546
assert_eq!(r.users.len(), 1);
551547

552-
let body = r#"{"add":["foobar"]}"#;
548+
let body = r#"{"users":["foobar"]}"#;
553549
let mut response = ok_resp!(middle.call(req.with_method(conduit::Put)
554550
.with_body(body)));
555551
assert!(::json::<O>(&mut response).ok);
@@ -558,17 +554,17 @@ fn owners() {
558554
let r: R = ::json(&mut response);
559555
assert_eq!(r.users.len(), 2);
560556

561-
let body = r#"{"remove":["foobar"]}"#;
562-
let mut response = ok_resp!(middle.call(req.with_method(conduit::Put)
557+
let body = r#"{"users":["foobar"]}"#;
558+
let mut response = ok_resp!(middle.call(req.with_method(conduit::Delete)
563559
.with_body(body)));
564560
assert!(::json::<O>(&mut response).ok);
565561

566562
let mut response = ok_resp!(middle.call(req.with_method(conduit::Get)));
567563
let r: R = ::json(&mut response);
568564
assert_eq!(r.users.len(), 1);
569565

570-
let body = r#"{"remove":["foo"]}"#;
571-
let mut response = ok_resp!(middle.call(req.with_method(conduit::Put)
566+
let body = r#"{"users":["foo"]}"#;
567+
let mut response = ok_resp!(middle.call(req.with_method(conduit::Delete)
572568
.with_body(body)));
573569
::json::<::Bad>(&mut response);
574570
}

0 commit comments

Comments
 (0)