aboutsummaryrefslogtreecommitdiff
path: root/planetwars-server/src/routes
diff options
context:
space:
mode:
authorIlion Beyst <ilion.beyst@gmail.com>2022-09-10 18:56:03 +0200
committerIlion Beyst <ilion.beyst@gmail.com>2022-09-10 18:56:03 +0200
commit3058028edc7ab794e496e12075fa79a4133cd42c (patch)
tree60882f1238f008670df5b01f0ec5e87a10158a61 /planetwars-server/src/routes
parent78a6032b60eea6f39549814c9c38d9078e20284e (diff)
downloadplanetwars.dev-3058028edc7ab794e496e12075fa79a4133cd42c.tar.xz
planetwars.dev-3058028edc7ab794e496e12075fa79a4133cd42c.zip
allow retrieving bot code
Diffstat (limited to 'planetwars-server/src/routes')
-rw-r--r--planetwars-server/src/routes/bots.rs26
1 files changed, 26 insertions, 0 deletions
diff --git a/planetwars-server/src/routes/bots.rs b/planetwars-server/src/routes/bots.rs
index f2bf202..4ab1b4e 100644
--- a/planetwars-server/src/routes/bots.rs
+++ b/planetwars-server/src/routes/bots.rs
@@ -249,3 +249,29 @@ pub async fn upload_code_multipart(
Ok(Json(code_bundle))
}
+
+pub async fn get_code(
+ conn: DatabaseConnection,
+ user: User,
+ Path(bundle_id): Path<i32>,
+ Extension(config): Extension<Arc<GlobalConfig>>,
+) -> Result<Vec<u8>, StatusCode> {
+ let version =
+ db::bots::find_bot_version(bundle_id, &conn).map_err(|_| StatusCode::NOT_FOUND)?;
+ let bot_id = version.bot_id.ok_or(StatusCode::FORBIDDEN)?;
+ let bot = db::bots::find_bot(bot_id, &conn).map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?;
+
+ if bot.owner_id != Some(user.id) {
+ return Err(StatusCode::FORBIDDEN);
+ }
+
+ let bundle_path = version.code_bundle_path.ok_or(StatusCode::NOT_FOUND)?;
+
+ // TODO: avoid hardcoding paths
+ let full_bundle_path = PathBuf::from(&config.bots_directory)
+ .join(&bundle_path)
+ .join("bot.py");
+ let bot_code =
+ std::fs::read(full_bundle_path).map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?;
+ Ok(bot_code)
+}