Version 1.0.0 - Initialisation du depot
This commit is contained in:
24
src/utils/Access.vue
Normal file
24
src/utils/Access.vue
Normal file
@@ -0,0 +1,24 @@
|
||||
<template>
|
||||
</template>
|
||||
<script setup>
|
||||
|
||||
import { useRouter } from 'vue-router';
|
||||
import { useUserStore } from '@/stores/userStore';
|
||||
import { useGlobalStore } from '@/stores/globalStore';
|
||||
|
||||
const userStore = useUserStore();
|
||||
const globalStore = useGlobalStore();
|
||||
const router = useRouter();
|
||||
|
||||
console.log("Access Vue Loaded");
|
||||
|
||||
console.log(globalStore.lastGuild + "LAST GUILD FROM ACCESS VUE");
|
||||
if(!globalStore.lastGuild && globalStore.lastGuild !== null) {
|
||||
router.push("/servers");
|
||||
} else {
|
||||
router.push(`/servers/${globalStore.lastGuild}`);
|
||||
}
|
||||
|
||||
|
||||
|
||||
</script>
|
22
src/utils/IORequest.js
Normal file
22
src/utils/IORequest.js
Normal file
@@ -0,0 +1,22 @@
|
||||
import { socket } from '@/socket';
|
||||
|
||||
export function IORequest(event, callback, data) {
|
||||
console.log(`IORequest: Emitting event ${event} with data:`, data);
|
||||
socket.emit(event, data);
|
||||
if (callback && typeof callback === 'function') {
|
||||
socket.once(event, (response) => {
|
||||
console.log(`IORequest: Received response for event ${event}:`, response);
|
||||
callback(response);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export function IOListener(event, callback) {
|
||||
console.log(`IOListener: Listen for event ${event}`);
|
||||
socket.on(event, (data) => {
|
||||
if (callback && typeof callback === 'function') {
|
||||
console.log(`IOListener: Received data for event ${event}:`, data);
|
||||
callback(data);
|
||||
}
|
||||
});
|
||||
}
|
40
src/utils/Loader.vue
Normal file
40
src/utils/Loader.vue
Normal file
@@ -0,0 +1,40 @@
|
||||
<script setup>
|
||||
import DefaultSplash from '@/components/Layout/DefaultSplash.vue';
|
||||
|
||||
const defaultMessage = "On s'accorde et on prépare le concert !";
|
||||
|
||||
const props = defineProps({
|
||||
interuptionMessage: {
|
||||
type: String,
|
||||
default: null
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
</script>
|
||||
<template>
|
||||
<DefaultSplash>
|
||||
<h1 v-if="!interuptionMessage" class="separate"><Icon spin-pulse icon="fa-solid fa-spinner"/> Chargement de l'interface</h1>
|
||||
<h1 v-else><Icon icon="fa-solid fa-warning"/> Connexion interrompue</h1>
|
||||
<p v-if="interuptionMessage" class="retry"><Icon spin-pulse icon="fa-solid fa-spinner"/> Tentative de reconnexion en cours</p>
|
||||
<p v-if="interuptionMessage" class="error"><Icon icon="fa-solid fa-circle-xmark"/> {{ interuptionMessage }}</p>
|
||||
<p v-else>{{ defaultMessage }}</p>
|
||||
</DefaultSplash>
|
||||
</template>
|
||||
<style scoped>
|
||||
.retry {
|
||||
font-size: 1.2em;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.error {
|
||||
color: var(--text-error);
|
||||
}
|
||||
|
||||
.separate {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 10px;
|
||||
}
|
||||
</style>
|
85
src/utils/Redirect.vue
Normal file
85
src/utils/Redirect.vue
Normal file
@@ -0,0 +1,85 @@
|
||||
<template>
|
||||
<DefaultSplash width="600px;">
|
||||
|
||||
<h1><Icon spin-pulse icon="fa-solid fa-spinner"/> Connexion en cours</h1>
|
||||
<p>Vous allez être redirigé vers l'application.</p>
|
||||
<div class="info">
|
||||
<p class="second">Session : {{ loginStore.session }}</p>
|
||||
<p class="second">Auth_Code : {{ route.query.code }}</p>
|
||||
</div>
|
||||
|
||||
|
||||
</DefaultSplash>
|
||||
</template>
|
||||
<script setup>
|
||||
import DefaultSplash from '@/components/Layout/DefaultSplash.vue';
|
||||
import { useLoginStore } from '@/stores/loginStore';
|
||||
import { useRoute, useRouter } from 'vue-router';
|
||||
import {socket} from '@/socket.js';
|
||||
|
||||
const loginStore = useLoginStore();
|
||||
const route = useRoute();
|
||||
const router = useRouter();
|
||||
|
||||
if(!loginStore.session) {
|
||||
router.push("/login?error=" + encodeURIComponent("Session expirée ou non valide"));
|
||||
}
|
||||
|
||||
if(!route.query.code) {
|
||||
if(route.query.error) {
|
||||
router.push("/login?error=" + encodeURIComponent("Connexion refusée par l'utilisateur"));
|
||||
} else {
|
||||
// If no error is specified, redirect to login with a generic error message
|
||||
router.push("/login?error=" + encodeURIComponent("Code d'authentification Discord manquant"));
|
||||
}
|
||||
} else {
|
||||
// Edit socket auth
|
||||
socket.auth = {
|
||||
sessionId: loginStore.session,
|
||||
auth_code: route.query.code
|
||||
};
|
||||
socket.connect();
|
||||
}
|
||||
|
||||
socket.on("NEW_TOKEN", (token) => {
|
||||
loginStore.setToken(token);
|
||||
loginStore.setSession(null)
|
||||
router.push("/");
|
||||
});
|
||||
|
||||
|
||||
socket.on("error", () => {
|
||||
router.push("/login?error=" + encodeURIComponent("Déconnexion du serveur lors de la connexion"));
|
||||
});
|
||||
socket.on("disconnect", () => {
|
||||
router.push("/login?error=" + encodeURIComponent("Erreur lors de l'authentification, veuillez réessayer"));
|
||||
});
|
||||
socket.on("connect_error", (error) => {
|
||||
router.push("/login?error=" + encodeURIComponent("Erreur de connexion au serveur : " + error.message));
|
||||
});
|
||||
|
||||
socket.on("NEW_SESSION", (data) => {
|
||||
console.log("Nouvelle session reçue :", data);
|
||||
loginStore.setSession(data);
|
||||
});
|
||||
|
||||
</script>
|
||||
<style scoped>
|
||||
.second {
|
||||
color: var(--text-secondary);
|
||||
font-size: 12px;;
|
||||
word-break: break-all;
|
||||
}
|
||||
|
||||
.info p {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.info {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
gap: -10px;
|
||||
}
|
||||
</style>
|
88
src/utils/SocketEnvironment.vue
Normal file
88
src/utils/SocketEnvironment.vue
Normal file
@@ -0,0 +1,88 @@
|
||||
<template>
|
||||
<Loader :interuption-message='interuptionMessage' v-if="globalStore.isLoading || interuptionMessage" />
|
||||
<slot v-else></slot>
|
||||
</template>
|
||||
<script setup>
|
||||
import Loader from '@/utils/Loader.vue';
|
||||
import { ref } from 'vue';
|
||||
import { useLoginStore } from '@/stores/loginStore';
|
||||
import { socket } from '@/socket.js';
|
||||
import { useRouter } from 'vue-router';
|
||||
import { IOListener, IORequest } from '@/utils/IORequest';
|
||||
import { useUserStore } from '@/stores/userStore';
|
||||
import { useGlobalStore } from '@/stores/globalStore';
|
||||
|
||||
const router = useRouter();
|
||||
const interuptionMessage = ref(null);
|
||||
const needReload = ref(true)
|
||||
|
||||
const loginStore = useLoginStore();
|
||||
const userStore = useUserStore();
|
||||
const globalStore = useGlobalStore();
|
||||
|
||||
loginStore.clearSession();
|
||||
socket.auth.sessionId = null;
|
||||
socket.auth.token = loginStore.token;
|
||||
|
||||
if(!socket.connected) {
|
||||
socket.connect();
|
||||
}
|
||||
|
||||
IOListener("/USER/READY", () => {
|
||||
IORequest("/USER/INFO", (data) => {
|
||||
interuptionMessage.value = null;
|
||||
userStore.setUserInfo(data);
|
||||
console.log("User info received:", data);
|
||||
globalStore.setLoading(false);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
|
||||
IOListener("AUTH_ERROR", (error) => {
|
||||
console.error("Authentication error:", error);
|
||||
loginStore.setToken(null);
|
||||
globalStore.setLoading(true)
|
||||
router.push("/login?error=" + encodeURIComponent("Erreur d'authentification : " + error));
|
||||
socket.removeAllListeners();
|
||||
needReload.value = false
|
||||
})
|
||||
|
||||
socket.on("connect", () => {
|
||||
interuptionMessage.value = null;
|
||||
globalStore.setLoading(true);
|
||||
});
|
||||
|
||||
socket.on("connect_error", (error) => {
|
||||
interuptionMessage.value = "Erreur de connexion au serveur : " + error.message;
|
||||
tryReconnect();
|
||||
});
|
||||
|
||||
socket.on("error", () => {
|
||||
interuptionMessage.value = "Erreur de connexion au serveur, veuillez réessayer plus tard";
|
||||
tryReconnect();
|
||||
})
|
||||
|
||||
socket.on("disconnect", () => {
|
||||
interuptionMessage.value = "Déconnecté du serveur";
|
||||
tryReconnect();
|
||||
})
|
||||
|
||||
|
||||
function tryReconnect() {
|
||||
|
||||
if(socket.connected) {
|
||||
interuptionMessage.value = null;
|
||||
return;
|
||||
}
|
||||
setInterval(() => {
|
||||
console.log("Tentative de reconnexion au serveur...");
|
||||
if(!socket.connected || !needReload.value) {
|
||||
socket.auth.token = loginStore.token;
|
||||
socket.connect();
|
||||
} else {
|
||||
clearInterval(this);
|
||||
}
|
||||
}, 3000); // Essai de reconnexion après 5 secondes
|
||||
}
|
||||
</script>r
|
11
src/utils/UserRequest.js
Normal file
11
src/utils/UserRequest.js
Normal file
@@ -0,0 +1,11 @@
|
||||
import { useLoginStore } from "@/stores/loginStore";
|
||||
import { IORequest } from "@/utils/IORequest";
|
||||
|
||||
export function signOut(router) {
|
||||
const loginStore = useLoginStore();
|
||||
|
||||
IORequest("/USER/SIGNOUT", () => {
|
||||
loginStore.setToken(null);
|
||||
router.push("/login?message=" + encodeURIComponent("Vous avez été déconnecté"));
|
||||
})
|
||||
}
|
Reference in New Issue
Block a user