This project is the final projet of 42 cursus common core.
The ft_transcendence project involved creating a website for online multiplayer Pong gameplay. We implemented real-time gaming features, secure user authentication using OAuth, and a chat system for player communication.
- a chat interface
- a matchmaking system
- a friendship relation system
- notifications alert
- 2fa with google authenticator
- spectate mode
- login with 42 api
repo
โโโ Makefile
โโโ README.md
โโโ backend
โย ย โโโ Dockerfile
โย ย โโโ launch.sh
โย ย โโโ launch_test.sh
โย ย โโโ nest-cli.json
โย ย โโโ package-lock.json
โย ย โโโ package.json
โย ย โโโ src
โย ย โย ย โโโ app.controller.spec.ts
โย ย โย ย โโโ app.controller.ts
โย ย โย ย โโโ app.middleware.ts
โย ย โย ย โโโ app.module.ts
โย ย โย ย โโโ app.service.ts
โย ย โย ย โโโ chat
โย ย โย ย โย ย โโโ ChatRequest.http
โย ย โย ย โย ย โโโ chat.controller.spec.ts
โย ย โย ย โย ย โโโ chat.controller.ts
โย ย โย ย โย ย โโโ chat.module.ts
โย ย โย ย โย ย โโโ chat.service.spec.ts
โย ย โย ย โย ย โโโ chat.service.ts
โย ย โย ย โย ย โโโ dto
โย ย โย ย โย ย โโโ change-channel.dto.ts
โย ย โย ย โย ย โโโ create-channel.dto.ts
โย ย โย ย โย ย โโโ join-channel.dto.ts
โย ย โย ย โย ย โโโ modify-member.dto.ts
โย ย โย ย โย ย โโโ mute.dto.ts
โย ย โย ย โย ย โโโ new-message.dto.ts
โย ย โย ย โโโ events
โย ย โย ย โย ย โโโ decorators
โย ย โย ย โย ย โย ย โโโ EventUser.decorator.ts
โย ย โย ย โย ย โโโ dtos
โย ย โย ย โย ย โย ย โโโ game-create.dto.ts
โย ย โย ย โย ย โย ย โโโ game-join.dto.ts
โย ย โย ย โย ย โย ย โโโ player-input.dto.ts
โย ย โย ย โย ย โโโ events.gateway.spec.ts
โย ย โย ย โย ย โโโ events.gateway.ts
โย ย โย ย โย ย โโโ events.module.ts
โย ย โย ย โย ย โโโ guards
โย ย โย ย โย ย โย ย โโโ event.guard.ts
โย ย โย ย โย ย โโโ interceptors
โย ย โย ย โย ย โโโ WebSocketUser.interceptor.ts
โย ย โย ย โโโ friends
โย ย โย ย โย ย โโโ friends.controller.spec.ts
โย ย โย ย โย ย โโโ friends.controller.ts
โย ย โย ย โย ย โโโ friends.module.ts
โย ย โย ย โย ย โโโ friends.service.spec.ts
โย ย โย ย โย ย โโโ friends.service.ts
โย ย โย ย โโโ game
โย ย โย ย โย ย โโโ game-cluster.ts
โย ย โย ย โย ย โโโ game.controller.spec.ts
โย ย โย ย โย ย โโโ game.controller.ts
โย ย โย ย โย ย โโโ game.module.ts
โย ย โย ย โย ย โโโ game.service.spec.ts
โย ย โย ย โย ย โโโ game.service.ts
โย ย โย ย โย ย โโโ game.ts
โย ย โย ย โโโ interceptors
โย ย โย ย โย ย โโโ serialize.interceptor.ts
โย ย โย ย โโโ main.ts
โย ย โย ย โโโ model
โย ย โย ย โย ย โโโ channel.entity.ts
โย ย โย ย โย ย โโโ friend-request.entity.ts
โย ย โย ย โย ย โโโ member.entity.ts
โย ย โย ย โย ย โโโ message.entity.ts
โย ย โย ย โย ย โโโ notification.entity.ts
โย ย โย ย โย ย โโโ refresh-token.entity.ts
โย ย โย ย โย ย โโโ saved-game.entity.ts
โย ย โย ย โย ย โโโ saved-game.subscriber.ts
โย ย โย ย โย ย โโโ user.entity.ts
โย ย โย ย โโโ notification
โย ย โย ย โย ย โโโ notification-request.subscriber.ts
โย ย โย ย โย ย โโโ notification.controller.spec.ts
โย ย โย ย โย ย โโโ notification.controller.ts
โย ย โย ย โย ย โโโ notification.module.ts
โย ย โย ย โย ย โโโ notification.service.spec.ts
โย ย โย ย โย ย โโโ notification.service.ts
โย ย โย ย โย ย โโโ notification.subscriber.ts
โย ย โย ย โโโ pipe
โย ย โย ย โย ย โโโ validateID.pipe.ts
โย ย โย ย โโโ type.ts
โย ย โย ย โโโ typeorm.filter.ts
โย ย โย ย โโโ unauthorizedException.filter.ts
โย ย โย ย โโโ users
โย ย โย ย โโโ auth
โย ย โย ย โย ย โโโ auth.controller.spec.ts
โย ย โย ย โย ย โโโ auth.controller.ts
โย ย โย ย โย ย โโโ auth.module.ts
โย ย โย ย โย ย โโโ auth.service.spec.ts
โย ย โย ย โย ย โโโ auth.service.ts
โย ย โย ย โย ย โโโ authenticated.guard.ts
โย ย โย ย โย ย โโโ hashPassword.ts
โย ย โย ย โโโ decorators
โย ย โย ย โย ย โโโ current-user.decorator.ts
โย ย โย ย โโโ dtos
โย ย โย ย โย ย โโโ create-user.dto.ts
โย ย โย ย โย ย โโโ dfa-code.dto.ts
โย ย โย ย โย ย โโโ login-user.dto.ts
โย ย โย ย โย ย โโโ request.http
โย ย โย ย โย ย โโโ user-restricted.dto.ts
โย ย โย ย โย ย โโโ user.dto.ts
โย ย โย ย โย ย โโโ username.dto.ts
โย ย โย ย โโโ guard
โย ย โย ย โย ย โโโ 2fa-token.guard.ts
โย ย โย ย โย ย โโโ File-size.guard.ts
โย ย โย ย โย ย โโโ access-token.guard.ts
โย ย โย ย โย ย โโโ refresh-token.guard.ts
โย ย โย ย โโโ users.controller.spec.ts
โย ย โย ย โโโ users.controller.ts
โย ย โย ย โโโ users.module.ts
โย ย โย ย โโโ users.service.spec.ts
โย ย โย ย โโโ users.service.ts
โย ย โโโ test
โย ย โย ย โโโ app.e2e-spec.ts
โย ย โย ย โโโ jest-e2e.json
โย ย โโโ tsconfig.build.json
โย ย โโโ tsconfig.json
โโโ docker-compose.yml
โโโ envmaker.sh
โโโ info
โย ย โโโ Diagramme sans nom.drawio
โย ย โโโ GameArchitecture.drawio
โย ย โโโ chat.drawio
โย ย โโโ db_model.png
โย ย โโโ stack_docker.drawio
โย ย โโโ stack_docker.jpg
โโโ jremy.conf
โโโ nginx
โย ย โโโ Dockerfile
โย ย โโโ avatars
โย ย โย ย โโโ 1.png
โย ย โย ย โโโ default.png
โย ย โโโ nginx.conf
โโโ package-lock.json
โโโ package.json
โโโ vite
โโโ Dockerfile
โโโ index.html
โโโ launch.sh
โโโ package-lock.json
โโโ package.json
โโโ public
โย ย โโโ pong.svg
โโโ src
โย ย โโโ App.tsx
โย ย โโโ ErrorProvider
โย ย โย ย โโโ ErrorProvider.tsx
โย ย โโโ assets
โย ย โย ย โโโ private.png
โย ย โย ย โโโ public.png
โย ย โโโ auth
โย ย โย ย โโโ AuthService.tsx
โย ย โย ย โโโ interceptor.axios.tsx
โย ย โโโ component
โย ย โย ย โโโ 404.tsx
โย ย โย ย โโโ Debounced.tsx
โย ย โย ย โโโ DfaForm.css
โย ย โย ย โโโ DfaForm.tsx
โย ย โย ย โโโ Error.tsx
โย ย โย ย โโโ Footer.tsx
โย ย โย ย โโโ FriendList.tsx
โย ย โย ย โโโ InvitedFriends.tsx
โย ย โย ย โโโ Leaderboard.tsx
โย ย โย ย โโโ LoginForm.tsx
โย ย โย ย โโโ Menu.tsx
โย ย โย ย โโโ ProfilPlayer.tsx
โย ย โย ย โโโ RegisterForm.tsx
โย ย โย ย โโโ SearchBar.tsx
โย ย โย ย โโโ UpdateProfil.tsx
โย ย โย ย โโโ UserAchievment.tsx
โย ย โย ย โโโ UserInfoDisplay.tsx
โย ย โย ย โโโ UsernameDialog.tsx
โย ย โย ย โโโ chat
โย ย โย ย โย ย โโโ ChannelBrowse.tsx
โย ย โย ย โย ย โโโ ChannelMemberList.tsx
โย ย โย ย โย ย โโโ ChannelsList.tsx
โย ย โย ย โย ย โโโ ChatDirectMessageList.tsx
โย ย โย ย โย ย โโโ ChatFriendsBrowser.tsx
โย ย โย ย โย ย โโโ ChatMenu.tsx
โย ย โย ย โย ย โโโ ChatMessage.tsx
โย ย โย ย โย ย โโโ ChatPage.tsx
โย ย โย ย โย ย โโโ CreatChannelModal.tsx
โย ย โย ย โย ย โโโ MessageArea.tsx
โย ย โย ย โย ย โโโ ModifyChannelModal.tsx
โย ย โย ย โย ย โโโ MuteMemberModal.tsx
โย ย โย ย โย ย โโโ PasswordDialog.tsx
โย ย โย ย โโโ game
โย ย โย ย โย ย โโโ CreateGame.tsx
โย ย โย ย โย ย โโโ FakeGame.tsx
โย ย โย ย โย ย โโโ FinishGames.tsx
โย ย โย ย โย ย โโโ GameHistory.tsx
โย ย โย ย โย ย โโโ GamePage.tsx
โย ย โย ย โย ย โโโ GameScreen.tsx
โย ย โย ย โย ย โโโ ListCurrentGames.tsx
โย ย โย ย โย ย โโโ ResultGame.tsx
โย ย โย ย โโโ notifications
โย ย โย ย โโโ notifcationsBar.tsx
โย ย โย ย โโโ notificationDirectMessage.tsx
โย ย โย ย โโโ notificationInvitation.tsx
โย ย โย ย โโโ notificationRequestFriend.tsx
โย ย โย ย โโโ notificationsList.tsx
โย ย โโโ index.css
โย ย โโโ main.tsx
โย ย โโโ socket
โย ย โย ย โโโ SocketProvider.tsx
โย ย โโโ token
โย ย โย ย โโโ token.tsx
โย ย โโโ types.tsx
โย ย โโโ userDataProvider
โย ย โย ย โโโ userDataProvider.tsx
โย ย โโโ vite-env.d.ts
โโโ tsconfig.json
โโโ tsconfig.node.json
โโโ vite.config.ts
38 directories, 177 files
Before you begin, ensure that you have the following prerequisites installed:
- docker
- Clone the 42-ft_transcendence repository:
git clone https://github.com/jremy42/42-ft_transcendence
- Change to the project directory:
cd 42-ft_transcendence
- launch application:
make
- for normal usage : http://localhost:8080
To deploy the application on your own URL, please follow these steps:
- Set the URL in the PUBLIC_URL field to your desired URL in .env file.
- Make sure to provide the necessary environment variables for the application to function properly.
To integrate the application with the 42 API, please ensure you have the following environment variables properly configured:
API_CLIENT_ID=
API_CLIENT_SECRET=
Compliant for deployement in aws => you can try here
Compliant for deployement in private webserver => you can try here
- ingress point listening on 443 with ssl
- reverse proxy for nestjs backend api calls
- static serve of avatars files (.png) and front-end app file (.js / .html / .css)
- Transpilation and minification from typescript to javascript
- exits on success
- expose api routes for use in frontend
- serves as an intermidary between client and postgre Database
- handle CRUD operations on website database
-
โ Web development: We gained experience in web development by creating a website .
-
โ Backend with NestJS: We learned to develop the backend of our website using NestJS, a powerful Node.js framework that helps with building scalable and efficient server-side applications.
-
โ Frontend with React and TypeScript: We utilized React, a popular JavaScript library for building user interfaces, and leveraged TypeScript, a statically-typed superset of JavaScript, to develop the frontend of our website. This allowed for component-based development, better UI management, and enhanced type safety.
-
โ Real-time multiplayer functionality: We implemented real-time multiplayer features, enabling users to play Pong with each other in real-time through our website, We used Socket.IO, a JavaScript library, to enable real-time communication and data exchange between the server and clients.
-
โ User authentication with OAuth and tokens: We implemented an authentication strategy using OAuth and utilized refresh and access tokens for secure user authentication and authorization. Also, We integrated the OAuth system from the 42 intranet, allowing users to log in securely using their 42 credentials.
-
โ Chat functionality: We created a chat feature where users can send direct messages to each other, enhancing the interactive experience of our website.
-
โ Docker: We utilized Docker to create a containerized environment for our application, allowing for easy setup and deployment across different systems.
-
โ PostgreSQL: We used PostgreSQL, an open-source relational database management system, to store and manage our application's data effectively.
-
โ Online deployment on a server: We deployed our website online on a server, making it accessible to users over the internet. This involved configuring the server, setting up the necessary dependencies, and deploying our application to ensure it is available for use.