Skip to content

Commit 5da6778

Browse files
committed
Adding audit trail actions into the publish, yank and unyank transactions.
1 parent 69767fc commit 5da6778

File tree

2 files changed

+22
-2
lines changed

2 files changed

+22
-2
lines changed

src/controllers/krate/publish.rs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,12 @@ use crate::util::{internal, ChainError, Maximums};
1111
use crate::util::{read_fill, read_le_u32};
1212

1313
use crate::controllers::prelude::*;
14+
use crate::middleware::current_user::AuthenticationSource;
1415
use crate::models::dependency;
15-
use crate::models::{Badge, Category, Keyword, NewCrate, NewVersion, Rights, User};
16+
use crate::models::{
17+
Badge, Category, Keyword, NewCrate, NewVersion, NewVersionOwnerAction, Rights, User,
18+
VersionAction,
19+
};
1620
use crate::views::{EncodableCrateUpload, GoodCrate, PublishWarnings};
1721

1822
/// Handles the `PUT /crates/new` route.
@@ -149,6 +153,11 @@ pub fn publish(req: &mut dyn Request) -> CargoResult<Response> {
149153
)?
150154
.save(&conn, &new_crate.authors, &verified_email_address)?;
151155

156+
if let AuthenticationSource::ApiToken(token_id) = req.authentication_source()? {
157+
NewVersionOwnerAction::new(version.id, user.id, token_id, VersionAction::Publish)
158+
.save(&conn)?;
159+
}
160+
152161
// Link this new version to all dependencies
153162
let git_deps = dependency::add_dependencies(&conn, &new_crate.deps, version.id)?;
154163

src/controllers/version/yank.rs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@ use crate::controllers::prelude::*;
44

55
use crate::git;
66

7-
use crate::models::Rights;
7+
use crate::middleware::current_user::AuthenticationSource;
8+
9+
use crate::models::{NewVersionOwnerAction, Rights, VersionAction};
810

911
use super::version_and_crate;
1012

@@ -36,6 +38,15 @@ fn modify_yank(req: &mut dyn Request, yanked: bool) -> CargoResult<Response> {
3638
return Err(human("must already be an owner to yank or unyank"));
3739
}
3840

41+
if let AuthenticationSource::ApiToken(token_id) = req.authentication_source()? {
42+
let action = if yanked {
43+
VersionAction::Yank
44+
} else {
45+
VersionAction::Unyank
46+
};
47+
NewVersionOwnerAction::new(version.id, user.id, token_id, action).save(&conn)?;
48+
}
49+
3950
git::yank(&conn, krate.name, version, yanked)?;
4051

4152
#[derive(Serialize)]

0 commit comments

Comments
 (0)