@@ -68,10 +68,29 @@ pub fn remove_owners(req: &mut dyn Request) -> CargoResult<Response> {
68
68
modify_owners ( req, false )
69
69
}
70
70
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 > > {
72
76
let mut body = String :: new ( ) ;
73
77
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
+ }
74
91
92
+ fn modify_owners ( req : & mut dyn Request , add : bool ) -> CargoResult < Response > {
93
+ let logins = parse_owners_request ( req) ?;
75
94
let user = req. user ( ) ?;
76
95
let conn = req. db_conn ( ) ?;
77
96
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> {
88
107
}
89
108
}
90
109
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
-
106
110
let mut msgs = Vec :: new ( ) ;
107
111
108
112
for login in & logins {
0 commit comments