From 0be5b2c525b1e8037c47eb46427d40f00b9b8991 Mon Sep 17 00:00:00 2001 From: batche Date: Tue, 3 Jan 2023 01:05:23 +0100 Subject: [PATCH] =?UTF-8?q?maintenant=20seul=20les=20jpg=20et=20png=20sont?= =?UTF-8?q?=20ccept=C3=A9s=20pour=20l'avatar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/common/constants/constants.ts | 10 +++++++- .../api_back/src/users/users.controller.ts | 24 +++++++------------ .../src/pages/profile/ProfileSettings.svelte | 14 +++++++---- 3 files changed, 27 insertions(+), 21 deletions(-) diff --git a/srcs/requirements/nestjs/api_back/src/common/constants/constants.ts b/srcs/requirements/nestjs/api_back/src/common/constants/constants.ts index bd208814..350ad38b 100644 --- a/srcs/requirements/nestjs/api_back/src/common/constants/constants.ts +++ b/srcs/requirements/nestjs/api_back/src/common/constants/constants.ts @@ -24,5 +24,13 @@ export const storageForAvatar = { const extension : string = MIME_TYPES[file.mimetype]; cb(null, `${filename}${extension}`); } - }) + }), + fileFilter: (req, file, cb) => { + if (file.mimetype === 'image/png' || file.mimetype === 'image/jpg' || file.mimetype === 'image/jpeg') { + cb(null, true); + } + else { + cb(null, false); + } + } } diff --git a/srcs/requirements/nestjs/api_back/src/users/users.controller.ts b/srcs/requirements/nestjs/api_back/src/users/users.controller.ts index 9b44bc88..e41da191 100644 --- a/srcs/requirements/nestjs/api_back/src/users/users.controller.ts +++ b/srcs/requirements/nestjs/api_back/src/users/users.controller.ts @@ -1,5 +1,5 @@ import { - Body, Controller, Delete, Get, NotFoundException, Param, Patch, Post, Query, Redirect, Req, Res, UploadedFile, UseGuards, UseInterceptors + Body, Controller, Delete, Get, NotFoundException,HttpStatus, Param, Patch, Post, Query, Redirect, Req, Res, UploadedFile, UseGuards, UseInterceptors } from '@nestjs/common'; import { FileInterceptor } from '@nestjs/platform-express'; import { Response } from 'express'; @@ -31,19 +31,6 @@ export class UsersController { ///////////////////////// RUD ////////////////////////// //////////////////////////////////////////////////////// - /** - * On ne fait de création via une route - * car un utilisateur est crée à la première connexion avec l'Oauth de 42. - */ - - // @UseGuards(AuthenticateGuard) - // @UseGuards(TwoFactorGuard) - // @Get() - // findOne(@Req() req) { - // console.log("Backend Getting current user"); - // return this.usersService.findOne(req.user.id); - // } - @UseGuards(AuthenticateGuard) @UseGuards(TwoFactorGuard) @Get() @@ -100,9 +87,14 @@ export class UsersController { @UseGuards(TwoFactorGuard) @Post('avatar') @UseInterceptors(FileInterceptor('file', storageForAvatar)) - uploadAvatar(@UploadedFile() file, @Req() request){ + uploadAvatar(@UploadedFile() file, @Req() request, @Res() res){ const user : User = request.user; - this.usersService.updateAvatar(user.id, file.filename); + if (file) + { + this.usersService.updateAvatar(user.id, file.filename); + return res.status(HttpStatus.OK).json({message : "Avatar updated"}); + } + return res.status(HttpStatus.UNSUPPORTED_MEDIA_TYPE).json({message : "Unsupported media type. Please use a valid image file."}); } @UseGuards(AuthenticateGuard) diff --git a/srcs/requirements/svelte/api_front/src/pages/profile/ProfileSettings.svelte b/srcs/requirements/svelte/api_front/src/pages/profile/ProfileSettings.svelte index 9820f137..7a6dbd2f 100644 --- a/srcs/requirements/svelte/api_front/src/pages/profile/ProfileSettings.svelte +++ b/srcs/requirements/svelte/api_front/src/pages/profile/ProfileSettings.svelte @@ -101,14 +101,20 @@ // tmp console.log(data); - await fetch(`http://${process.env.WEBSITE_HOST}:${process.env.WEBSITE_PORT}/api/v2/user/avatar`, + const responseWhenChangeAvatar = fetch(`http://${process.env.WEBSITE_HOST}:${process.env.WEBSITE_PORT}/api/v2/user/avatar`, { method : 'POST', body : data, }) - .then(() => uploadAvatarSuccess = true ) // for some reason it needs to be a function, i think a TS thing, not a promis otherwise - .then(() => success.avatar = 'Your changes have been saved') - .catch(() => errors.avatar = 'Sorry failed to upload your new Avatar' ); + const responseFromServer = await responseWhenChangeAvatar; + if (responseFromServer.ok === true) { + uploadAvatarSuccess = true; + success.avatar = 'Your avatar has been updated'; + } + else { + errors.avatar = responseFromServer.statusText; + } + await fetch(`http://${process.env.WEBSITE_HOST}:${process.env.WEBSITE_PORT}/api/v2/user/avatar`, {method: "GET"}) .then(response => {return response.blob()}) .then(data => {