diff --git a/server/src/routes/git.rs b/server/src/routes/git.rs
index ab04aa7..da02c7e 100644
--- a/server/src/routes/git.rs
+++ b/server/src/routes/git.rs
@@ -105,15 +105,23 @@ fn forbidden() -> Response
{
/// Resolves an app name/id and checks whether the user may push to it.
/// Returns the app_id on success.
async fn check_push_access(s: &AppState, user_id: &str, app: &str) -> Option {
- let app_id: String =
- sqlx::query_scalar("SELECT id FROM apps WHERE id = ? OR name = ?")
+ let app_id: Option =
+ sqlx::query_scalar::<_, String>("SELECT id FROM apps WHERE id = ? OR name = ?")
.bind(app)
.bind(app)
.fetch_optional(&s.db)
.await
- .unwrap_or(None)?;
+ .unwrap_or(None);
- let is_admin: i64 = sqlx::query_scalar("SELECT is_admin FROM users WHERE id = ?")
+ let app_id = match app_id {
+ Some(id) => id,
+ None => {
+ tracing::debug!("check_push_access: no app found for {:?}", app);
+ return None;
+ }
+ };
+
+ let is_admin: i64 = sqlx::query_scalar::<_, i64>("SELECT is_admin FROM users WHERE id = ?")
.bind(user_id)
.fetch_optional(&s.db)
.await
@@ -121,17 +129,24 @@ async fn check_push_access(s: &AppState, user_id: &str, app: &str) -> Option =
- sqlx::query_scalar("SELECT 1 FROM user_apps WHERE user_id = ? AND app_id = ?")
+ sqlx::query_scalar::<_, i64>("SELECT 1 FROM user_apps WHERE user_id = ? AND app_id = ?")
.bind(user_id)
.bind(&app_id)
.fetch_optional(&s.db)
.await
.unwrap_or(None);
+ if granted.is_none() {
+ tracing::debug!(
+ "check_push_access: user {} has no grant for app {}",
+ user_id, app_id
+ );
+ }
granted.map(|_| app_id)
}