So i added a check to make it so you can't change your username to someone else's, also turns out Cherif already has a check so that if you change your username to someone else's 42 username who isn't a user yet and then they try to become a user, their username will have a random string attached to the end so it is also unique, then fixed a few minor things, and made it so all UnauthorizedPages take you back to / as in the SplashPage rather than a special page from which you navigate to /, that said, i think feedback for the user is kinda nice, will decide with team eventually

This commit is contained in:
Me
2023-01-07 01:41:06 +01:00
parent 0470676c5d
commit f7c728a009
5 changed files with 31 additions and 19 deletions

View File

@@ -120,7 +120,7 @@ export class UsersController {
return res.status(HttpStatus.UNSUPPORTED_MEDIA_TYPE).json({message : "Unsupported media type. Please use a valid image file."}); return res.status(HttpStatus.UNSUPPORTED_MEDIA_TYPE).json({message : "Unsupported media type. Please use a valid image file."});
} }
// don't pass your own username
// GET http://transcendance:8080/user/avatar?username=username // GET http://transcendance:8080/user/avatar?username=username
@UseGuards(AuthenticateGuard) @UseGuards(AuthenticateGuard)
@UseGuards(TwoFactorGuard) @UseGuards(TwoFactorGuard)

View File

@@ -50,12 +50,10 @@ export class UsersService {
return partialUser; return partialUser;
} }
/***** THIS IS THE THING I REALLY NEED TO FIX!!!!!!! *****/
// Ok this gets called in the Authenitcation Service, but like i was still able to make a username === someone else's
async isUsernameExists(usernameToSearch: string): Promise<boolean> { async isUsernameExists(usernameToSearch: string): Promise<boolean> {
const user = await this.userRepository.findOneBy({username : usernameToSearch}); console.log('searching for username: ' + usernameToSearch)
const user = await this.userRepository.findOneBy({username : usernameToSearch});
console.log({...user})
if (!user) if (!user)
return false; return false;
return true; return true;
@@ -84,6 +82,8 @@ export class UsersService {
} }
async create(createUserDto: CreateUsersDto) { async create(createUserDto: CreateUsersDto) {
// console.log('\nuser.services create a new user, createUserDto: ')
// console.log({...createUserDto})
if (await this.userRepository.findOneBy({fortyTwoId: createUserDto.fortyTwoId})) if (await this.userRepository.findOneBy({fortyTwoId: createUserDto.fortyTwoId}))
throw new HttpException(`The user already exists.`,HttpStatus.CONFLICT); throw new HttpException(`The user already exists.`,HttpStatus.CONFLICT);
const user = this.userRepository.create(createUserDto); const user = this.userRepository.create(createUserDto);
@@ -95,6 +95,11 @@ export class UsersService {
async update(id: number, updateUserDto: UpdateUsersDto) { async update(id: number, updateUserDto: UpdateUsersDto) {
// console.log(`Update user ${id} with ${updateUserDto.isEnabledTwoFactorAuth}`); // console.log(`Update user ${id} with ${updateUserDto.isEnabledTwoFactorAuth}`);
// console.log({...updateUserDto})
if (await this.isUsernameExists(updateUserDto.username) === true) {
console.log('updating username ' + updateUserDto.username + ' but it already is in use')
throw new HttpException(`The username is already in use.`,HttpStatus.CONFLICT);
}
const user = await this.userRepository.preload( const user = await this.userRepository.preload(
{id: id, {id: id,
...updateUserDto}); ...updateUserDto});

View File

@@ -9,7 +9,8 @@
console.error('conditionsFailed event', event.detail); console.error('conditionsFailed event', event.detail);
// i mean i guess i can just leave this in there permanently? // i mean i guess i can just leave this in there permanently?
replace('/unauthorized-access'); // replace('/unauthorized-access');
replace('/');
}; };
</script> </script>

View File

@@ -78,9 +78,11 @@
if (response.status === 200) if (response.status === 200)
success.username = "Your changes have been saved" success.username = "Your changes have been saved"
else if (response.status === 201) else if (response.status === 201)
push("/2fa") push("/2fa");
else if (response.status === 409)
errors.username = `${set.username} is already in use, pick a different one.`;
else else
errors.username = "Something went wrong" errors.username = "Something went wrong";
} }
) )
.catch((err) => errors.username = err) .catch((err) => errors.username = err)

View File

@@ -9,17 +9,12 @@
let avatar; let avatar;
// avatar needs to be updated!!! // avatar needs to be updated!!!
console.log('Generate User Display, BEFORE on mount ' + avatar) console.log('Generate User Display, BEFORE on mount ' + avatar)
// add errors
let errors = {avatar: ''};
onMount( async() => { onMount( async() => {
console.log('Generate User Display, on mount ' + user.username) // 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) { 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"}) await fetch(`http://${process.env.WEBSITE_HOST}:${process.env.WEBSITE_PORT}/api/v2/user/avatar`, {method: "GET"})
.then(response => {return response.blob()}) .then(response => {return response.blob()})
.then(data => { .then(data => {
@@ -27,8 +22,8 @@
avatar = url; avatar = url;
}) })
.catch(() => errors.avatar = 'Sorry your avatar could not be loaded' ); .catch(() => errors.avatar = 'Sorry your avatar could not be loaded' );
console.log('avatar: ') // console.log('avatar: ')
console.log(avatar) // console.log(avatar)
} else { } else {
await fetch(`http://${process.env.WEBSITE_HOST}:${process.env.WEBSITE_PORT}/api/v2/user/avatar?username=${user.username}`, {method: "GET"}) 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(response => {return response.blob()})
@@ -40,6 +35,9 @@
} }
}) })
/**** THIS IS BASICALLY ALL THE RANK LOGIC ERIC HAS MADE ****/
if (user.loseGame > user.winGame) { if (user.loseGame > user.winGame) {
rank = 'Bitch Ass Loser!' rank = 'Bitch Ass Loser!'
} else if (user.loseGame === user.winGame) { } else if (user.loseGame === user.winGame) {
@@ -86,6 +84,7 @@
<!-- <img class="icon" src="img/default_user_icon.png" alt="default user icon"> --> <!-- <img class="icon" src="img/default_user_icon.png" alt="default user icon"> -->
<!-- <img class="icon" src="{user.image_url}" alt="default user icon"> --> <!-- <img class="icon" src="{user.image_url}" alt="default user icon"> -->
<img class="avatar" src="{avatar}" alt="default user icon"> <img class="avatar" src="{avatar}" alt="default user icon">
<div class="error">{errors.avatar}</div>
<div class="username">{user.username}</div> <div class="username">{user.username}</div>
<div class="rank">Rank: <div class="rank">Rank:
<span class="glitter"> <span class="glitter">
@@ -169,6 +168,11 @@
font-weight: bold; font-weight: bold;
} }
.error{
font-size: 0.8em;
font-weight: bold;
color: red;
}
/* Glittery Star Stuff */ /* Glittery Star Stuff */