Skip to content

Commit ee0b7fc

Browse files
committed
Accept an uploaded readme
1 parent 95a55e0 commit ee0b7fc

File tree

4 files changed

+37
-15
lines changed

4 files changed

+37
-15
lines changed

src/bin/migrate.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -324,6 +324,7 @@ fn migrations() -> Vec<Migration> {
324324
"VARCHAR"),
325325
Migration::add_column(20141007171517, "crates", "documentation",
326326
"VARCHAR"),
327+
Migration::add_column(20141010150327, "crates", "readme", "VARCHAR"),
327328
];
328329
// NOTE: Generate a new id via `date +"%Y%m%d%H%M%S"`
329330

src/krate.rs

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ pub struct Crate {
3838
pub description: Option<String>,
3939
pub homepage: Option<String>,
4040
pub documentation: Option<String>,
41+
pub readme: Option<String>,
4142
}
4243

4344
#[deriving(Encodable, Decodable)]
@@ -80,10 +81,12 @@ impl Crate {
8081
user_id: i32,
8182
description: &Option<String>,
8283
homepage: &Option<String>,
83-
documentation: &Option<String>) -> CargoResult<Crate> {
84+
documentation: &Option<String>,
85+
readme: &Option<String>) -> CargoResult<Crate> {
8486
let description = description.as_ref().map(|s| s.as_slice());
8587
let homepage = homepage.as_ref().map(|s| s.as_slice());
8688
let documentation = documentation.as_ref().map(|s| s.as_slice());
89+
let readme = readme.as_ref().map(|s| s.as_slice());
8790
try!(validate_url(homepage));
8891
try!(validate_url(documentation));
8992

@@ -92,25 +95,28 @@ impl Crate {
9295
SET documentation = $1,
9396
homepage = $2,
9497
description = $3
95-
WHERE name = $4
98+
readme = $4
99+
WHERE name = $5
96100
RETURNING *"));
97101
let mut rows = try!(stmt.query(&[&documentation, &homepage,
98-
&description, &name as &ToSql]));
102+
&description, &name as &ToSql,
103+
&readme]));
99104
match rows.next() {
100105
Some(row) => return Ok(Model::from_row(&row)),
101106
None => {}
102107
}
103108
let stmt = try!(conn.prepare("INSERT INTO crates
104109
(name, user_id, created_at,
105110
updated_at, downloads, max_version,
106-
description, homepage, documentation)
111+
description, homepage, documentation,
112+
readme)
107113
VALUES ($1, $2, $3, $3, 0, '0.0.0',
108-
$4, $5, $6)
114+
$4, $5, $6, &7)
109115
RETURNING *"));
110116
let now = ::now();
111117
let mut rows = try!(stmt.query(&[&name as &ToSql, &user_id, &now,
112118
&description, &homepage,
113-
&documentation]));
119+
&documentation, &readme]));
114120
let ret: Crate = Model::from_row(&try!(rows.next().require(|| {
115121
internal("no crate returned")
116122
})));
@@ -253,6 +259,7 @@ impl Model for Crate {
253259
description: row.get("description"),
254260
documentation: row.get("documentation"),
255261
homepage: row.get("homepage"),
262+
readme: row.get("readme"),
256263
max_version: semver::Version::parse(max.as_slice()).unwrap(),
257264
}
258265
}
@@ -432,7 +439,8 @@ pub fn new(req: &mut Request) -> CargoResult<Response> {
432439
let mut krate = try!(Crate::find_or_insert(try!(req.tx()), name, user.id,
433440
&new_crate.description,
434441
&new_crate.homepage,
435-
&new_crate.documentation));
442+
&new_crate.documentation,
443+
&new_crate.readme));
436444
if krate.user_id != user.id {
437445
let owners = try!(krate.owners(try!(req.tx())));
438446
if !owners.iter().any(|o| o.id == user.id) {
@@ -721,7 +729,7 @@ fn modify_owners(req: &mut Request, add: bool) -> CargoResult<Response> {
721729
}
722730

723731
#[deriving(Decodable)] struct Request { users: Vec<String> }
724-
let request: Request = try!(json::decode(body.as_slice()).map_err(|e| {
732+
let request: Request = try!(json::decode(body.as_slice()).map_err(|_| {
725733
human("invalid json request")
726734
}));
727735

src/upload.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ pub struct NewCrate {
1515
pub description: Option<String>,
1616
pub homepage: Option<String>,
1717
pub documentation: Option<String>,
18+
pub readme: Option<String>,
1819
}
1920

2021
#[deriving(PartialEq, Eq, Hash)]

src/user/middleware.rs

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,26 @@ pub struct Middleware;
1212

1313
impl conduit_middleware::Middleware for Middleware {
1414
fn before(&self, req: &mut Request) -> Result<(), Box<Show + 'static>> {
15-
let id = match req.session().find_equiv(&"user_id")
15+
let user = match req.session().find_equiv(&"user_id")
1616
.and_then(|s| from_str(s.as_slice())) {
17-
Some(id) => id,
18-
None => return Ok(()),
19-
};
20-
let user = match User::find(try!(req.tx()), id) {
21-
Ok(user) => user,
22-
Err(..) => return Ok(()),
17+
Some(id) => {
18+
match User::find(try!(req.tx()), id) {
19+
Ok(user) => user,
20+
Err(..) => return Ok(()),
21+
}
22+
}
23+
None => {
24+
let tx = try!(req.tx());
25+
match req.headers().find("Authorization") {
26+
Some(headers) => {
27+
match User::find_by_api_token(tx, headers[0].as_slice()) {
28+
Ok(user) => user,
29+
Err(..) => return Ok(())
30+
}
31+
}
32+
None => return Ok(())
33+
}
34+
}
2335
};
2436

2537
req.mut_extensions().insert(user);

0 commit comments

Comments
 (0)