Finish login and reset password
This commit is contained in:
parent
d5dc807b09
commit
53b96d61fe
2
front/dist/resources/html/gameLogin.html
vendored
2
front/dist/resources/html/gameLogin.html
vendored
|
@ -10,7 +10,7 @@
|
|||
background: #eceeee;
|
||||
border: 1px solid #42464b;
|
||||
border-radius: 6px;
|
||||
height: 257px;
|
||||
height: 270px;
|
||||
margin: 20px auto 0;
|
||||
width: 298px;
|
||||
}
|
||||
|
|
1
front/dist/resources/html/gameMenuIcon.html
vendored
1
front/dist/resources/html/gameMenuIcon.html
vendored
|
@ -16,6 +16,7 @@
|
|||
#menuIcon button img{
|
||||
width: 14px;
|
||||
padding-top: 4px;
|
||||
cursor: url('/resources/logos/cursor_pointer.png'), pointer;
|
||||
}
|
||||
#menuIcon section {
|
||||
margin: 10px;
|
||||
|
|
2
front/dist/resources/html/gameRegister.html
vendored
2
front/dist/resources/html/gameRegister.html
vendored
|
@ -112,6 +112,6 @@
|
|||
</section>
|
||||
<section class="action">
|
||||
<button type="submit" id="gameRegisterFormSubmit">Sign In</button>
|
||||
<button type="submit" id="gameRegisterFormCancel">Login</button>
|
||||
<a href="#" id="gameRegisterFormCancel">Login</a>
|
||||
</section>
|
||||
</form>
|
||||
|
|
|
@ -19,7 +19,7 @@ class ConnectionManager {
|
|||
private connectedUser?: ConnectedUser|null;
|
||||
|
||||
constructor() {
|
||||
this.verifyLoggedUser();
|
||||
//this.userLogin();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -119,17 +119,16 @@ class ConnectionManager {
|
|||
return this.connexionType;
|
||||
}
|
||||
|
||||
public verifyLoggedUser(){
|
||||
/**
|
||||
*
|
||||
* @param email
|
||||
* @param password
|
||||
*/
|
||||
public userLogin(email: string, password: string){
|
||||
//Verify spark session
|
||||
Axios.get('http://admin.workadventure.localhost/user/connected').then((res) => {
|
||||
console.log('res', res);
|
||||
Axios.get('http://admin.workadventure.localhost/notifications/recent').then((res) => {
|
||||
this.connectedUser = res.data;
|
||||
}).catch((err) => {
|
||||
console.error(err);
|
||||
this.connectedUser = null;
|
||||
throw new ErrorConnectedError('Error to get user element');
|
||||
});
|
||||
//TODO change url addresse
|
||||
return Axios.post('http://pusher.workadventure.localhost/user/login',{email, password}).then((res) => {
|
||||
return res.data;
|
||||
}).catch((err) => {
|
||||
if(err instanceof ErrorConnectedError) {
|
||||
throw err;
|
||||
|
@ -146,10 +145,33 @@ class ConnectionManager {
|
|||
* @param name
|
||||
* @param email
|
||||
* @param password
|
||||
* @param confirmPassword
|
||||
*/
|
||||
public registerUser(name: string, email: string, password: string, confirmPassword: string){
|
||||
Axios.get('http://admin.workadventure.localhost/member/register')
|
||||
public registerUser(name: string, email: string, password: string){
|
||||
//TODO change url addresse
|
||||
Axios.post('http://pusher.workadventure.localhost/member/register', {
|
||||
name,
|
||||
email,
|
||||
password
|
||||
})
|
||||
.then((res) => {
|
||||
this.connectedUser = res.data;
|
||||
})
|
||||
.catch((err) => {
|
||||
this.connectedUser = null;
|
||||
console.log(err);
|
||||
throw err;
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param email
|
||||
*/
|
||||
public passwordReset(email: string) {
|
||||
//TODO change url addresse
|
||||
return Axios.post('http://pusher.workadventure.localhost/user/password/reset', {
|
||||
email,
|
||||
})
|
||||
.then((res) => {
|
||||
this.connectedUser = res.data;
|
||||
})
|
||||
|
|
|
@ -4,6 +4,7 @@ import {gameManager} from "../Game/GameManager";
|
|||
import {localUserStore} from "../../Connexion/LocalUserStore";
|
||||
import {mediaManager} from "../../WebRtc/MediaManager";
|
||||
import {coWebsiteManager} from "../../WebRtc/CoWebsiteManager";
|
||||
import {connectionManager} from "../../Connexion/ConnectionManager";
|
||||
|
||||
export const MenuSceneName = 'MenuScene';
|
||||
const gameMenuKey = 'gameMenu';
|
||||
|
@ -144,6 +145,7 @@ export class MenuScene extends Phaser.Scene {
|
|||
|
||||
openSideMenu() {
|
||||
if (this.sideMenuOpened) return;
|
||||
this.closeAll();
|
||||
this.sideMenuOpened = true;
|
||||
this.menuButton.getChildByID('openMenuButton').innerHTML = 'X';
|
||||
if (gameManager.getCurrentGameScene(this).connection && gameManager.getCurrentGameScene(this).connection.isAdmin()) {
|
||||
|
@ -161,12 +163,7 @@ export class MenuScene extends Phaser.Scene {
|
|||
private closeSideMenu(): void {
|
||||
if (!this.sideMenuOpened) return;
|
||||
this.sideMenuOpened = false;
|
||||
this.closeGameQualityMenu();
|
||||
this.closeGameForgotPassword();
|
||||
this.closeGameLogin();
|
||||
this.closeGameRegister();
|
||||
this.closeGameShare();
|
||||
this.menuButton.getChildByID('openMenuButton').innerHTML = `<img src="/static/images/menu.svg">`;
|
||||
this.closeAll();
|
||||
gameManager.getCurrentGameScene(this).ConsoleGlobalMessageManager.disabledMessageConsole();
|
||||
this.tweens.add({
|
||||
targets: this.menuElement,
|
||||
|
@ -176,13 +173,13 @@ export class MenuScene extends Phaser.Scene {
|
|||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
private openGameSettingsMenu(): void {
|
||||
if (this.settingsMenuOpened) {
|
||||
this.closeGameQualityMenu();
|
||||
return;
|
||||
}
|
||||
//close all
|
||||
this.closeAll();
|
||||
|
||||
this.settingsMenuOpened = true;
|
||||
|
||||
const gameQualitySelect = this.gameQualityMenuElement.getChildByID('select-game-quality') as HTMLInputElement;
|
||||
|
@ -233,12 +230,11 @@ export class MenuScene extends Phaser.Scene {
|
|||
}
|
||||
|
||||
private openGameLogin(): void{
|
||||
this.closeGameRegister();
|
||||
this.closeGameForgotPassword();
|
||||
if (this.gameLoginMenuOpened) {
|
||||
this.closeGameLogin();
|
||||
return;
|
||||
}
|
||||
this.closeAll();
|
||||
this.gameLoginMenuOpened = true;
|
||||
|
||||
let middleY = (window.innerHeight / 3) - (257);
|
||||
|
@ -273,6 +269,8 @@ export class MenuScene extends Phaser.Scene {
|
|||
this.closeGameShare();
|
||||
return;
|
||||
}
|
||||
//close all
|
||||
this.closeAll();
|
||||
|
||||
const gameShareLink = this.gameShareElement.getChildByID('gameShareLink') as HTMLInputElement;
|
||||
gameShareLink.value = location.toString();
|
||||
|
@ -313,7 +311,7 @@ export class MenuScene extends Phaser.Scene {
|
|||
let errorForm = false;
|
||||
const gameLoginEmail = this.gameLoginElement.getChildByID('gameLoginEmail') as HTMLInputElement;
|
||||
const gameLoginPassword = this.gameLoginElement.getChildByID('gameLoginPassword') as HTMLInputElement;
|
||||
const gameLoginError = this.gameLoginElement.getChildByID('gameLoginError') as HTMLInputElement;
|
||||
const gameLoginError = this.gameLoginElement.getChildByID('gameLoginError') as HTMLParagraphElement;
|
||||
|
||||
gameLoginError.innerText = '';
|
||||
gameLoginError.style.display = 'none';
|
||||
|
@ -337,8 +335,16 @@ export class MenuScene extends Phaser.Scene {
|
|||
gameLoginError.innerText = 'Login or password incorrect';
|
||||
gameLoginError.style.display = 'block';
|
||||
//TODO login user in back
|
||||
|
||||
connectionManager.userLogin(gameLoginEmail.value, gameLoginPassword.value).then(() => {
|
||||
this.closeGameLogin();
|
||||
}).catch((err) => {
|
||||
gameLoginError.innerText = err.message;
|
||||
gameLoginError.style.display = 'block';
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
private sendEmail(){
|
||||
const gameForgotPasswordInfo = this.gameForgotPasswordElement.getChildByID('gameForgotPasswordInfo') as HTMLParagraphElement;
|
||||
gameForgotPasswordInfo.style.display = 'none';
|
||||
|
@ -357,8 +363,16 @@ export class MenuScene extends Phaser.Scene {
|
|||
return;
|
||||
}
|
||||
//TODO send email
|
||||
gameForgotPasswordInfo.style.display = 'block';
|
||||
gameForgotPasswordInfo.innerText = 'We have emailed your password reset link!';
|
||||
connectionManager.passwordReset(gameLoginForgotPasswordEmail.value).then(() => {
|
||||
gameForgotPasswordInfo.style.display = 'block';
|
||||
gameForgotPasswordInfo.innerText = 'We have emailed your password reset link!';
|
||||
gameLoginForgotPasswordEmail.value = '';
|
||||
this.closeGameLogin();
|
||||
}).catch((err) => {
|
||||
gameForgotPasswordError.innerText = err.message;
|
||||
gameForgotPasswordError.style.display = 'block';
|
||||
gameLoginForgotPasswordEmail.value = '';
|
||||
});
|
||||
}
|
||||
|
||||
private register(){
|
||||
|
@ -405,6 +419,9 @@ export class MenuScene extends Phaser.Scene {
|
|||
}
|
||||
|
||||
private openGameForgotPassword(): void{
|
||||
//close all
|
||||
this.closeAll();
|
||||
|
||||
let middleY = (window.innerHeight / 3) - (257);
|
||||
if(middleY < 0){
|
||||
middleY = 0;
|
||||
|
@ -432,6 +449,9 @@ export class MenuScene extends Phaser.Scene {
|
|||
}
|
||||
|
||||
private openGameRegister(): void{
|
||||
//close all
|
||||
this.closeAll();
|
||||
|
||||
let middleY = (window.innerHeight / 3) - (257);
|
||||
if(middleY < 0){
|
||||
middleY = 0;
|
||||
|
@ -516,4 +536,13 @@ export class MenuScene extends Phaser.Scene {
|
|||
const sparkHost = 'https://'+window.location.host.replace('play.', '')+'/choose-map.html';
|
||||
window.open(sparkHost, '_blank');
|
||||
}
|
||||
|
||||
private closeAll(){
|
||||
this.closeGameQualityMenu();
|
||||
this.closeGameForgotPassword();
|
||||
this.closeGameLogin();
|
||||
this.closeGameRegister();
|
||||
this.closeGameShare();
|
||||
this.menuButton.getChildByID('openMenuButton').innerHTML = `<img src="/static/images/menu.svg">`;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,6 +16,9 @@ export class AuthenticateController extends BaseController {
|
|||
this.register();
|
||||
this.verify();
|
||||
this.anonymLogin();
|
||||
this.userRegister();
|
||||
this.userLogin();
|
||||
this.forgotPassword();
|
||||
}
|
||||
|
||||
//Try to login with an admin token
|
||||
|
@ -132,4 +135,119 @@ export class AuthenticateController extends BaseController {
|
|||
}));
|
||||
});
|
||||
}
|
||||
|
||||
private userLogin(){
|
||||
this.App.options("/user/login", (res: HttpResponse, req: HttpRequest) => {
|
||||
this.addCorsHeaders(res);
|
||||
res.end();
|
||||
});
|
||||
|
||||
this.App.post("/user/login", (res: HttpResponse, req: HttpRequest) => {
|
||||
|
||||
(async () => {
|
||||
res.onAborted(() => {
|
||||
console.warn('Login request was aborted');
|
||||
})
|
||||
|
||||
let userUuid = '';
|
||||
try {
|
||||
const params = await res.json();
|
||||
|
||||
const response = await adminApi.loginUser(params.email as string, params.password as string);
|
||||
userUuid = response.data.uuid as string;
|
||||
const authToken = jwtTokenManager.createJWTToken(userUuid);
|
||||
res.writeStatus("200 OK");
|
||||
this.addCorsHeaders(res);
|
||||
res.end(JSON.stringify({
|
||||
authToken,
|
||||
userUuid,
|
||||
user: response.data
|
||||
}));
|
||||
}catch (err){
|
||||
res.writeStatus("400 KO");
|
||||
this.addCorsHeaders(res);
|
||||
res.end(JSON.stringify({
|
||||
message: 'Email or password incorrect'
|
||||
}));
|
||||
}
|
||||
})();
|
||||
});
|
||||
}
|
||||
|
||||
private userRegister(){
|
||||
this.App.options("/user/register", (res: HttpResponse, req: HttpRequest) => {
|
||||
this.addCorsHeaders(res);
|
||||
res.end();
|
||||
});
|
||||
|
||||
this.App.post("/user/register", (res: HttpResponse, req: HttpRequest) => {
|
||||
|
||||
(async () => {
|
||||
|
||||
res.onAborted(() => {
|
||||
console.warn('Register request was aborted');
|
||||
})
|
||||
|
||||
let userUuid = '';
|
||||
try {
|
||||
const params = await res.json();
|
||||
|
||||
const response = await adminApi.register(
|
||||
params.name as string,
|
||||
params.email as string,
|
||||
params.password as string
|
||||
);
|
||||
userUuid = response.data.uuid as string;
|
||||
const authToken = jwtTokenManager.createJWTToken(userUuid);
|
||||
res.writeStatus("200 OK");
|
||||
this.addCorsHeaders(res);
|
||||
res.end(JSON.stringify({
|
||||
authToken,
|
||||
userUuid,
|
||||
user: response.data
|
||||
}));
|
||||
}catch (err){
|
||||
res.writeStatus("400 KO");
|
||||
this.addCorsHeaders(res);
|
||||
res.end(JSON.stringify({
|
||||
message: err.message
|
||||
}));
|
||||
}
|
||||
})();
|
||||
});
|
||||
}
|
||||
|
||||
private forgotPassword() {
|
||||
this.App.options("/user/password/reset", (res: HttpResponse, req: HttpRequest) => {
|
||||
this.addCorsHeaders(res);
|
||||
res.end();
|
||||
});
|
||||
|
||||
this.App.post("/user/password/reset", (res: HttpResponse, req: HttpRequest) => {
|
||||
|
||||
(async () => {
|
||||
|
||||
res.onAborted(() => {
|
||||
console.warn('Forgot password request was aborted');
|
||||
});
|
||||
|
||||
try {
|
||||
const params = await res.json();
|
||||
await adminApi.forgotPassword(params.email as string);
|
||||
res.writeStatus("200 OK");
|
||||
this.addCorsHeaders(res);
|
||||
res.end(JSON.stringify({
|
||||
message: 'Email sent!'
|
||||
}));
|
||||
} catch (err) {
|
||||
res.writeStatus("400 KO");
|
||||
this.addCorsHeaders(res);
|
||||
res.end(JSON.stringify({
|
||||
message: err.message
|
||||
}));
|
||||
}
|
||||
|
||||
})();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@ const MINIMUM_DISTANCE = process.env.MINIMUM_DISTANCE ? Number(process.env.MINIM
|
|||
const GROUP_RADIUS = process.env.GROUP_RADIUS ? Number(process.env.GROUP_RADIUS) : 48;
|
||||
const ALLOW_ARTILLERY = process.env.ALLOW_ARTILLERY ? process.env.ALLOW_ARTILLERY == 'true' : false;
|
||||
const API_URL = process.env.API_URL || '';
|
||||
const ADMIN_API_URL = process.env.ADMIN_API_URL || '';
|
||||
const ADMIN_API_URL = process.env.ADMIN_API_URL || 'http://admin';
|
||||
const ADMIN_API_TOKEN = process.env.ADMIN_API_TOKEN || 'myapitoken';
|
||||
const MAX_USERS_PER_ROOM = parseInt(process.env.MAX_USERS_PER_ROOM || '') || 600;
|
||||
const CPU_OVERHEAT_THRESHOLD = Number(process.env.CPU_OVERHEAT_THRESHOLD) || 80;
|
||||
|
|
|
@ -110,6 +110,61 @@ class AdminApi {
|
|||
headers: {"Authorization": `${ADMIN_API_TOKEN}`}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param email
|
||||
* @param password
|
||||
*/
|
||||
loginUser(email: string, password: string) {
|
||||
console.log('email', email);
|
||||
console.log('password', password);
|
||||
return Axios.post(`${ADMIN_API_URL}/api/user/login`, {
|
||||
email,
|
||||
password,
|
||||
},
|
||||
{
|
||||
headers: {"Authorization": `${ADMIN_API_TOKEN}`}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param name
|
||||
* @param email
|
||||
* @param password
|
||||
*/
|
||||
register(
|
||||
name: string,
|
||||
email: string,
|
||||
password: string,
|
||||
) {
|
||||
return Axios.post(`${ADMIN_API_URL}/api/user/register`, {
|
||||
name,
|
||||
email,
|
||||
password,
|
||||
},
|
||||
{
|
||||
headers: {"Authorization": `${ADMIN_API_TOKEN}`}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param name
|
||||
* @param email
|
||||
* @param password
|
||||
*/
|
||||
forgotPassword(
|
||||
email: string
|
||||
) {
|
||||
return Axios.post(`${ADMIN_API_URL}/api/user/password/reset`, {
|
||||
email
|
||||
},
|
||||
{
|
||||
headers: {"Authorization": `${ADMIN_API_TOKEN}`}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export const adminApi = new AdminApi();
|
||||
|
|
Loading…
Reference in a new issue