From 8461adfb3d3a3f77c4163c2f1691a6b9bbea237d Mon Sep 17 00:00:00 2001 From: chyoo Date: Mon, 6 Jul 2026 11:46:31 +0900 Subject: [PATCH] add launcher oauth exchange api --- package.json | 2 +- src/auth/auth.controller.ts | 19 ++++++++++++++++++- src/auth/auth.service.ts | 19 +++++++++++++++++++ 3 files changed, 38 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 76a176d..c2e6ad6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "atnmy-stdo-v2-be", - "version": "1.0.1", + "version": "1.0.2", "description": "", "author": "", "private": true, diff --git a/src/auth/auth.controller.ts b/src/auth/auth.controller.ts index e419d23..2159b49 100644 --- a/src/auth/auth.controller.ts +++ b/src/auth/auth.controller.ts @@ -1,4 +1,4 @@ -import { Body, Controller, Delete, Get, Post, Put, Req, Res } from '@nestjs/common'; +import { BadRequestException, Body, Controller, Delete, Get, Post, Put, Req, Res } from '@nestjs/common'; import type { Request, Response } from 'express'; import { AuthService } from './auth.service'; @@ -32,6 +32,23 @@ export class AuthController { return this.authService.refresh(request.headers.cookie, response); } + @Post('oauth/exchange') + exchangeOAuthLoginToken( + @Body() body: { loginToken?: string }, + @Req() request: Request, + @Res({ passthrough: true }) response: Response, + ) { + if (!body.loginToken) { + throw new BadRequestException('loginToken is required'); + } + + return this.authService.exchangeOAuthLoginToken( + body.loginToken, + request.headers.cookie, + response, + ); + } + @Post('logout') logout( @Req() request: Request, diff --git a/src/auth/auth.service.ts b/src/auth/auth.service.ts index 6604372..c094846 100644 --- a/src/auth/auth.service.ts +++ b/src/auth/auth.service.ts @@ -63,6 +63,25 @@ export class AuthService { return this.frontendTokenResponse(authResponse); } + async exchangeOAuthLoginToken( + loginToken: string, + cookieHeader: string | undefined, + response: Response, + ) { + const authResponse = await this.request( + '/auth/oauth/exchange', + { + method: 'POST', + body: { loginToken }, + cookieHeader, + response, + unauthorizedMessage: 'Invalid Google login session', + }, + ); + + return this.frontendTokenResponse(authResponse); + } + async logout( cookieHeader: string | undefined, response: Response,