Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
75 commits
Select commit Hold shift + click to select a range
306d870
chore(deps): bump dockerode from 4.0.6 to 4.0.7 in /queueConsumer
dependabot[bot] Aug 4, 2025
d72e77d
chore(deps-dev): bump @nestjs/cli in /queueConsumer
dependabot[bot] Aug 5, 2025
00c0e9e
chore(deps): bump @mcap/support from 1.0.3 to 1.0.4 in /queueConsumer
dependabot[bot] Aug 5, 2025
932288a
chore(deps): bump @swc/core from 1.11.22 to 1.13.3 in /backend
dependabot[bot] Aug 5, 2025
eaba060
feat(projects): add copy button for project uuid
dwrth Aug 5, 2025
4520897
Merge pull request #1669 from dwrth/feature/project-uuid-copy-button
wp99cp Aug 6, 2025
9841fcf
don't check version number for pr to dev
wp99cp Aug 6, 2025
0fa24ba
bump version number to v0.50.0
wp99cp Aug 6, 2025
ebbb2a4
improve action triggers
wp99cp Aug 6, 2025
f8282ee
make linter happy (this is necessary as the linter check did not run …
wp99cp Aug 6, 2025
1e28e92
chore(deps-dev): bump eslint from 9.31.0 to 9.33.0 in /backend
dependabot[bot] Aug 12, 2025
b624d23
chore(deps): bump vue from 3.5.13 to 3.5.18 in /frontend
dependabot[bot] Aug 12, 2025
4fabe84
chore(deps-dev): bump vue-tsc from 3.0.3 to 3.0.5 in /frontend
dependabot[bot] Aug 12, 2025
1b0deaa
chore(deps): bump actions/checkout from 4 to 5
dependabot[bot] Aug 12, 2025
4c3bcaf
chore(deps): bump vitepress from 1.6.3 to 1.6.4 in /docs
dependabot[bot] Aug 12, 2025
3b8f5af
chore(deps-dev): bump eslint-plugin-prettier in /backend
dependabot[bot] Aug 12, 2025
19ea76b
fix issue where seeding crashes due to conflicting names (#1687)
wp99cp Aug 15, 2025
54ee3b7
Merge branch 'dev' of https://github.com/leggedrobotics/GrandTourData…
wp99cp Aug 15, 2025
bfd5572
chore(deps): bump @tanstack/vue-query from 5.81.5 to 5.85.3 in /frontend
dependabot[bot] Aug 19, 2025
f8d561f
chore(deps-dev): bump @types/node from 24.1.0 to 24.3.0 in /frontend
dependabot[bot] Aug 19, 2025
7c976de
chore(deps-dev): bump @types/node from 24.1.0 to 24.3.0 in /common
dependabot[bot] Aug 19, 2025
d3816c1
chore(deps-dev): bump @types/node in /queueConsumer
dependabot[bot] Aug 19, 2025
b5557c8
feat(missions): add copy button for mission uuid
dwrth Aug 6, 2025
2d72cb6
Merge remote-tracking branch 'origin/dependabot/npm_and_yarn/queueCon…
wp99cp Aug 21, 2025
bce080e
Merge remote-tracking branch 'origin/dependabot/npm_and_yarn/common/s…
wp99cp Aug 21, 2025
4982eea
Merge remote-tracking branch 'origin/dependabot/npm_and_yarn/frontend…
wp99cp Aug 21, 2025
e05433c
Merge remote-tracking branch 'origin/dependabot/npm_and_yarn/frontend…
wp99cp Aug 21, 2025
914d876
Merge remote-tracking branch 'origin/dependabot/npm_and_yarn/backend/…
wp99cp Aug 21, 2025
432d81f
Merge remote-tracking branch 'origin/dependabot/npm_and_yarn/docs/sta…
wp99cp Aug 21, 2025
4316a94
Merge remote-tracking branch 'origin/dependabot/github_actions/stagin…
wp99cp Aug 21, 2025
b4b56df
Merge remote-tracking branch 'origin/dependabot/npm_and_yarn/frontend…
wp99cp Aug 21, 2025
8d0778a
Merge remote-tracking branch 'origin/dependabot/npm_and_yarn/frontend…
wp99cp Aug 21, 2025
9331e38
Merge remote-tracking branch 'origin/dependabot/npm_and_yarn/backend/…
wp99cp Aug 21, 2025
dcdc71c
Merge remote-tracking branch 'origin/dependabot/npm_and_yarn/backend/…
wp99cp Aug 21, 2025
6b63500
Merge remote-tracking branch 'origin/dependabot/npm_and_yarn/queueCon…
wp99cp Aug 21, 2025
42b1971
Merge remote-tracking branch 'origin/dependabot/npm_and_yarn/queueCon…
wp99cp Aug 21, 2025
08fe6fd
Merge remote-tracking branch 'origin/dependabot/npm_and_yarn/queueCon…
wp99cp Aug 21, 2025
3e85200
chore(deps-dev): bump typescript from 5.8.3 to 5.9.2 in /common
dependabot[bot] Aug 21, 2025
12399b8
chore(deps-dev): bump typescript from 5.8.3 to 5.9.2 in /queueConsumer
dependabot[bot] Aug 21, 2025
e06fc89
chore(deps): bump @swc/jest from 0.2.38 to 0.2.39 in /backend
dependabot[bot] Aug 21, 2025
372849b
improve DevEx by adding fake oauth (#1687)
wp99cp Aug 21, 2025
c4de3ff
allow to use fake-oauth with cli
wp99cp Aug 21, 2025
b5790ad
chore(deps): bump the open-telemetry group in /backend with 2 updates
dependabot[bot] Aug 26, 2025
4156e62
chore(deps-dev): bump eslint-config-prettier in /backend
dependabot[bot] Aug 26, 2025
b73e4b7
chore(deps): bump @faker-js/faker from 9.9.0 to 10.0.0 in /common
dependabot[bot] Aug 26, 2025
e630b36
chore(deps-dev): bump @types/cookie-parser in /backend
dependabot[bot] Aug 26, 2025
0d61aac
chore(deps): bump quasar from 2.18.1 to 2.18.2 in /frontend
dependabot[bot] Aug 26, 2025
f87dc4a
chore(deps): bump vue from 3.5.18 to 3.5.20 in /frontend
dependabot[bot] Aug 26, 2025
cb02341
chore(deps): bump @tanstack/vue-query from 5.85.3 to 5.85.5 in /frontend
dependabot[bot] Aug 26, 2025
2b3b4ff
chore(deps-dev): bump jiti from 2.4.2 to 2.5.1 in /frontend
dependabot[bot] Aug 26, 2025
a7bfade
chore(deps): bump googleapis from 154.1.0 to 157.0.0 in /queueConsumer
dependabot[bot] Aug 26, 2025
29300bb
chore(deps-dev): bump @types/dockerode in /queueConsumer
dependabot[bot] Aug 26, 2025
252de31
chore(deps): bump systeminformation in /queueConsumer
dependabot[bot] Aug 26, 2025
c71e176
chore(deps): bump the open-telemetry group
dependabot[bot] Aug 26, 2025
b0e6c00
chore(deps-dev): bump vue from 3.5.18 to 3.5.20 in /docs
dependabot[bot] Aug 26, 2025
f116339
chore(deps-dev): bump mermaid from 11.9.0 to 11.10.1 in /docs
dependabot[bot] Aug 26, 2025
90302e7
format file
wp99cp Sep 4, 2025
977d241
Merge remote-tracking branch 'origin/dependabot/npm_and_yarn/docs/sta…
wp99cp Sep 4, 2025
9dc19b2
Merge remote-tracking branch 'origin/dependabot/npm_and_yarn/docs/sta…
wp99cp Sep 4, 2025
402ce16
Merge remote-tracking branch 'origin/dependabot/npm_and_yarn/queueCon…
wp99cp Sep 4, 2025
da7cdfe
Merge remote-tracking branch 'origin/dependabot/npm_and_yarn/queueCon…
wp99cp Sep 4, 2025
3a38b6f
Merge remote-tracking branch 'origin/dependabot/npm_and_yarn/queueCon…
wp99cp Sep 4, 2025
304eddd
Merge remote-tracking branch 'origin/dependabot/npm_and_yarn/queueCon…
wp99cp Sep 4, 2025
8a46145
Merge remote-tracking branch 'origin/dependabot/npm_and_yarn/frontend…
wp99cp Sep 4, 2025
41e1d4e
Merge remote-tracking branch 'origin/dependabot/npm_and_yarn/frontend…
wp99cp Sep 4, 2025
5c73943
Merge remote-tracking branch 'origin/dependabot/npm_and_yarn/frontend…
wp99cp Sep 4, 2025
c0d8324
Merge remote-tracking branch 'origin/dependabot/npm_and_yarn/frontend…
wp99cp Sep 4, 2025
b5ae07d
Merge remote-tracking branch 'origin/dependabot/npm_and_yarn/backend/…
wp99cp Sep 4, 2025
b82723b
Merge remote-tracking branch 'origin/dependabot/npm_and_yarn/common/s…
wp99cp Sep 4, 2025
e7e1d68
Merge remote-tracking branch 'origin/dependabot/npm_and_yarn/backend/…
wp99cp Sep 4, 2025
5148095
Merge remote-tracking branch 'origin/dependabot/npm_and_yarn/backend/…
wp99cp Sep 4, 2025
66b1fd9
Merge remote-tracking branch 'origin/dependabot/npm_and_yarn/queueCon…
wp99cp Sep 4, 2025
90c4682
Merge remote-tracking branch 'origin/dependabot/npm_and_yarn/common/s…
wp99cp Sep 4, 2025
906f1c5
Merge remote-tracking branch 'origin/dependabot/npm_and_yarn/backend/…
wp99cp Sep 4, 2025
4dfec62
address #1709
wp99cp Sep 4, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .env
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ ENTITIES=dist/**/*.entity.js

SEED=true

VITE_USE_FAKE_OAUTH_FOR_DEVELOPMENT=true
GOOGLE_KEY_FILE=grandtourdatasets-5295745f7fab.json
GOOGLE_CLIENT_ID=237481987385-av4suqf7p0qjkmvjo8bc6jdf3g6nb0u7.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=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
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/check_version_number.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ name: check-version-number

on:
pull_request:
branches:
types: [ opened, synchronize, reopened, edited ]
branches:
- main
- dev

jobs:
check-version-number:
Expand All @@ -13,7 +13,7 @@ jobs:

steps:
- name: Checkout repository
uses: actions/checkout@v4
uses: actions/checkout@v5

- uses: actions/setup-node@v4.4.0
with:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/create_release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ jobs:

steps:
- name: Checkout repository
uses: actions/checkout@v4
uses: actions/checkout@v5

- uses: actions/setup-node@v4.4.0
with:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/dev_build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ jobs:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5
- name: Login to DockerHub
uses: docker/login-action@v3
with:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/draft-pdf.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ jobs:
name: Paper Draft
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: Build draft PDF
uses: openjournals/openjournals-draft-action@master
with:
Expand Down
3 changes: 2 additions & 1 deletion .github/workflows/eslint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ on:
push:
branches: ['dev']
pull_request:
types: [ opened, synchronize, reopened, edited ]
branches:
- dev

Expand All @@ -10,7 +11,7 @@ jobs:
runs-on: [self-hosted, linux]

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5

- name: Use Node.js
uses: actions/setup-node@v4
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/example_actions.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ jobs:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5
- name: Login to DockerHub
uses: docker/login-action@v3
with:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/production_build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ jobs:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5
- name: Login to DockerHub
uses: docker/login-action@v3
with:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/pythonLint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ jobs:
lint:
runs-on: [self-hosted, linux]
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5
- name: Install python3-venv
run: sudo apt update && sudo apt install -y python3.10-venv
- uses: psf/black@stable
3 changes: 2 additions & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ name: Test The Application

on:
pull_request:
types: [ opened, synchronize, reopened, edited ]
branches:
- main
- dev
Expand All @@ -17,7 +18,7 @@ jobs:
pull-requests: write # Allows adding comments to PRs

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5

- name: Use Node.js
uses: actions/setup-node@v4.4.0
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/updatePypi.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@v4
uses: actions/checkout@v5

- name: Set up Python
uses: actions/setup-python@v5
Expand Down
8 changes: 1 addition & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,16 +25,10 @@ git clone git@github.com:leggedrobotics/kleinkram.git
cd kleinkram
```

Install `yarn` dependencies:

```bash
yarn
```

Now you can run Kleinkram using `docker compose`

```bash
docker compose up
docker compose up --build
```

This will launch the frontend under `http://localhost:8003`,
Expand Down
2 changes: 1 addition & 1 deletion backend/access_config.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"emails": [
{
"email": "leggedrobotics.com",
"email": "kleinkram.leggedrobotics.com",
"access_groups": ["00000000-0000-0000-0000-000000000000"]
}
],
Expand Down
18 changes: 9 additions & 9 deletions backend/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "kleinkram-backend",
"version": "0.49.0",
"version": "0.50.0",
"description": "",
"author": "",
"private": true,
Expand Down Expand Up @@ -37,12 +37,12 @@
"@opentelemetry/instrumentation-fetch": "^0.203.0",
"@opentelemetry/instrumentation-http": "^0.203.0",
"@opentelemetry/instrumentation-nestjs-core": "^0.49.0",
"@opentelemetry/instrumentation-pg": "^0.55.0",
"@opentelemetry/instrumentation-winston": "^0.48.0",
"@opentelemetry/instrumentation-pg": "^0.56.0",
"@opentelemetry/instrumentation-winston": "^0.48.1",
"@opentelemetry/sdk-node": "^0.203.0",
"@opentelemetry/sdk-trace-base": "^2.0.0",
"@swc/core": "^1.11.22",
"@swc/jest": "^0.2.38",
"@swc/core": "^1.13.3",
"@swc/jest": "^0.2.39",
"@willsoto/nestjs-prometheus": "^6.0.1",
"aws4": "^1.13.2",
"axios": "^1.10.0",
Expand Down Expand Up @@ -79,7 +79,7 @@
"@nestjs/cli": "^11.0.6",
"@nestjs/schematics": "^11.0.4",
"@nestjs/testing": "^10.0.0",
"@types/cookie-parser": "^1.4.7",
"@types/cookie-parser": "^1.4.9",
"@types/express": "^5.0.0",
"@types/jest": "^29.5.2",
"@types/node": "^24.0.7",
Expand All @@ -89,9 +89,9 @@
"@types/passport-google-oauth20": "^2.0.16",
"@typescript-eslint/eslint-plugin": "^8.32.1",
"@typescript-eslint/parser": "^8.25.0",
"eslint": "^9.31.0",
"eslint-config-prettier": "^10.0.1",
"eslint-plugin-prettier": "^5.5.1",
"eslint": "^9.33.0",
"eslint-config-prettier": "^10.1.8",
"eslint-plugin-prettier": "^5.5.4",
"jest": "^29.7.0",
"jest-junit": "^16.0.0",
"prettier": "^3.0.0",
Expand Down
28 changes: 26 additions & 2 deletions backend/src/endpoints/auth/auth.controller.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,15 @@
import User from '@common/entities/user/user.entity';
import env from '@common/environment';
import { CookieNames } from '@common/frontend_shared/enum';
import { Controller, Get, Post, Req, Res, UseGuards } from '@nestjs/common';
import { CookieNames, Providers } from '@common/frontend_shared/enum';
import {
Controller,
Get,
MethodNotAllowedException,
Post,
Req,
Res,
UseGuards,
} from '@nestjs/common';
import { JwtService } from '@nestjs/jwt';
import { AuthGuard } from '@nestjs/passport';
import { Request, Response } from 'express';
Expand All @@ -26,6 +34,13 @@ export class AuthController {
// OAuth is handled by the AuthGuard
}

@Get('fake-oauth')
@UseGuards(AuthGuard(Providers.FakeOAuth))
async fakeOAuth(): Promise<void> {
// Initiates the GitHub OAuth flow
// OAuth is handled by the AuthGuard
}

@Get('google')
@UseGuards(AuthGuard('google'))
async googleAuth(): Promise<void> {
Expand All @@ -47,6 +62,15 @@ export class AuthController {
this.handleAuthRedirect(request, response);
}

@Get('fake-oauth/callback')
@UseGuards(AuthGuard(Providers.FakeOAuth))
@OutputDto(null) // TODO: type API response
fakeOAuthAuthRedirect(@Req() request, @Res() response: Response): void {
if (!env.VITE_USE_FAKE_OAUTH_FOR_DEVELOPMENT)
throw new MethodNotAllowedException();
this.handleAuthRedirect(request, response);
}

private handleAuthRedirect(
@Req() request: Request,
@Res() response: Response,
Expand Down
2 changes: 2 additions & 0 deletions backend/src/endpoints/auth/auth.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import { AccessService } from '../../services/access.service';
import { ProjectGuardService } from '../../services/project-guard.service';
import { AccessController } from './access.controller';
import { AuthGuardService } from './auth-guard.service';
import { FakeOauthStrategy } from './fake-oauth.strategy';
import { GitHubStrategy } from './github.strategy';
import { MissionGuardService } from './mission-guard.service';

Expand Down Expand Up @@ -56,6 +57,7 @@ import { MissionGuardService } from './mission-guard.service';
AccessService,
GoogleStrategy,
GitHubStrategy,
FakeOauthStrategy,
ProjectGuardService,
MissionGuardService,
AuthGuardService,
Expand Down
75 changes: 75 additions & 0 deletions backend/src/endpoints/auth/fake-oauth.strategy.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
import env from '@common/environment';
import { Providers } from '@common/frontend_shared/enum';
import { Injectable } from '@nestjs/common';
import { PassportStrategy } from '@nestjs/passport';
import e from 'express';
import {
Strategy as OAuth2Strategy,
StrategyOptions,
VerifyCallback,
} from 'passport-oauth2';
import logger from '../../logger';
import { AuthService } from '../../services/auth.service';

/**
*
* A very basic OAuth2 strategy for local development and testing purposes.
* Do NOT use this in production!
*
*/
@Injectable()
export class FakeOauthStrategy extends PassportStrategy(
OAuth2Strategy,
Providers.FakeOAuth,
) {
constructor(private authService: AuthService) {
super({
authorizationURL: 'http://localhost:8004/oauth/authorize',
tokenURL: 'http://fake-oauth:5000/oauth/token',
// no need to pass clientID and clientSecret as this is a fake OAuth provider
// this is used for local development and testing purposes only
clientID: 'some-random-string-it-does-not-matter',
clientSecret: 'some-random-string-it-does-not-matter',
callbackURL: `${env.ENDPOINT}/auth/fake-oauth/callback`,
scope: [],
} as StrategyOptions);
}

authenticate(request: e.Request, options?: any) {
options.state = request.query['state'];
super.authenticate(request, options);
}

async validate(
accessToken: string,
refreshToken: string,
profile: any,
callback: VerifyCallback,
): Promise<any> {
// fetch profile from http://fake-oauth:5000/oauth/profile

const fetchedProfileResponse = await fetch(
'http://fake-oauth:5000/oauth/profile',
{
headers: {
Authorization: `Bearer ${accessToken}`,
},
},
);

const fetchedProfile = await fetchedProfileResponse.json();
const user =
await this.authService.validateAndCreateUserByFakeOAuth(
fetchedProfile,
);

if (user) {
logger.debug(`Login successful for ${user.uuid}`);
callback(null, user);
return;
}

callback(null);
return;
}
}
22 changes: 22 additions & 0 deletions backend/src/services/auth.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,28 @@ export class AuthService implements OnModuleInit {
);
}

async validateAndCreateUserByFakeOAuth(profile: any): Promise<User> {
const { id, email, displayName, photo } = profile;

const account = await this.accountRepository.findOne({
where: { oauthID: id, provider: Providers.FakeOAuth },
relations: ['user'],
});

if (account !== null && account.user === undefined) {
logger.error('Account exists but has no linked user!');
throw new AuthFlowException(
'Account exists but has no linked user!',
);
}

if (account?.user !== undefined) {
return account.user;
}

return this.create(id, Providers.FakeOAuth, email, displayName, photo);
}

async validateAndCreateUserByGoogle(profile: any): Promise<User> {
const { id, emails, displayName, photos } = profile;
const email = emails[0].value;
Expand Down
Loading
Loading