Skip to content

Commit 8f56f39

Browse files
committed
Move backend routes under api/v1
For consistency, to avoid the clash with the frontend /me route that caused problems with staying logged in, to make it clear that these routes are part of the public HTTP API provided by crates.io, and to let us evolve these routes in the future.
1 parent 5022aae commit 8f56f39

File tree

9 files changed

+60
-48
lines changed

9 files changed

+60
-48
lines changed

app/adapters/api-token.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import DS from 'ember-data';
22

33
export default DS.RESTAdapter.extend({
4-
namespace: 'me',
4+
namespace: 'api/v1/me',
55
pathForType() {
66
return 'tokens';
77
}

app/controllers/dashboard.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ export default Controller.extend({
4545
this.set('loadingMore', true);
4646
let page = (this.get('myFeed').length / 10) + 1;
4747

48-
this.get('ajax').request(`/me/updates?page=${page}`).then((data) => {
48+
this.get('ajax').request(`/api/v1/me/updates?page=${page}`).then((data) => {
4949
let versions = data.versions.map(version =>
5050
this.store.push(this.store.normalize('version', version)));
5151

app/routes/application.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ export default Route.extend({
1111
beforeModel() {
1212
if (this.session.get('isLoggedIn') &&
1313
this.session.get('currentUser') === null) {
14-
this.get('ajax').request('/me').then((response) => {
14+
this.get('ajax').request('/api/v1/me').then((response) => {
1515
this.session.set('currentUser', this.store.push(this.store.normalize('user', response.user)));
1616
}).catch(() => this.session.logoutUser()).finally(() => {
1717
window.currentUserDetected = true;

app/routes/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ export default Route.extend({
2020
}
2121
}
2222

23-
return this.get('ajax').request('/summary').then((data) => {
23+
return this.get('ajax').request('/api/v1/summary').then((data) => {
2424
addCrates(this.store, data.new_crates);
2525
addCrates(this.store, data.most_downloaded);
2626
addCrates(this.store, data.just_updated);

mirage/config.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import Response from 'ember-cli-mirage/response';
22

33
export default function() {
4+
this.namespace = '/api/v1';
5+
46
this.get('/summary', function(schema) {
57
let crates = schema.crates.all();
68

@@ -28,8 +30,6 @@ export default function() {
2830
};
2931
});
3032

31-
this.namespace = '/api/v1';
32-
3333
this.get('/crates', function(schema, request) {
3434
const { start, end } = pageParams(request);
3535

src/lib.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,12 @@ pub fn middleware(app: Arc<App>) -> MiddlewareBuilder {
180180
api_router.put("/users/:user_id", C(user::update_user));
181181
api_router.get("/users/:user_id/stats", C(user::stats));
182182
api_router.get("/teams/:team_id", C(user::show_team));
183+
api_router.get("/me", C(user::me));
184+
api_router.get("/me/updates", C(user::updates));
185+
api_router.get("/me/tokens", C(token::list));
186+
api_router.post("/me/tokens", C(token::new));
187+
api_router.delete("/me/tokens/:id", C(token::revoke));
188+
api_router.get("/summary", C(krate::summary));
183189
let api_router = Arc::new(R404(api_router));
184190

185191
let mut router = RouteBuilder::new();
@@ -195,12 +201,6 @@ pub fn middleware(app: Arc<App>) -> MiddlewareBuilder {
195201
router.get("/authorize_url", C(user::github_authorize));
196202
router.get("/authorize", C(user::github_access_token));
197203
router.delete("/logout", C(user::logout));
198-
router.get("/me", C(user::me));
199-
router.get("/me/updates", C(user::updates));
200-
router.get("/me/tokens", C(token::list));
201-
router.post("/me/tokens", C(token::new));
202-
router.delete("/me/tokens/:id", C(token::revoke));
203-
router.get("/summary", C(krate::summary));
204204

205205
// Only serve the local checkout of the git index in development mode.
206206
// In production, for crates.io, cargo gets the index from

src/tests/krate.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1054,7 +1054,7 @@ fn new_krate_with_readme() {
10541054
#[test]
10551055
fn summary_doesnt_die() {
10561056
let (_b, app, middle) = ::app();
1057-
let mut req = ::req(app, Method::Get, "/summary");
1057+
let mut req = ::req(app, Method::Get, "/api/v1/summary");
10581058
ok_resp!(middle.call(&mut req));
10591059
}
10601060

src/tests/token.rs

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ macro_rules! assert_contains {
2626
#[test]
2727
fn list_logged_out() {
2828
let (_b, app, middle) = ::app();
29-
let mut req = ::req(app.clone(), Method::Get, "/me/tokens");
29+
let mut req = ::req(app.clone(), Method::Get, "/api/v1/me/tokens");
3030

3131
let response = t_resp!(middle.call(&mut req));
3232
assert_eq!(response.status.0, 403);
@@ -35,7 +35,7 @@ fn list_logged_out() {
3535
#[test]
3636
fn list_empty() {
3737
let (_b, app, middle) = ::app();
38-
let mut req = ::req(app.clone(), Method::Get, "/me/tokens");
38+
let mut req = ::req(app.clone(), Method::Get, "/api/v1/me/tokens");
3939

4040
let user = {
4141
let conn = t!(app.diesel_database.get());
@@ -52,7 +52,7 @@ fn list_empty() {
5252
#[test]
5353
fn list_tokens() {
5454
let (_b, app, middle) = ::app();
55-
let mut req = ::req(app.clone(), Method::Get, "/me/tokens");
55+
let mut req = ::req(app.clone(), Method::Get, "/api/v1/me/tokens");
5656

5757
let (user, tokens);
5858
{
@@ -81,7 +81,7 @@ fn list_tokens() {
8181
#[test]
8282
fn create_token_logged_out() {
8383
let (_b, app, middle) = ::app();
84-
let mut req = ::req(app.clone(), Method::Post, "/me/tokens");
84+
let mut req = ::req(app.clone(), Method::Post, "/api/v1/me/tokens");
8585

8686
req.with_body(br#"{ "api_token": { "name": "bar" } }"#);
8787

@@ -92,7 +92,7 @@ fn create_token_logged_out() {
9292
#[test]
9393
fn create_token_invalid_request() {
9494
let (_b, app, middle) = ::app();
95-
let mut req = ::req(app.clone(), Method::Post, "/me/tokens");
95+
let mut req = ::req(app.clone(), Method::Post, "/api/v1/me/tokens");
9696

9797
let user = {
9898
let conn = t!(app.diesel_database.get());
@@ -111,7 +111,7 @@ fn create_token_invalid_request() {
111111
#[test]
112112
fn create_token_no_name() {
113113
let (_b, app, middle) = ::app();
114-
let mut req = ::req(app.clone(), Method::Post, "/me/tokens");
114+
let mut req = ::req(app.clone(), Method::Post, "/api/v1/me/tokens");
115115

116116
let user = {
117117
let conn = t!(app.diesel_database.get());
@@ -130,7 +130,7 @@ fn create_token_no_name() {
130130
#[test]
131131
fn create_token_long_body() {
132132
let (_b, app, middle) = ::app();
133-
let mut req = ::req(app.clone(), Method::Post, "/me/tokens");
133+
let mut req = ::req(app.clone(), Method::Post, "/api/v1/me/tokens");
134134

135135
let user = {
136136
let conn = t!(app.diesel_database.get());
@@ -149,7 +149,7 @@ fn create_token_long_body() {
149149
#[test]
150150
fn create_token_exceeded_tokens_per_user() {
151151
let (_b, app, middle) = ::app();
152-
let mut req = ::req(app.clone(), Method::Post, "/me/tokens");
152+
let mut req = ::req(app.clone(), Method::Post, "/api/v1/me/tokens");
153153

154154
let user;
155155
{
@@ -172,7 +172,7 @@ fn create_token_exceeded_tokens_per_user() {
172172
#[test]
173173
fn create_token_success() {
174174
let (_b, app, middle) = ::app();
175-
let mut req = ::req(app.clone(), Method::Post, "/me/tokens");
175+
let mut req = ::req(app.clone(), Method::Post, "/api/v1/me/tokens");
176176

177177
let user = {
178178
let conn = t!(app.diesel_database.get());
@@ -205,14 +205,14 @@ fn create_token_multiple_have_different_values() {
205205
};
206206

207207
let first = {
208-
let mut req = ::req(app.clone(), Method::Post, "/me/tokens");
208+
let mut req = ::req(app.clone(), Method::Post, "/api/v1/me/tokens");
209209
::sign_in_as(&mut req, &user);
210210
req.with_body(br#"{ "api_token": { "name": "bar" } }"#);
211211
::json::<NewResponse>(&mut ok_resp!(middle.call(&mut req)))
212212
};
213213

214214
let second = {
215-
let mut req = ::req(app.clone(), Method::Post, "/me/tokens");
215+
let mut req = ::req(app.clone(), Method::Post, "/api/v1/me/tokens");
216216
::sign_in_as(&mut req, &user);
217217
req.with_body(br#"{ "api_token": { "name": "bar" } }"#);
218218
::json::<NewResponse>(&mut ok_resp!(middle.call(&mut req)))
@@ -236,14 +236,14 @@ fn create_token_multiple_users_have_different_values() {
236236
};
237237

238238
let first_token = {
239-
let mut req = ::req(app.clone(), Method::Post, "/me/tokens");
239+
let mut req = ::req(app.clone(), Method::Post, "/api/v1/me/tokens");
240240
::sign_in_as(&mut req, &first_user);
241241
req.with_body(br#"{ "api_token": { "name": "baz" } }"#);
242242
::json::<NewResponse>(&mut ok_resp!(middle.call(&mut req)))
243243
};
244244

245245
let second_token = {
246-
let mut req = ::req(app.clone(), Method::Post, "/me/tokens");
246+
let mut req = ::req(app.clone(), Method::Post, "/api/v1/me/tokens");
247247
::sign_in_as(&mut req, &second_user);
248248
req.with_body(br#"{ "api_token": { "name": "baz" } }"#);
249249
::json::<NewResponse>(&mut ok_resp!(middle.call(&mut req)))
@@ -255,7 +255,7 @@ fn create_token_multiple_users_have_different_values() {
255255
#[test]
256256
fn create_token_with_token() {
257257
let (_b, app, middle) = ::app();
258-
let mut req = ::req(app.clone(), Method::Post, "/me/tokens");
258+
let mut req = ::req(app.clone(), Method::Post, "/api/v1/me/tokens");
259259

260260
let (user, token);
261261
{
@@ -279,7 +279,7 @@ fn create_token_with_token() {
279279
#[test]
280280
fn revoke_token_non_existing() {
281281
let (_b, app, middle) = ::app();
282-
let mut req = ::req(app.clone(), Method::Delete, "/me/tokens/5");
282+
let mut req = ::req(app.clone(), Method::Delete, "/api/v1/me/tokens/5");
283283

284284
let user = {
285285
let conn = t!(app.diesel_database.get());
@@ -294,7 +294,7 @@ fn revoke_token_non_existing() {
294294
#[test]
295295
fn revoke_token_doesnt_revoke_other_users_token() {
296296
let (_b, app, middle) = ::app();
297-
let mut req = ::req(app.clone(), Method::Delete, "/me/tokens");
297+
let mut req = ::req(app.clone(), Method::Delete, "/api/v1/me/tokens");
298298

299299
// Create one user with a token and sign in with a different user
300300
let (user1, token, user2);
@@ -316,7 +316,7 @@ fn revoke_token_doesnt_revoke_other_users_token() {
316316

317317
// Try revoke the token as second user
318318
{
319-
req.with_path(&format!("/me/tokens/{}", token.id));
319+
req.with_path(&format!("/api/v1/me/tokens/{}", token.id));
320320

321321
let mut response = ok_resp!(middle.call(&mut req));
322322
::json::<RevokedResponse>(&mut response);
@@ -334,7 +334,7 @@ fn revoke_token_doesnt_revoke_other_users_token() {
334334
#[test]
335335
fn revoke_token_success() {
336336
let (_b, app, middle) = ::app();
337-
let mut req = ::req(app.clone(), Method::Delete, "/me/tokens");
337+
let mut req = ::req(app.clone(), Method::Delete, "/api/v1/me/tokens");
338338

339339
let (user, token);
340340
{
@@ -354,7 +354,7 @@ fn revoke_token_success() {
354354

355355
// Revoke the token
356356
{
357-
req.with_path(&format!("/me/tokens/{}", token.id));
357+
req.with_path(&format!("/api/v1/me/tokens/{}", token.id));
358358

359359
let mut response = ok_resp!(middle.call(&mut req));
360360
::json::<RevokedResponse>(&mut response);
@@ -371,7 +371,7 @@ fn revoke_token_success() {
371371
#[test]
372372
fn token_gives_access_to_me() {
373373
let (_b, app, middle) = ::app();
374-
let mut req = ::req(app.clone(), Method::Get, "/me");
374+
let mut req = ::req(app.clone(), Method::Get, "/api/v1/me");
375375

376376
let response = t_resp!(middle.call(&mut req));
377377
assert_eq!(response.status.0, 403);
@@ -393,7 +393,7 @@ fn token_gives_access_to_me() {
393393
#[test]
394394
fn using_token_updates_last_used_at() {
395395
let (_b, app, middle) = ::app();
396-
let mut req = ::req(app.clone(), Method::Get, "/me");
396+
let mut req = ::req(app.clone(), Method::Get, "/api/v1/me");
397397
let response = t_resp!(middle.call(&mut req));
398398
assert_eq!(response.status.0, 403);
399399

@@ -422,7 +422,7 @@ fn using_token_updates_last_used_at() {
422422
#[test]
423423
fn deleted_token_does_not_give_access_to_me() {
424424
let (_b, app, middle) = ::app();
425-
let mut req = ::req(app.clone(), Method::Get, "/me");
425+
let mut req = ::req(app.clone(), Method::Get, "/api/v1/me");
426426

427427
let response = t_resp!(middle.call(&mut req));
428428
assert_eq!(response.status.0, 403);

0 commit comments

Comments
 (0)