fix(auth): enforce authentication on write operations and fix CLI token auth

Co-authored-by: jnsgruk <668505+jnsgruk@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot] 2025-11-25 10:22:19 +00:00 committed by Jon Seager
parent 6d0ee869f7
commit 5f4cbf5294
No known key found for this signature in database
3 changed files with 17 additions and 2 deletions

View file

@ -40,7 +40,11 @@ impl<'a> TokensClient<'a> {
pub async fn list(&self) -> Result<Vec<Token>> { pub async fn list(&self) -> Result<Vec<Token>> {
let url = self.client.endpoint("api/v1/tokens")?; let url = self.client.endpoint("api/v1/tokens")?;
let response = self.client.http_client().get(url).send().await?; let response = self
.client
.request(reqwest::Method::GET, url)
.send()
.await?;
self.client.handle_response(response).await self.client.handle_response(response).await
} }
@ -50,7 +54,11 @@ impl<'a> TokensClient<'a> {
.client .client
.endpoint(&format!("api/v1/tokens/{}/revoke", id))?; .endpoint(&format!("api/v1/tokens/{}/revoke", id))?;
let response = self.client.http_client().post(url).send().await?; let response = self
.client
.request(reqwest::Method::POST, url)
.send()
.await?;
self.client.handle_response(response).await self.client.handle_response(response).await
} }

View file

@ -9,6 +9,7 @@ use crate::presentation::templates::{
RoasterDetailTemplate, RoasterListTemplate, RoastersTemplate, RoasterDetailTemplate, RoasterListTemplate, RoastersTemplate,
}; };
use crate::presentation::views::{ListNavigator, Paginated, RoastView, RoasterView}; use crate::presentation::views::{ListNavigator, Paginated, RoastView, RoasterView};
use crate::server::auth::AuthenticatedUser;
use crate::server::errors::{ApiError, AppError, map_app_error}; use crate::server::errors::{ApiError, AppError, map_app_error};
use crate::server::routes::render_html; use crate::server::routes::render_html;
use crate::server::routes::support::{ use crate::server::routes::support::{
@ -102,6 +103,7 @@ pub(crate) async fn list_roasters(
pub(crate) async fn create_roaster( pub(crate) async fn create_roaster(
State(state): State<AppState>, State(state): State<AppState>,
_auth_user: AuthenticatedUser,
headers: HeaderMap, headers: HeaderMap,
Query(query): Query<ListQuery>, Query(query): Query<ListQuery>,
payload: FlexiblePayload<NewRoaster>, payload: FlexiblePayload<NewRoaster>,
@ -138,6 +140,7 @@ pub(crate) async fn get_roaster(
pub(crate) async fn update_roaster( pub(crate) async fn update_roaster(
State(state): State<AppState>, State(state): State<AppState>,
_auth_user: AuthenticatedUser,
Path(id): Path<String>, Path(id): Path<String>,
Json(payload): Json<UpdateRoaster>, Json(payload): Json<UpdateRoaster>,
) -> Result<Json<Roaster>, ApiError> { ) -> Result<Json<Roaster>, ApiError> {
@ -161,6 +164,7 @@ pub(crate) async fn update_roaster(
pub(crate) async fn delete_roaster( pub(crate) async fn delete_roaster(
State(state): State<AppState>, State(state): State<AppState>,
_auth_user: AuthenticatedUser,
headers: HeaderMap, headers: HeaderMap,
Path(id): Path<String>, Path(id): Path<String>,
Query(query): Query<ListQuery>, Query(query): Query<ListQuery>,

View file

@ -9,6 +9,7 @@ use crate::domain::roasters::RoasterSortKey;
use crate::domain::roasts::{NewRoast, Roast, RoastSortKey, RoastWithRoaster}; use crate::domain::roasts::{NewRoast, Roast, RoastSortKey, RoastWithRoaster};
use crate::presentation::templates::{RoastDetailTemplate, RoastListTemplate, RoastsTemplate}; use crate::presentation::templates::{RoastDetailTemplate, RoastListTemplate, RoastsTemplate};
use crate::presentation::views::{ListNavigator, Paginated, RoastView, RoasterOptionView}; use crate::presentation::views::{ListNavigator, Paginated, RoastView, RoasterOptionView};
use crate::server::auth::AuthenticatedUser;
use crate::server::errors::{ApiError, AppError, map_app_error}; use crate::server::errors::{ApiError, AppError, map_app_error};
use crate::server::routes::render_html; use crate::server::routes::render_html;
use crate::server::routes::support::{ use crate::server::routes::support::{
@ -96,6 +97,7 @@ pub(crate) async fn roast_page(
pub(crate) async fn create_roast( pub(crate) async fn create_roast(
State(state): State<AppState>, State(state): State<AppState>,
_auth_user: AuthenticatedUser,
headers: HeaderMap, headers: HeaderMap,
Query(query): Query<ListQuery>, Query(query): Query<ListQuery>,
payload: FlexiblePayload<NewRoastSubmission>, payload: FlexiblePayload<NewRoastSubmission>,
@ -154,6 +156,7 @@ pub(crate) async fn get_roast(
pub(crate) async fn delete_roast( pub(crate) async fn delete_roast(
State(state): State<AppState>, State(state): State<AppState>,
_auth_user: AuthenticatedUser,
headers: HeaderMap, headers: HeaderMap,
Path(id): Path<String>, Path(id): Path<String>,
Query(query): Query<ListQuery>, Query(query): Query<ListQuery>,