Skip to content

Commit aa418e6

Browse files
feat: check if user is logged in before doing a local run
1. Repo found a. Logged in: user is set, repositoryOverview is set — repo found b. NOT logged in: user is null, repositoryOverview is set => bails with "session expired" 2. REPOSITORY_NOT_FOUND => falls through to `get_or_create_project_repository` a. Logged in: `get_or_create_project_repository` succeeds b. NOT logged in: `get_or_create_project_repository` fails, bail with "session expired"
1 parent 477bef1 commit aa418e6

3 files changed

Lines changed: 24 additions & 2 deletions

File tree

src/api_client.rs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,10 @@ nest! {
232232
struct GetRepositoryData {
233233
repository_overview: Option<pub struct GetRepositoryPayload {
234234
pub id: String,
235-
}>
235+
}>,
236+
user: Option<pub struct GetRepositoryUser {
237+
pub id: String,
238+
}>,
236239
}
237240
}
238241

@@ -327,7 +330,14 @@ impl CodSpeedAPIClient {
327330
)
328331
.await;
329332
match response {
330-
Ok(response) => Ok(response.repository_overview),
333+
Ok(response) => {
334+
if response.user.is_none() {
335+
bail!(
336+
"Your session has expired, please login again using `codspeed auth login`"
337+
);
338+
}
339+
Ok(response.repository_overview)
340+
}
331341
Err(err) if err.contains_error_code("REPOSITORY_NOT_FOUND") => Ok(None),
332342
Err(err) if err.contains_error_code("UNAUTHENTICATED") => {
333343
bail!("Your session has expired, please login again using `codspeed auth login`")

src/queries/GetRepository.gql

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ query Repository(
33
$name: String!
44
$provider: RepositoryProvider
55
) {
6+
user {
7+
id
8+
}
69
repositoryOverview(owner: $owner, name: $name, provider: $provider) {
710
... on Repository {
811
id

src/run_environment/local/provider.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,15 @@ impl LocalProvider {
104104
}
105105

106106
/// Resolve repository information from override, git remote, or API fallback
107+
///
108+
/// When there is no explicit repository override, this flow also makes sure the user is logged in with a valid token
109+
/// 1. Repo found
110+
/// a. Logged in: user is set, repositoryOverview is set — repo found
111+
/// b. NOT logged in: user is null, repositoryOverview is set => bails with "session expired"
112+
///
113+
/// 2. REPOSITORY_NOT_FOUND => falls through to `get_or_create_project_repository`
114+
/// a. Logged in: `get_or_create_project_repository` succeeds
115+
/// b. NOT logged in: `get_or_create_project_repository` fails, bail with "session expired"
107116
async fn resolve_repository(
108117
config: &OrchestratorConfig,
109118
api_client: &CodSpeedAPIClient,

0 commit comments

Comments
 (0)