added the thing so you can see other people's avatars, fixed checks on frontend routes like game and such that other people created, need help understanding ValidationPipe() to make it so a user must have a unique username. TBH this shit is still being held together by Duct Tape and Holy Water
This commit is contained in:
@@ -84,6 +84,7 @@ export class UsersController {
|
||||
@UseGuards(TwoFactorGuard)
|
||||
@Patch()
|
||||
async update(@Req() req, @Body(new ValidationPipe()) usersUpdateDto: UpdateUsersDto, @Res() response : Response) {
|
||||
console.log('user.controller updating user info')
|
||||
const user = await this.usersService.update(req.user.id, usersUpdateDto);
|
||||
if (user.isEnabledTwoFactorAuth === false && user.isTwoFactorAuthenticated === true)
|
||||
this.usersService.setIsTwoFactorAuthenticatedWhenLogout(user.id);
|
||||
@@ -103,6 +104,7 @@ export class UsersController {
|
||||
return this.usersService.remove(req.user.id);
|
||||
}
|
||||
|
||||
|
||||
// POST http://transcendance:8080/user/avatar
|
||||
@UseGuards(AuthenticateGuard)
|
||||
@UseGuards(TwoFactorGuard)
|
||||
@@ -118,15 +120,24 @@ export class UsersController {
|
||||
return res.status(HttpStatus.UNSUPPORTED_MEDIA_TYPE).json({message : "Unsupported media type. Please use a valid image file."});
|
||||
}
|
||||
|
||||
// GET http://transcendance:8080/user/avatar
|
||||
|
||||
// GET http://transcendance:8080/user/avatar?username=username
|
||||
@UseGuards(AuthenticateGuard)
|
||||
@UseGuards(TwoFactorGuard)
|
||||
@Get('avatar')
|
||||
getAvatar(@Req() request, @Res() response) {
|
||||
const promise = this.usersService.getAvatarUrl(request.user.id).then((url) =>
|
||||
async getAvatar(@Query('username') username: string, @Req() request, @Res() response) {
|
||||
let usernameToFind;
|
||||
if (username !== undefined) {
|
||||
usernameToFind = username;
|
||||
} else {
|
||||
usernameToFind = request.user.username;
|
||||
}
|
||||
const promise = this.usersService.getAvatarUrl(usernameToFind).then((url) =>
|
||||
{
|
||||
if (url)
|
||||
if (url) {
|
||||
console.log('what is the URL: ' + url)
|
||||
return of(response.sendFile(process.cwd() + '/uploads/avatars/' + url));
|
||||
}
|
||||
else
|
||||
throw new NotFoundException('Avatar not found');
|
||||
});
|
||||
|
||||
@@ -68,13 +68,13 @@ export class UsersService {
|
||||
let partialUsers : Partial<User>[] = [];
|
||||
|
||||
for (const otherUser of otherUsers) {
|
||||
console.log('other user: ')
|
||||
console.log({...otherUser})
|
||||
let tmp = await this.friendshipService.findIfUserIsBlockedOrHasBlocked(currentUser.id, otherUser.id);
|
||||
console.log('user.services findIF Blocked... : ')
|
||||
console.log(tmp)
|
||||
if (tmp === false) {
|
||||
// if (await this.friendshipService.findIfUserIsBlockedOrHasBlocked(currentUser.id, otherUser.id) === false) {
|
||||
// console.log('other user: ')
|
||||
// console.log({...otherUser})
|
||||
// let tmp = await this.friendshipService.findIfUserIsBlockedOrHasBlocked(currentUser.id, otherUser.id);
|
||||
// console.log('user.services findIF Blocked... : ')
|
||||
// console.log(tmp)
|
||||
// if (tmp === false) {
|
||||
if (await this.friendshipService.findIfUserIsBlockedOrHasBlocked(currentUser.id, otherUser.id) === false) {
|
||||
partialUsers.push({username: otherUser.username, image_url: otherUser.image_url, status: otherUser.status, stats: otherUser.stats});
|
||||
}
|
||||
}
|
||||
@@ -83,30 +83,6 @@ export class UsersService {
|
||||
return partialUsers;
|
||||
}
|
||||
|
||||
// async findAbsolutelyAll() {
|
||||
// // const otherUsers = await this.userRepository.find({where: {id: Not(+currentUser.id)}, order: {username: "ASC"}, skip: offset, take: limit,});
|
||||
// const otherUsers = await this.userRepository.find({order: {username: "ASC"}});
|
||||
|
||||
// let partialUsers : Partial<User>[] = [];
|
||||
|
||||
// for (const otherUser of otherUsers) {
|
||||
// console.log('other user: ')
|
||||
// console.log({...otherUser})
|
||||
// let tmp = await this.friendshipService.findIfUserIsBlockedOrHasBlocked(currentUser.id, otherUser.id);
|
||||
// console.log('user.services findIF Blocked... : ')
|
||||
// console.log(tmp)
|
||||
// if (tmp === false) {
|
||||
// // if (await this.friendshipService.findIfUserIsBlockedOrHasBlocked(currentUser.id, otherUser.id) === false) {
|
||||
// partialUsers.push({username: otherUser.username, image_url: otherUser.image_url, status: otherUser.status, stats: otherUser.stats});
|
||||
// }
|
||||
// }
|
||||
// console.log('user.services findAll, partialUsers:')
|
||||
// console.log({...partialUsers})
|
||||
// return partialUsers;
|
||||
// }
|
||||
|
||||
|
||||
|
||||
async create(createUserDto: CreateUsersDto) {
|
||||
if (await this.userRepository.findOneBy({fortyTwoId: createUserDto.fortyTwoId}))
|
||||
throw new HttpException(`The user already exists.`,HttpStatus.CONFLICT);
|
||||
@@ -158,13 +134,16 @@ export class UsersService {
|
||||
return this.userRepository.update(id, {image_url: avatar});
|
||||
}
|
||||
|
||||
async getAvatarUrl(id: number) {
|
||||
const user = await this.userRepository.findOneBy({id: id});
|
||||
// doing search with username not id because userService.findOne doesn't return an Id anymore, just username... fuck this architecture is big trash...
|
||||
// async getAvatarUrl(id: number) {
|
||||
async getAvatarUrl(username: string) {
|
||||
const user = await this.userRepository.findOneBy({username: username});
|
||||
if (!user)
|
||||
throw new HttpException(`The user could not be found.`,HttpStatus.NOT_FOUND);
|
||||
// console.log('user.service getAvatarUrl of ' + user.username)
|
||||
if (!user.image_url)
|
||||
throw new HttpException(`The user has no avatar.`,HttpStatus.NOT_FOUND);
|
||||
console.log(user.image_url);
|
||||
// console.log('User.service Avatar URL ' + user.image_url);
|
||||
return user.image_url;
|
||||
}
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
|
||||
|
||||
{#if user !== undefined}
|
||||
<GenerateUserDisplay user={user} primary={true}/>
|
||||
<GenerateUserDisplay user={user} primary={false}/>
|
||||
<!-- <GenerateUserDisplay user={user} primary={true}/> -->
|
||||
{:else}
|
||||
<h2>Sorry</h2>
|
||||
|
||||
@@ -4,20 +4,39 @@
|
||||
|
||||
|
||||
export let user;
|
||||
export let primary;
|
||||
export let primary; // kinda useless, not sure what i was going for... Might be userful after all
|
||||
let rank = '';
|
||||
let avatar;
|
||||
|
||||
// avatar needs to be updated!!!
|
||||
console.log('Generate User Display, BEFORE on mount ' + avatar)
|
||||
|
||||
onMount( async() => {
|
||||
console.log('Generate User Display, on mount ' + user.username)
|
||||
// using this for now cuz for some reason there is yet to be a way to fet another person's avatar
|
||||
if (primary) {
|
||||
// await fetch(`http://${process.env.WEBSITE_HOST}:${process.env.WEBSITE_PORT}/api/v2/user/avatar?username=${user.username}`, {method: "GET"})
|
||||
// .then(response => {return response.blob()})
|
||||
// .then(data => {
|
||||
// const url = URL.createObjectURL(data);
|
||||
// avatar = url;
|
||||
// });
|
||||
await fetch(`http://${process.env.WEBSITE_HOST}:${process.env.WEBSITE_PORT}/api/v2/user/avatar`, {method: "GET"})
|
||||
.then(response => {return response.blob()})
|
||||
.then(data => {
|
||||
const url = URL.createObjectURL(data);
|
||||
avatar = url;
|
||||
});
|
||||
})
|
||||
.catch(() => errors.avatar = 'Sorry your avatar could not be loaded' );
|
||||
console.log('avatar: ')
|
||||
console.log(avatar)
|
||||
} else {
|
||||
await fetch(`http://${process.env.WEBSITE_HOST}:${process.env.WEBSITE_PORT}/api/v2/user/avatar?username=${user.username}`, {method: "GET"})
|
||||
.then(response => {return response.blob()})
|
||||
.then(data => {
|
||||
const url = URL.createObjectURL(data);
|
||||
avatar = url;
|
||||
})
|
||||
.catch(() => errors.avatar = 'Sorry your avatar could not be loaded' );
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
@@ -13,9 +13,57 @@ import GameSpectator from '../pages/game/GameSpectator.svelte';
|
||||
export const primaryRoutes = {
|
||||
'/': SplashPage,
|
||||
'/2fa': TwoFactorAuthentication,
|
||||
'/game': Game,
|
||||
'/spectator': GameSpectator,
|
||||
'/ranking' : Ranking,
|
||||
'/game': wrap({
|
||||
component: Game,
|
||||
conditions: [
|
||||
async(detail) => {
|
||||
const user = await fetch('http://' + process.env.WEBSITE_HOST + ":" + process.env.WEBSITE_PORT + '/api/v2/user')
|
||||
.then((resp) => resp.json())
|
||||
|
||||
console.log('in /profile what is in user')
|
||||
console.log(user)
|
||||
|
||||
if (user && user.username)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
]
|
||||
}),
|
||||
'/spectator': wrap({
|
||||
component: GameSpectator,
|
||||
conditions: [
|
||||
async(detail) => {
|
||||
const user = await fetch('http://' + process.env.WEBSITE_HOST + ":" + process.env.WEBSITE_PORT + '/api/v2/user')
|
||||
.then((resp) => resp.json())
|
||||
|
||||
console.log('in /profile what is in user')
|
||||
console.log(user)
|
||||
|
||||
if (user && user.username)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
]
|
||||
}),
|
||||
'/ranking': wrap({
|
||||
component: Ranking,
|
||||
conditions: [
|
||||
async(detail) => {
|
||||
const user = await fetch('http://' + process.env.WEBSITE_HOST + ":" + process.env.WEBSITE_PORT + '/api/v2/user')
|
||||
.then((resp) => resp.json())
|
||||
|
||||
console.log('in /profile what is in user')
|
||||
console.log(user)
|
||||
|
||||
if (user && user.username)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
]
|
||||
}),
|
||||
'/profile': wrap({
|
||||
component: ProfilePage,
|
||||
conditions: [
|
||||
@@ -50,7 +98,6 @@ export const primaryRoutes = {
|
||||
}
|
||||
]
|
||||
}),
|
||||
|
||||
'/unauthorized-access': UnauthorizedAccessPage,
|
||||
'*': NotFound
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user