Fix version file visibility (#630)

* Fix version file visibility

* add missing

* update prepare
This commit is contained in:
Geometrically
2023-06-08 20:25:03 -07:00
committed by GitHub
parent b84d9c5d55
commit ea043517c5
8 changed files with 559 additions and 550 deletions

1
.env
View File

@@ -43,7 +43,6 @@ LOCAL_INDEX_INTERVAL=3600
VERSION_INDEX_INTERVAL=1800 VERSION_INDEX_INTERVAL=1800
GITHUB_CLIENT_ID=none GITHUB_CLIENT_ID=none
GITHUB_CLIENT_SECRET=none
RATE_LIMIT_IGNORE_IPS='["127.0.0.1"]' RATE_LIMIT_IGNORE_IPS='["127.0.0.1"]'

File diff suppressed because it is too large Load Diff

View File

@@ -776,7 +776,7 @@ impl Project {
FROM versions v FROM versions v
INNER JOIN game_versions_versions gvv ON v.id = gvv.joining_version_id INNER JOIN game_versions_versions gvv ON v.id = gvv.joining_version_id
INNER JOIN game_versions gv on gvv.game_version_id = gv.id INNER JOIN game_versions gv on gvv.game_version_id = gv.id
WHERE v.mod_id = mods.id AND v.status != ANY($2) WHERE v.mod_id = mods.id AND v.status != ALL($2)
) )
WHERE id = $1 WHERE id = $1
", ",
@@ -801,7 +801,7 @@ impl Project {
FROM versions v FROM versions v
INNER JOIN loaders_versions lv ON lv.version_id = v.id INNER JOIN loaders_versions lv ON lv.version_id = v.id
INNER JOIN loaders l on lv.loader_id = l.id INNER JOIN loaders l on lv.loader_id = l.id
WHERE v.mod_id = mods.id AND v.status != ANY($2) WHERE v.mod_id = mods.id AND v.status != ALL($2)
) )
WHERE id = $1 WHERE id = $1
", ",

View File

@@ -430,7 +430,6 @@ fn check_env_vars() -> bool {
failed |= check_var::<usize>("VERSION_INDEX_INTERVAL"); failed |= check_var::<usize>("VERSION_INDEX_INTERVAL");
failed |= check_var::<String>("GITHUB_CLIENT_ID"); failed |= check_var::<String>("GITHUB_CLIENT_ID");
failed |= check_var::<String>("GITHUB_CLIENT_SECRET");
failed |= check_var::<String>("ARIADNE_ADMIN_KEY"); failed |= check_var::<String>("ARIADNE_ADMIN_KEY");
failed |= check_var::<String>("ARIADNE_URL"); failed |= check_var::<String>("ARIADNE_URL");

View File

@@ -61,9 +61,9 @@ pub async fn get_version_from_hash(
SELECT f.version_id version_id SELECT f.version_id version_id
FROM hashes h FROM hashes h
INNER JOIN files f ON h.file_id = f.id INNER JOIN files f ON h.file_id = f.id
INNER JOIN versions v on f.version_id = v.id AND v.status != ANY($1) INNER JOIN versions v on f.version_id = v.id AND v.status != ALL($1)
INNER JOIN mods m on v.mod_id = m.id INNER JOIN mods m on v.mod_id = m.id
WHERE h.algorithm = $3 AND h.hash = $2 AND m.status != ANY($4) WHERE h.algorithm = $3 AND h.hash = $2 AND m.status != ALL($4)
ORDER BY v.date_published ASC ORDER BY v.date_published ASC
", ",
&*crate::models::projects::VersionStatus::iterator() &*crate::models::projects::VersionStatus::iterator()
@@ -121,9 +121,9 @@ pub async fn download_version(
" "
SELECT f.url url, f.id id, f.version_id version_id, v.mod_id project_id FROM hashes h SELECT f.url url, f.id id, f.version_id version_id, v.mod_id project_id FROM hashes h
INNER JOIN files f ON h.file_id = f.id INNER JOIN files f ON h.file_id = f.id
INNER JOIN versions v ON v.id = f.version_id AND v.status != ANY($1) INNER JOIN versions v ON v.id = f.version_id AND v.status != ALL($1)
INNER JOIN mods m on v.mod_id = m.id INNER JOIN mods m on v.mod_id = m.id
WHERE h.algorithm = $3 AND h.hash = $2 AND m.status != ANY($4) WHERE h.algorithm = $3 AND h.hash = $2 AND m.status != ALL($4)
ORDER BY v.date_published ASC ORDER BY v.date_published ASC
", ",
&*crate::models::projects::VersionStatus::iterator() &*crate::models::projects::VersionStatus::iterator()
@@ -278,9 +278,9 @@ pub async fn get_update_from_hash(
" "
SELECT v.mod_id project_id FROM hashes h SELECT v.mod_id project_id FROM hashes h
INNER JOIN files f ON h.file_id = f.id INNER JOIN files f ON h.file_id = f.id
INNER JOIN versions v ON v.id = f.version_id AND v.status != ANY($1) INNER JOIN versions v ON v.id = f.version_id AND v.status != ALL($1)
INNER JOIN mods m on v.mod_id = m.id INNER JOIN mods m on v.mod_id = m.id
WHERE h.algorithm = $3 AND h.hash = $2 AND m.status != ANY($4) WHERE h.algorithm = $3 AND h.hash = $2 AND m.status != ALL($4)
ORDER BY v.date_published ASC ORDER BY v.date_published ASC
", ",
&*crate::models::projects::VersionStatus::iterator() &*crate::models::projects::VersionStatus::iterator()
@@ -358,9 +358,9 @@ pub async fn get_versions_from_hashes(
" "
SELECT h.hash hash, h.algorithm algorithm, f.version_id version_id FROM hashes h SELECT h.hash hash, h.algorithm algorithm, f.version_id version_id FROM hashes h
INNER JOIN files f ON h.file_id = f.id INNER JOIN files f ON h.file_id = f.id
INNER JOIN versions v ON v.id = f.version_id AND v.status != ANY($1) INNER JOIN versions v ON v.id = f.version_id AND v.status != ALL($1)
INNER JOIN mods m on v.mod_id = m.id INNER JOIN mods m on v.mod_id = m.id
WHERE h.algorithm = $3 AND h.hash = ANY($2::bytea[]) AND m.status != ANY($4) WHERE h.algorithm = $3 AND h.hash = ANY($2::bytea[]) AND m.status != ALL($4)
", ",
&*crate::models::projects::VersionStatus::iterator() &*crate::models::projects::VersionStatus::iterator()
.filter(|x| x.is_hidden()) .filter(|x| x.is_hidden())
@@ -419,9 +419,9 @@ pub async fn get_projects_from_hashes(
" "
SELECT h.hash hash, h.algorithm algorithm, m.id project_id FROM hashes h SELECT h.hash hash, h.algorithm algorithm, m.id project_id FROM hashes h
INNER JOIN files f ON h.file_id = f.id INNER JOIN files f ON h.file_id = f.id
INNER JOIN versions v ON v.id = f.version_id AND v.status != ANY($1) INNER JOIN versions v ON v.id = f.version_id AND v.status != ALL($1)
INNER JOIN mods m on v.mod_id = m.id INNER JOIN mods m on v.mod_id = m.id
WHERE h.algorithm = $3 AND h.hash = ANY($2::bytea[]) AND m.status != ANY($4) WHERE h.algorithm = $3 AND h.hash = ANY($2::bytea[]) AND m.status != ALL($4)
", ",
&*crate::models::projects::VersionStatus::iterator() &*crate::models::projects::VersionStatus::iterator()
.filter(|x| x.is_hidden()) .filter(|x| x.is_hidden())
@@ -482,9 +482,9 @@ pub async fn download_files(
" "
SELECT f.url url, h.hash hash, h.algorithm algorithm, f.version_id version_id, v.mod_id project_id FROM hashes h SELECT f.url url, h.hash hash, h.algorithm algorithm, f.version_id version_id, v.mod_id project_id FROM hashes h
INNER JOIN files f ON h.file_id = f.id INNER JOIN files f ON h.file_id = f.id
INNER JOIN versions v ON v.id = f.version_id AND v.status != ANY($1) INNER JOIN versions v ON v.id = f.version_id AND v.status != ALL($1)
INNER JOIN mods m on v.mod_id = m.id INNER JOIN mods m on v.mod_id = m.id
WHERE h.algorithm = $3 AND h.hash = ANY($2::bytea[]) AND m.status != ANY($4) WHERE h.algorithm = $3 AND h.hash = ANY($2::bytea[]) AND m.status != ALL($4)
", ",
&*crate::models::projects::VersionStatus::iterator().filter(|x| x.is_hidden()).map(|x| x.to_string()).collect::<Vec<String>>(), &*crate::models::projects::VersionStatus::iterator().filter(|x| x.is_hidden()).map(|x| x.to_string()).collect::<Vec<String>>(),
hashes_parsed.as_slice(), hashes_parsed.as_slice(),
@@ -536,9 +536,9 @@ pub async fn update_files(
" "
SELECT h.hash, v.mod_id FROM hashes h SELECT h.hash, v.mod_id FROM hashes h
INNER JOIN files f ON h.file_id = f.id INNER JOIN files f ON h.file_id = f.id
INNER JOIN versions v ON v.id = f.version_id AND v.status != ANY($1) INNER JOIN versions v ON v.id = f.version_id AND v.status != ALL($1)
INNER JOIN mods m on v.mod_id = m.id INNER JOIN mods m on v.mod_id = m.id
WHERE h.algorithm = $3 AND h.hash = ANY($2::bytea[]) AND m.status != ANY($4) WHERE h.algorithm = $3 AND h.hash = ANY($2::bytea[]) AND m.status != ALL($4)
", ",
&*crate::models::projects::VersionStatus::iterator() &*crate::models::projects::VersionStatus::iterator()
.filter(|x| x.is_hidden()) .filter(|x| x.is_hidden())

View File

@@ -27,7 +27,7 @@ pub async fn index_local(pool: PgPool) -> Result<Vec<UploadSearchProject>, Index
FROM mods m FROM mods m
LEFT OUTER JOIN mods_categories mc ON joining_mod_id = m.id LEFT OUTER JOIN mods_categories mc ON joining_mod_id = m.id
LEFT OUTER JOIN categories c ON mc.joining_category_id = c.id LEFT OUTER JOIN categories c ON mc.joining_category_id = c.id
LEFT OUTER JOIN versions v ON v.mod_id = m.id AND v.status != ANY($1) LEFT OUTER JOIN versions v ON v.mod_id = m.id AND v.status != ALL($1)
LEFT OUTER JOIN game_versions_versions gvv ON gvv.joining_version_id = v.id LEFT OUTER JOIN game_versions_versions gvv ON gvv.joining_version_id = v.id
LEFT OUTER JOIN game_versions gv ON gvv.game_version_id = gv.id LEFT OUTER JOIN game_versions gv ON gvv.game_version_id = gv.id
LEFT OUTER JOIN loaders_versions lv ON lv.version_id = v.id LEFT OUTER JOIN loaders_versions lv ON lv.version_id = v.id

View File

@@ -35,6 +35,8 @@ pub enum AuthenticationError {
InvalidCredentials, InvalidCredentials,
#[error("Authentication method was not valid")] #[error("Authentication method was not valid")]
InvalidAuthMethod, InvalidAuthMethod,
#[error("GitHub Token from incorrect Client ID")]
InvalidClientId,
} }
// A user as stored in the Minos database // A user as stored in the Minos database
@@ -360,17 +362,26 @@ pub async fn get_user_from_github_token<'a, E>(
where where
E: sqlx::Executor<'a, Database = sqlx::Postgres>, E: sqlx::Executor<'a, Database = sqlx::Postgres>,
{ {
let github_user: GitHubUser = reqwest::Client::new() let response = reqwest::Client::new()
.get("https://api.github.com/user") .get("https://api.github.com/user")
.header(reqwest::header::USER_AGENT, "Modrinth") .header(reqwest::header::USER_AGENT, "Modrinth")
.header( .header(AUTHORIZATION, format!("token {access_token}"))
reqwest::header::AUTHORIZATION,
format!("token {access_token}"),
)
.send() .send()
.await?
.json()
.await?; .await?;
if access_token.starts_with("gho_") {
let client_id = response
.headers()
.get("x-oauth-client-id")
.and_then(|x| x.to_str().ok());
if client_id != Some(&*dotenvy::var("GITHUB_CLIENT_ID").unwrap()) {
return Err(AuthenticationError::InvalidClientId);
}
}
let github_user: GitHubUser = response.json().await?;
Ok(user_item::User::get_from_github_id(github_user.id, executor).await?) Ok(user_item::User::get_from_github_id(github_user.id, executor).await?)
} }

View File

@@ -91,7 +91,7 @@ pub async fn send_discord_webhook(
FROM mods m FROM mods m
LEFT OUTER JOIN mods_categories mc ON joining_mod_id = m.id AND mc.is_additional = FALSE LEFT OUTER JOIN mods_categories mc ON joining_mod_id = m.id AND mc.is_additional = FALSE
LEFT OUTER JOIN categories c ON mc.joining_category_id = c.id LEFT OUTER JOIN categories c ON mc.joining_category_id = c.id
LEFT OUTER JOIN versions v ON v.mod_id = m.id AND v.status != ANY($2) LEFT OUTER JOIN versions v ON v.mod_id = m.id AND v.status != ALL($2)
LEFT OUTER JOIN game_versions_versions gvv ON gvv.joining_version_id = v.id LEFT OUTER JOIN game_versions_versions gvv ON gvv.joining_version_id = v.id
LEFT OUTER JOIN game_versions gv ON gvv.game_version_id = gv.id LEFT OUTER JOIN game_versions gv ON gvv.game_version_id = gv.id
LEFT OUTER JOIN loaders_versions lv ON lv.version_id = v.id LEFT OUTER JOIN loaders_versions lv ON lv.version_id = v.id