Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[merge] be-develop 브랜치 내용 main 브랜치에 반영 #453

Merged
merged 59 commits into from
Apr 19, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
59 commits
Select commit Hold shift + click to select a range
ffd70c9
chore: 이미지 경로도 같이 반환하도록 수정
yaongmeow Dec 13, 2023
2d16131
merge: #366 이미지 URL과 함께 경로도 같이 반환하도록 수정
kmi0817 Dec 13, 2023
8d28c3f
docs: BE 기술 스택 내용 추가
kmi0817 Dec 14, 2023
c673cb4
merge #377: BE 기술 스택 내용 추가
yaongmeow Dec 14, 2023
b47285d
feat: 타임라인 생성 시 오류 발생하면 오브젝트에 저장된 이미지 롤백
kmi0817 Jan 12, 2024
34485ca
refactor: IP, 이메일 관련 기능 전부 주석처리
yaongmeow Jan 12, 2024
2e2839c
refactor: 누락 부분 추가
yaongmeow Jan 12, 2024
44be28d
feat: 타임라인 수정에 오류 발생 시 오브젝트에 저장된 이미지 롤백
kmi0817 Jan 12, 2024
5c55098
merge: #391 IP, 이메일 관련 기능 전부 주석 처리
kmi0817 Jan 12, 2024
c332c08
merge #392 from kmi0817/be-feature/#388-image-rollback
yaongmeow Jan 15, 2024
97dd920
fix: 이미지가 전송되지 않을 시 이미지 필드를 null로 처리
kmi0817 Jan 15, 2024
503dd20
merge #400 from kmi0817/be-feature/#399-image-delete
yaongmeow Jan 15, 2024
d5e513b
test: 테스트용 서버의 깃허브 액션의 파일 제목 변경
kmi0817 Jan 21, 2024
ed053da
test: 깃허브 시크릿 변수명 & 컨테이너명 수정
kmi0817 Jan 21, 2024
5b3d6c0
test: 배포용 깃허브 액션 생성
kmi0817 Jan 21, 2024
f6b94b0
test: 서버 IP 환경 변수명 변경
kmi0817 Jan 21, 2024
ce7b2b8
test: be-develop 브랜치에 push될 때도 액션이 실행되게끔 변경
kmi0817 Jan 21, 2024
ca17814
test: 테스트용의 깃허브 액션 이름 변경
kmi0817 Jan 21, 2024
d6aa765
merge #405 from kmi0817/be-feature/#404-github-action
yaongmeow Jan 21, 2024
65b9f7f
fix: docker account명 변경 taveline → traveline
kmi0817 Jan 21, 2024
ec3d114
fix: main 브랜치로 push할 때만 동작하게 변경
kmi0817 Jan 21, 2024
9b94eb6
merge #406 from kmi0817/be-feature/#404-github-action
yaongmeow Jan 21, 2024
11253d6
chore: Papago API 사용 부분 주석 처리
kmi0817 Jan 22, 2024
a6e452a
test: Papapgo API 관련 환경변수 제거
kmi0817 Jan 22, 2024
925df96
merge #410 from kmi0817/be-feature/#409-remove-papagoAPI
yaongmeow Jan 23, 2024
ab1779b
feat: 소셜 로그인 요청 DTO 인터페이스 및 구현 클래스 생성
kmi0817 Feb 19, 2024
6eedb81
feat: 카카오 소셜 로그인 구현
kmi0817 Feb 19, 2024
f3afe06
feat: 소셜 로그인 엔드포인트 생성 및 서비스 연결
kmi0817 Feb 19, 2024
4b5ecf2
refactor: 소셜 로그인 맵에서 종류에 맞는 소셜 로그인 정책 객체 가져오는 로직 메서드로 추출
kmi0817 Feb 19, 2024
19cd8cf
chore: withdrawal → withdraw 변경 & 엔터 추가
kmi0817 Feb 19, 2024
661c6c0
feat: 카카오 소셜 계정 탈퇴 구현
kmi0817 Feb 19, 2024
5da2268
feat: 소셜 계정 탈퇴 엔드포인트 및 서비스 생성
kmi0817 Feb 19, 2024
72a73bf
fix: 카카오 로그인 시 email 값도 전달 받아 사용하도록 수정
kmi0817 Feb 19, 2024
cb8e3c2
fix: 소셜 로그인 interface의 withdraw 메서드 반환 값 Promise로 감싸도록 수정
kmi0817 Feb 19, 2024
c73277f
chore: 불필요한 refresh 메서드 제거
kmi0817 Feb 20, 2024
0943cae
merge #422 from kmi0817/be-feature/#421-kakao
yaongmeow Feb 22, 2024
4d12be9
chore: 소셜 로그인 요청 dto 위치 변경 & 파일명 수정
kmi0817 Feb 22, 2024
cec92d5
chore: 인터페이스명 변경과 그에 따른 변수명 수정
kmi0817 Feb 22, 2024
25e36f5
refactor: 애플 로그인 요청 DTO 생성
kmi0817 Feb 22, 2024
43771b3
refactor: AppleLoginStrategy 클래스 생성 및 로그인 리팩토링
kmi0817 Feb 22, 2024
893d677
refactor: 애플 계정 회원 탈퇴를 위한 임시 withdraw2 메서드 선언
kmi0817 Feb 22, 2024
edcf860
refactor: 서비스 계층에 있는 애플 탈퇴 코드를 AppleLoginStrategy로 옮김 & 매개변수 일부 수정
kmi0817 Feb 22, 2024
560e2c1
refactor: 카카오와 애플 탈퇴 메서드 하나로 통일
kmi0817 Feb 22, 2024
85a5ccf
chore: 사용하지 않는 dto 삭제
kmi0817 Feb 22, 2024
dc64a29
refactor: 소셜 로그인 요청 dto 인터페이스를 클래스로 변경 & 기존 구현체 삭제
kmi0817 Feb 22, 2024
65d3c90
chore: 불필요한 코드 제거 & 메서드명 수정 & Injectable() 추가
kmi0817 Feb 22, 2024
b50fc36
refactor: refresh 수정 및 헤더맵 생성 코드 메서드로 추출
kmi0817 Feb 22, 2024
94443b2
merge #424 from kmi0817/be-feature/#421-kakao
yaongmeow Mar 25, 2024
4a71d18
[chore] 워크플로우 삭제
kmi0817 Apr 4, 2024
e395118
merge #435 from boostcampwm2023/be-feature/#434-remove-workfolw
yaongmeow Apr 4, 2024
76d4175
[chore] workflow에서 actions/checkout 버전 변경
kmi0817 Apr 4, 2024
cec5fa6
merge #437 from boostcampwm2023/be-feature/#436-update-workflow
yaongmeow Apr 4, 2024
9ec9a43
fix: 개발용 로그인과 실제 로그인 라우터 순서 변경
kmi0817 Apr 4, 2024
4513bb5
chore: 소셜 로그인/탈퇴의 경로 파라미터 관련 Swagger 추가
kmi0817 Apr 4, 2024
808e61c
merge #439 from kmi0817/be-feature/#438-login-dev-router
yaongmeow Apr 4, 2024
b28a6ba
[docs] 아키텍처 이미지 변경 & WIKI 링크 추가
kmi0817 Apr 4, 2024
4706c1c
merge: #441 아키텍처 이미지 변경 & WIKI 링크 추가
kmi0817 Apr 9, 2024
38b1ca1
chore: 서버 내부 에러 로그 작성하도록 수정
kmi0817 Apr 16, 2024
caa50cd
merge #450 from kmi0817/be-feature/#449-error-log
yaongmeow Apr 16, 2024
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
6 changes: 3 additions & 3 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@ name: CD

on:
push:
branches: [be-develop, main]
branches: [main, be-develop]

jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout...
uses: actions/checkout@v3
uses: actions/checkout@v4

- name: Setup Node
uses: actions/setup-node@v3
Expand Down Expand Up @@ -46,4 +46,4 @@ jobs:
docker pull traveline/traveline-docker
docker stop traveline-container || true
docker rm traveline-container || true
docker run -e DB_HOST=${{ secrets.DB_HOST }} -e DB_PORT=${{ secrets.DB_PORT }} -e DB_USER=${{ secrets.DB_USER }} -e DB_PASSWORD=${{ secrets.DB_PASSWORD }} -e DB_DATABASE=${{ secrets.DB_DATABASE }} -e NCP_ACCESS_KEY_ID=${{ secrets.NCP_ACCESS_KEY_ID }} -e NCP_SECRET_ACCESS_KEY=${{ secrets.NCP_SECRET_ACCESS_KEY }} -e NCP_REGION=${{ secrets.NCP_REGION }} -e JWT_SECRET_ACCESS=${{ secrets.JWT_SECRET_ACCESS }} -e JWT_SECRET_REFRESH=${{ secrets.JWT_SECRET_REFRESH }} -e CLIENT_ID=${{ secrets.CLIENT_ID }} -e TEAM_ID=${{ secrets.TEAM_ID }} -e KEY_ID=${{ secrets.KEY_ID }} -e AUTH_KEY_LINE1=${{ secrets.AUTH_KEY_LINE1 }} -e AUTH_KEY_LINE2=${{ secrets.AUTH_KEY_LINE2 }} -e AUTH_KEY_LINE3=${{ secrets.AUTH_KEY_LINE3 }} -e AUTH_KEY_LINE4=${{ secrets.AUTH_KEY_LINE4 }} -e KAKAO_REST_API_KEY=${{ secrets.KAKAO_REST_API_KEY }} -e X_NCP_APIGW_API_KEY_ID=${{ secrets.X_NCP_APIGW_API_KEY_ID }} -e X_NCP_APIGW_API_KEY=${{ secrets.X_NCP_APIGW_API_KEY }} -e AWS_ACCESS_KEY_ID=${{ secrets.AWS_ACCESS_KEY_ID }} -e AWS_SECRET_ACCESS_KEY=${{ secrets.AWS_SECRET_ACCESS_KEY }} -e AWS_REGION=${{ secrets.AWS_REGION }} -e GREENEYE_SECRET_KEY=${{ secrets.GREENEYE_SECRET_KEY }} -e GREENEYE_DOMAIN_ID=${{ secrets.GREENEYE_DOMAIN_ID }} -e GREENEYE_SIGNATURE=${{ secrets.GREENEYE_SIGNATURE }} -d -p ${{secrets.EXTERNAL_PORT}}:${{secrets.INTERNAL_PORT}} --name traveline-container traveline/traveline-docker
docker run -e DB_HOST=${{ secrets.DB_HOST }} -e DB_PORT=${{ secrets.DB_PORT }} -e DB_USER=${{ secrets.DB_USER }} -e DB_PASSWORD=${{ secrets.DB_PASSWORD }} -e DB_DATABASE=${{ secrets.DB_DATABASE }} -e NCP_ACCESS_KEY_ID=${{ secrets.NCP_ACCESS_KEY_ID }} -e NCP_SECRET_ACCESS_KEY=${{ secrets.NCP_SECRET_ACCESS_KEY }} -e NCP_REGION=${{ secrets.NCP_REGION }} -e JWT_SECRET_ACCESS=${{ secrets.JWT_SECRET_ACCESS }} -e JWT_SECRET_REFRESH=${{ secrets.JWT_SECRET_REFRESH }} -e CLIENT_ID=${{ secrets.CLIENT_ID }} -e TEAM_ID=${{ secrets.TEAM_ID }} -e KEY_ID=${{ secrets.KEY_ID }} -e AUTH_KEY_LINE1=${{ secrets.AUTH_KEY_LINE1 }} -e AUTH_KEY_LINE2=${{ secrets.AUTH_KEY_LINE2 }} -e AUTH_KEY_LINE3=${{ secrets.AUTH_KEY_LINE3 }} -e AUTH_KEY_LINE4=${{ secrets.AUTH_KEY_LINE4 }} -e KAKAO_REST_API_KEY=${{ secrets.KAKAO_REST_API_KEY }} -e AWS_ACCESS_KEY_ID=${{ secrets.AWS_ACCESS_KEY_ID }} -e AWS_SECRET_ACCESS_KEY=${{ secrets.AWS_SECRET_ACCESS_KEY }} -e AWS_REGION=${{ secrets.AWS_REGION }} -e GREENEYE_SECRET_KEY=${{ secrets.GREENEYE_SECRET_KEY }} -e GREENEYE_DOMAIN_ID=${{ secrets.GREENEYE_DOMAIN_ID }} -e GREENEYE_SIGNATURE=${{ secrets.GREENEYE_SIGNATURE }} -d -p ${{secrets.EXTERNAL_PORT}}:${{secrets.INTERNAL_PORT}} --name traveline-container traveline/traveline-docker
13 changes: 7 additions & 6 deletions BE/src/app.controller.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Controller, Get, Param, Render, Res } from '@nestjs/common';
import { Controller, Get, Param, Res } from '@nestjs/common';
import { AppService } from './app.service';

@Controller()
Expand All @@ -16,9 +16,10 @@ export class AppController {
response.redirect(url);
}

@Get('ip-process-result')
@Render('ip-process-result.ejs')
ipProcessResult() {
return {};
}
// 추후 수정 예정
// @Get('ip-process-result')
// @Render('ip-process-result.ejs')
// ipProcessResult() {
// return {};
// }
}
117 changes: 86 additions & 31 deletions BE/src/auth/auth.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,20 @@ import {
Get,
Req,
UseGuards,
Query,
ParseBoolPipe,
Res,
Param,
} from '@nestjs/common';
import { AuthService } from './auth.service';
import { ApiOkResponse, ApiOperation, ApiTags } from '@nestjs/swagger';
import { CreateAuthRequestDto } from './dto/create-auth-request.dto';
import {
ApiOkResponse,
ApiOperation,
ApiParam,
ApiTags,
} from '@nestjs/swagger';
import { CreateAuthRequestForDevDto } from './dto/create-auth-request-for-dev.dto';
import { DeleteAuthDto } from './dto/delete-auth.dto';
import { AuthGuard } from './auth.guard';
import { login, refresh, withdrawal } from './auth.swagger';
import { SocialLoginRequestDto } from 'src/socialLogin/dto/social-login-request.dto';
import { SocialWithdrawRequestDto } from 'src/socialLogin/dto/social-withdraw-request.dto';

@Controller('auth')
@ApiTags('Auth API')
Expand All @@ -30,18 +33,8 @@ export class AuthController {
})
@ApiOkResponse({ description: 'OK', schema: { example: refresh } })
refresh(@Req() request) {
return this.authService.refresh(request);
}

@Post('login')
@ApiOperation({
summary: '로그인 또는 회원가입 API',
description:
'전달받은 idToken 내의 회원 정보를 확인하고 존재하는 회원이면 로그인을, 존재하지 않는 회원이면 회원가입을 진행합니다.',
})
@ApiOkResponse({ description: 'OK', schema: { example: login } })
login(@Req() request, @Body() createAuthDto: CreateAuthRequestDto) {
return this.authService.login(request, createAuthDto);
const headerMap: Map<string, string> = this.makeHeaderMap(request);
return this.authService.refresh(headerMap);
}

@Post('login/dev')
Expand All @@ -57,8 +50,34 @@ export class AuthController {
return this.authService.loginForDev(createAuthForDevDto);
}

@Post('login/:social')
@ApiParam({
name: 'social',
enum: ['apple', 'kakao'],
description: '소셜 로그인 종류',
})
@ApiOperation({
summary: '로그인 또는 회원가입 API',
description:
'전달받은 idToken 내의 회원 정보를 확인하고 존재하는 회원이면 로그인을, 존재하지 않는 회원이면 회원가입을 진행합니다.',
})
@ApiOkResponse({ description: 'OK', schema: { example: login } })
socialLogin(
@Req() request,
@Param('social') social: string,
@Body() socialLoginRequestDto: SocialLoginRequestDto
) {
const headerMap: Map<string, string> = this.makeHeaderMap(request);
return this.authService.login(social, headerMap, socialLoginRequestDto);
}

@UseGuards(AuthGuard)
@Delete('withdrawal')
@Delete('withdraw/:social')
@ApiParam({
name: 'social',
enum: ['apple', 'kakao'],
description: '소셜 로그인 종류',
})
@ApiOperation({
summary: '탈퇴 API',
description:
Expand All @@ -68,19 +87,55 @@ export class AuthController {
description: 'OK',
schema: { example: withdrawal },
})
withdrawal(@Req() request, @Body() deleteAuthDto: DeleteAuthDto) {
return this.authService.withdrawal(request, deleteAuthDto);
socialWithdraw(
@Req() request,
@Param('social') social: string,
@Body() socialWithdrawRequestDto: SocialWithdrawRequestDto
) {
const userId = request['user'].id;
return this.authService.withdraw(social, userId, socialWithdrawRequestDto);
}

@Get('ip')
async manageIp(
@Res() response,
@Query('id') id: string,
@Query('ip') ip: string,
@Query('allow', ParseBoolPipe) allow: boolean
) {
if (await this.authService.manageIp(id, ip, allow)) {
response.redirect('/ip-process-result');
}
private makeHeaderMap(request): Map<string, string> {
return Object.keys(request.headers).reduce((m, key) => {
m.set(key, request.headers[key]);
return m;
}, new Map<string, string>());
}

// @UseGuards(AuthGuard)
// @Delete('withdrawal')
// @ApiOperation({
// summary: '탈퇴 API',
// description:
// '전달받은 idToken과 authorizationCode를 이용해 탈퇴를 진행합니다.',
// })
// @ApiOkResponse({
// description: 'OK',
// schema: { example: withdrawal },
// })
// withdrawal(
// @Req() request,
// @Body() socialWithdrawRequestDto: SocialWithdrawRequestDto
// ) {
// const userId = request['user'].id;
// return this.authService.withdrawalApple(
// 'apple',
// userId,
// socialWithdrawRequestDto
// );
// }

// 추후 수정 예정
// @Get('ip')
// async manageIp(
// @Res() response,
// @Query('id') id: string,
// @Query('ip') ip: string,
// @Query('allow', ParseBoolPipe) allow: boolean
// ) {
// if (await this.authService.manageIp(id, ip, allow)) {
// response.redirect('/ip-process-result');
// }
// }
}
11 changes: 10 additions & 1 deletion BE/src/auth/auth.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,19 @@ import { StorageService } from 'src/storage/storage.service';
import { HttpModule } from '@nestjs/axios';
import { AuthGuard } from './auth.guard';
import { EmailModule } from 'src/email/email.module';
import { KakaoLoginStrategy } from 'src/socialLogin/kakao-login-strategy';
import { AppleLoginStrategy } from 'src/socialLogin/apple-login-strategy';

@Module({
imports: [UsersModule, HttpModule, EmailModule],
controllers: [AuthController],
providers: [AuthService, UsersService, StorageService, AuthGuard],
providers: [
AuthService,
UsersService,
StorageService,
AuthGuard,
KakaoLoginStrategy,
AppleLoginStrategy,
],
})
export class AuthModule {}
Loading
Loading