868 lines
114 KiB
JavaScript
868 lines
114 KiB
JavaScript
|
/******/ (function(modules) { // webpackBootstrap
|
|||
|
/******/ // The module cache
|
|||
|
/******/ var installedModules = {};
|
|||
|
/******/
|
|||
|
/******/ // The require function
|
|||
|
/******/ function __webpack_require__(moduleId) {
|
|||
|
/******/
|
|||
|
/******/ // Check if module is in cache
|
|||
|
/******/ if(installedModules[moduleId]) {
|
|||
|
/******/ return installedModules[moduleId].exports;
|
|||
|
/******/ }
|
|||
|
/******/ // Create a new module (and put it into the cache)
|
|||
|
/******/ var module = installedModules[moduleId] = {
|
|||
|
/******/ i: moduleId,
|
|||
|
/******/ l: false,
|
|||
|
/******/ exports: {}
|
|||
|
/******/ };
|
|||
|
/******/
|
|||
|
/******/ // Execute the module function
|
|||
|
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
|
|||
|
/******/
|
|||
|
/******/ // Flag the module as loaded
|
|||
|
/******/ module.l = true;
|
|||
|
/******/
|
|||
|
/******/ // Return the exports of the module
|
|||
|
/******/ return module.exports;
|
|||
|
/******/ }
|
|||
|
/******/
|
|||
|
/******/
|
|||
|
/******/ // expose the modules object (__webpack_modules__)
|
|||
|
/******/ __webpack_require__.m = modules;
|
|||
|
/******/
|
|||
|
/******/ // expose the module cache
|
|||
|
/******/ __webpack_require__.c = installedModules;
|
|||
|
/******/
|
|||
|
/******/ // define getter function for harmony exports
|
|||
|
/******/ __webpack_require__.d = function(exports, name, getter) {
|
|||
|
/******/ if(!__webpack_require__.o(exports, name)) {
|
|||
|
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
|
|||
|
/******/ }
|
|||
|
/******/ };
|
|||
|
/******/
|
|||
|
/******/ // define __esModule on exports
|
|||
|
/******/ __webpack_require__.r = function(exports) {
|
|||
|
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
|||
|
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|||
|
/******/ }
|
|||
|
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
|||
|
/******/ };
|
|||
|
/******/
|
|||
|
/******/ // create a fake namespace object
|
|||
|
/******/ // mode & 1: value is a module id, require it
|
|||
|
/******/ // mode & 2: merge all properties of value into the ns
|
|||
|
/******/ // mode & 4: return value when already ns object
|
|||
|
/******/ // mode & 8|1: behave like require
|
|||
|
/******/ __webpack_require__.t = function(value, mode) {
|
|||
|
/******/ if(mode & 1) value = __webpack_require__(value);
|
|||
|
/******/ if(mode & 8) return value;
|
|||
|
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
|
|||
|
/******/ var ns = Object.create(null);
|
|||
|
/******/ __webpack_require__.r(ns);
|
|||
|
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
|
|||
|
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
|
|||
|
/******/ return ns;
|
|||
|
/******/ };
|
|||
|
/******/
|
|||
|
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
|||
|
/******/ __webpack_require__.n = function(module) {
|
|||
|
/******/ var getter = module && module.__esModule ?
|
|||
|
/******/ function getDefault() { return module['default']; } :
|
|||
|
/******/ function getModuleExports() { return module; };
|
|||
|
/******/ __webpack_require__.d(getter, 'a', getter);
|
|||
|
/******/ return getter;
|
|||
|
/******/ };
|
|||
|
/******/
|
|||
|
/******/ // Object.prototype.hasOwnProperty.call
|
|||
|
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
|
|||
|
/******/
|
|||
|
/******/ // __webpack_public_path__
|
|||
|
/******/ __webpack_require__.p = "";
|
|||
|
/******/
|
|||
|
/******/
|
|||
|
/******/ // Load entry module and return exports
|
|||
|
/******/ return __webpack_require__(__webpack_require__.s = "./src/validation.js");
|
|||
|
/******/ })
|
|||
|
/************************************************************************/
|
|||
|
/******/ ({
|
|||
|
|
|||
|
/***/ "../lang sync recursive ^\\.\\/.*\\/general$":
|
|||
|
/*!**************************************!*\
|
|||
|
!*** ../lang sync ^\.\/.*\/general$ ***!
|
|||
|
\**************************************/
|
|||
|
/*! no static exports found */
|
|||
|
/***/ (function(module, exports, __webpack_require__) {
|
|||
|
|
|||
|
var map = {
|
|||
|
"./fr/general": "../lang/fr/general.js"
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
function webpackContext(req) {
|
|||
|
var id = webpackContextResolve(req);
|
|||
|
return __webpack_require__(id);
|
|||
|
}
|
|||
|
function webpackContextResolve(req) {
|
|||
|
if(!__webpack_require__.o(map, req)) {
|
|||
|
var e = new Error("Cannot find module '" + req + "'");
|
|||
|
e.code = 'MODULE_NOT_FOUND';
|
|||
|
throw e;
|
|||
|
}
|
|||
|
return map[req];
|
|||
|
}
|
|||
|
webpackContext.keys = function webpackContextKeys() {
|
|||
|
return Object.keys(map);
|
|||
|
};
|
|||
|
webpackContext.resolve = webpackContextResolve;
|
|||
|
module.exports = webpackContext;
|
|||
|
webpackContext.id = "../lang sync recursive ^\\.\\/.*\\/general$";
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ "../lang sync recursive ^\\.\\/.*\\/user$":
|
|||
|
/*!***********************************!*\
|
|||
|
!*** ../lang sync ^\.\/.*\/user$ ***!
|
|||
|
\***********************************/
|
|||
|
/*! no static exports found */
|
|||
|
/***/ (function(module, exports, __webpack_require__) {
|
|||
|
|
|||
|
var map = {
|
|||
|
"./fr/user": "../lang/fr/user.js"
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
function webpackContext(req) {
|
|||
|
var id = webpackContextResolve(req);
|
|||
|
return __webpack_require__(id);
|
|||
|
}
|
|||
|
function webpackContextResolve(req) {
|
|||
|
if(!__webpack_require__.o(map, req)) {
|
|||
|
var e = new Error("Cannot find module '" + req + "'");
|
|||
|
e.code = 'MODULE_NOT_FOUND';
|
|||
|
throw e;
|
|||
|
}
|
|||
|
return map[req];
|
|||
|
}
|
|||
|
webpackContext.keys = function webpackContextKeys() {
|
|||
|
return Object.keys(map);
|
|||
|
};
|
|||
|
webpackContext.resolve = webpackContextResolve;
|
|||
|
module.exports = webpackContext;
|
|||
|
webpackContext.id = "../lang sync recursive ^\\.\\/.*\\/user$";
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ "../lang/fr/general.js":
|
|||
|
/*!*****************************!*\
|
|||
|
!*** ../lang/fr/general.js ***!
|
|||
|
\*****************************/
|
|||
|
/*! no static exports found */
|
|||
|
/***/ (function(module, exports) {
|
|||
|
|
|||
|
module.exports = {
|
|||
|
siteHTMLTitle: "WikiLerni : qu'allez-vous apprendre aujourd'hui ?",
|
|||
|
siteMetaDescription: "Chaque jour, testez vos connaissances et apprenez de nouvelles choses avec WikiLerni.",
|
|||
|
scriptTimingInfo: "Durée de la réponse : SCRIPT_TIMING millisecondes, route : SCRIPT_URL",
|
|||
|
scriptTimingAlert: "*** Script lent : SCRIPT_TIMING millisecondes, route : SCRIPT_URL",
|
|||
|
serverError: "Désolé. Une erreur imprévue est survenue. Si cela persiste, n'hésitez à prévenir l'administrateur du site.",
|
|||
|
serverErrorAdmin: "Bug de l'application :",
|
|||
|
neededParams: "Des paramètres nécessaires manquants sont manquants.",
|
|||
|
badUrl: "Tentative d'accès à une page n'existant pas :",
|
|||
|
notValidFormat: "Format non valide.",
|
|||
|
notAllowed: "Vous n'avez pas les droits nécessaires pour cette action.",
|
|||
|
notRequired: "Facultatif.",
|
|||
|
updateBtnTxt: "Modifier",
|
|||
|
addBtnTxt: "Ajouter",
|
|||
|
deleteBtnTxt: "Supprimer",
|
|||
|
addOkMessage: "Les données ont bien été enregistrées.",
|
|||
|
updateOkMessage: "La mise à jour à jour a bien été enregistrée.",
|
|||
|
deleteOkMessage: "La suppression a bien été enregistrée.",
|
|||
|
failAuth: "Erreur d'authentification.",
|
|||
|
failAuthHeader: "Absence de header Authorization.",
|
|||
|
failAuthToken: "Token invalide ou utilisateur non trouvé.",
|
|||
|
failAuthId: "Identifiant non valide : ",
|
|||
|
failAuthCron: "Tentative de lancement d'un cron sans le bon token.",
|
|||
|
previousPage: "Page précédente",
|
|||
|
nextPage: "Page suivante",
|
|||
|
btnLinkToQuestionnaire: "Aller au quiz !",
|
|||
|
statsAdmin: "Durant les dernières 24h : NB_USERS_24H comptes ont été créés, NB_SUBSCRIPTIONS_24H validés et NB_USERS_DELETED_24H supprimés. NB_ANSWERS_24H réponses aux quizs ont été enregistrées.<br>En tout, il y a : NB_USERS_TOT comptes, dont NB_SUBSCRIPTIONS_TOT validés et NB_SUBSCRIPTIONS_PREMIUM comptes prémium. NB_ANSWERS_TOT réponses aux quizs ont été enregistrées.<br>Parmi les NB_USERS_DELETED_TOT comptes supprimés, NB_USERS_DELETED_VALIDED avaient validé leur compte et NB_USERS_DELETED_PREMIUM avaient souscrit un compte prémium."
|
|||
|
};
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ "../lang/fr/user.js":
|
|||
|
/*!**************************!*\
|
|||
|
!*** ../lang/fr/user.js ***!
|
|||
|
\**************************/
|
|||
|
/*! no static exports found */
|
|||
|
/***/ (function(module, exports) {
|
|||
|
|
|||
|
module.exports = {
|
|||
|
notFound: "L'utilisateur n'a pas été trouvé.",
|
|||
|
needName: "Merci de choisir un nom d'utilisateur.",
|
|||
|
needNotTooLongName: "Merci de choisir un nom d'utilisateur ne comptant pas plus de 70 caractères.",
|
|||
|
needEmail: "Merci de saisir votre adresse e-mail.",
|
|||
|
needUniqueEmail: "L'adresse e-mail que vous avez saisie est déjà utilisée par un autre utilisateur. Si vous avez déjà un compte, <a href='/#URL'>cliquez-ici pour vous connecter</a>.",
|
|||
|
needNotTooLongEmail: "Merci de saisir une adresse e-mail ne comptant pas plus de 255 caractères.",
|
|||
|
needPassWord: "Merci de fournir un mot de passe.",
|
|||
|
needLongPassWord: "Merci de fournir un mot de passe d'au moins MIN_LENGTH caractères.",
|
|||
|
passwordCopied: "Le mot de passe généré a été copié dans le presse-papier. Vous pouvez le recopier où vous le souhaiter.",
|
|||
|
needStatus: "Il manque le statut.",
|
|||
|
needLanguage: "Il manque le code langue.",
|
|||
|
needValidLastConnectionDate: "La date de dernière connexion n'est pas valide.",
|
|||
|
needSMTP: "Il manque le serveur SMTP.",
|
|||
|
needSMTPNotFound: "Il manque le serveur SMTP.",
|
|||
|
needKnowNewsletterOk: "Il faut savoir si l'utilisateur accepte ou refuse de recevoir la newsletter.",
|
|||
|
needTimeDifference: "Il faut connaître le nombre de minutes du décalage horaire.",
|
|||
|
needMinTimeDifference: "Il faut fournir un nombre de minutes à enlever à l'heure GMT ne dépassant pas 720.",
|
|||
|
needMaxTimeDifference: "Il faut fournir un nombre de minutes à ajouter à l'heure GMT ne dépassant pas 840.",
|
|||
|
needUGCOk: "Vous devez accepter les CGU pour pouvoir créer votre compte. ",
|
|||
|
godfatherNotFound: "Aucun utilisateur valide trouvé pour ce code parrain.",
|
|||
|
godfatherFound: "Votre parrain a bien été trouvé !",
|
|||
|
mailValidationMessage: "Votre inscription est bien enregistrée.\nPour la finaliser, merci de cliquer dans les 24H sur le lien de confirmation qui vient de vous être envoyé par e-mail.",
|
|||
|
mailValidationLinkSubject: "Merci de valider votre compte",
|
|||
|
mailValidationLinkSBodyTxt: "Bonjour USER_NAME,\n\nPour valider votre compte, merci de cliquer sur le lien suivant dans les 24h :\nLINK_URL",
|
|||
|
mailValidationLinkSBodyHTML: "<h3>Bonjour USER_NAME,</h3><p>Pour valider votre compte, merci de cliquer sur le lien suivant dans les 24h.</p><p><a href=\"LINK_URL\">Valider.</a></p>",
|
|||
|
validationMessage: "Votre compte vient bien d'être validé. Merci et bienvenue !",
|
|||
|
validationMessageAdmin: "Le compte a bien été validé.",
|
|||
|
validationAlreadyMessage: "Il semble que vous ayez déjà validé votre compte.",
|
|||
|
validationAlreadyMessageAdmin: "Ce compte a déjà été validé.",
|
|||
|
mailWelcomeSubject: "Bienvenue !",
|
|||
|
mailWelcomeBodyTxt: "Bonjour USER_NAME,\nVotre venez de valider votre inscription à NOM_SITE.\nMerci et à bientôt !",
|
|||
|
mailWelcomeBodyHTML: "<h3>Bonjour USER_NAME,</h3><p>Votre venez de valider votre inscription à NOM_SITE.</p><p>Merci et à bientôt !</p>",
|
|||
|
mailThankGodfatherSubject: "Merci !",
|
|||
|
mailThankGodfatherBodyTxt: "Bonjour USER_NAME,\nGrâce à vous un nouvel utilisateur (EMAIL) vient de s'inscrire sur NOM_SITE.\nMerci et à bientôt !",
|
|||
|
mailThankGodfatherBodyHTML: "<h3>Bonjour USER_NAME,</h3><p>Grâce à vous un nouvel utilisateur (EMAIL) vient de s'inscrire sur NOM_SITE.</p><p>Merci et à bientôt !</p>",
|
|||
|
badLinkValidationMessage: "Votre lien de confirmation ne semble pas valide ou bien il a expiré. Vous pouvez en recevoir un nouveau <a href='#URL'>en cliquant ici</a>.",
|
|||
|
emailNotFound: "Aucun utilisateur trouvé pour cette adresse e-mail.",
|
|||
|
alreadyConnected: "Vous êtes déjà connecté(e) au site !",
|
|||
|
needBeConnected: "Vous devez être connecté(e) pour accéder à cette page.",
|
|||
|
connectionOk: "Connexion réussie.",
|
|||
|
needChooseLoginWay: "Vous devez soit saisir votre mot de passe, soit cocher la case vous permettant de recevoir un lien de connexion par e-mail.",
|
|||
|
needValidationToLogin: "Vous devez d'abord valider votre compte avant de vous connecter. Pour ce faire, un lien vient de vous être envoyé par e-mail.",
|
|||
|
tooManyLoginFails: "Trop de tentatives de connexion infructueuses pour cette adresse e-mail. Vous devez attendre MINUTES minutes pour essayer de nouveau.",
|
|||
|
badPassword: "Le mot de passe n'est pas le bon.",
|
|||
|
mailLoginLinkSubject: "Votre lien de connexion.",
|
|||
|
mailLoginLinkBodyTxt: "Bonjour USER_NAME,\nPour vous connecter à votre compte, cliquez sur le lien suivant sans tarder : LINK_URL",
|
|||
|
mailLoginLinkBodyHTML: "<h3>Bonjour USER_NAME,</h3><p>Pour vous connecter à votre compte, cliquez sur le lien suivant sans tarder :</p><p><a href=\"LINK_URL\">Valider.</a></p>",
|
|||
|
mailLoginLinkMessage: "Un lien de connexion vient de vous être envoyé sur votre adresse e-mail. Ne tardez pas à l'utiliser, car il n'est valable que durant ",
|
|||
|
updatedOkMessage: "Vos informations ont bien été mises à jour.",
|
|||
|
updatedNeedGoodEmail: "Mais la nouvelle adresse e-mail n'a pu être enregistrée car elle n'a pas une format correct.",
|
|||
|
updatedNeedUniqueEmail: "Mais la nouvelle adresse e-mail saisie (NEW_EMAIL) n'a pu être enregistrée, car elle est déjà utilisée pour un autre compte.",
|
|||
|
mailUpdateLoginSubject: "Merci de valider vos nouveaux identifiants.",
|
|||
|
mailUpdateLoginBodyTxt: "Bonjour USER_NAME,\nPour valider vos nouveaux identifiants de connexion, cliquez sur le lien suivant sans tarder :\nLINK_URL",
|
|||
|
mailUpdateLoginBodyHTML: "<h3>Bonjour USER_NAME,</h3><p>Pour valider vos nouveaux identifiants de connexion, <a href=\"LINK_URL\">cliquez ici</a> sans tarder.</p>",
|
|||
|
mailUpdateLoginLinkMessage: "Cependant, vous avez modifié au moins un de vos identifiants de connexion (email et/ou mot de passe) et <b>vous devez cliquer sur le lien qui vient de vous êtres envoyé sur votre adresse (NEW_EMAIL) pour valider ce changement</b>. En attendant, merci de continuer à utiliser vos anciens identifiants.",
|
|||
|
updatedNeedValidatedUser: "L'utilisateur que vous souhaité modifier n'existe pas/plus ou n'a pas encore validé son compte.",
|
|||
|
updatedNeedGoodGodfather: "Mais le nouveau code parrain n'a pu être retenu, car il ne correspond à aucun compte utilisateur ou à l'utilisateur lui-même.",
|
|||
|
mailUpdateLoginOkMessage: "La mise à jour de vos identifiants a bien été enregistrée.",
|
|||
|
updatedFailedGodfatherNotFound: "L'identifiant fourni pour le parrain ne correspond à aucun utilisateur.",
|
|||
|
creationOkMessage: "Le nouvel utilisateur a bien été enregistré.",
|
|||
|
mailDeleteSubject: "Confirmer la suppression de votre compte.",
|
|||
|
mailDeleteBodyTxt: "Bonjour USER_NAME,\nPour valider la suppression de votre compte, cliquez sur le lien suivant sans tarder :\nLINK_URL",
|
|||
|
mailDeleteBodyHTML: "<h3>Bonjour USER_NAME,</h3><p>Pour valider la suppression de votre compte, <a href=\"LINK_URL\">cliquez ici</a> sans tarder.</p>",
|
|||
|
mailDeleteLinkMessage: "Votre demande de suppression a bien été enregistrée. Merci de cliquer sans tarder sur le lien qui vient de vous être envoyé par e-mail pour confirmer.",
|
|||
|
deleteOkMessage: "L'utilisateur a bien été supprimé.",
|
|||
|
deleteFailMessage: "Tentative de suppression d'un utilisateur inexistant : ",
|
|||
|
mailDeleteLinkOkMessage: "Votre compte a bien été supprimé. Merci d'avoir utilisé nos services.",
|
|||
|
mailDeleteLinkAlreadyMessage: "Il semble que vous ayez déjà validé la suppression de votre compte.",
|
|||
|
mailDeleteLinkFailMessage: "Votre lien de suppression n'est pas valide ou alors il n'est plus valable.",
|
|||
|
cronDeleteUnvalidedUsersMessage: " comptes utilisateurs non validés ont été supprimés.",
|
|||
|
deleteInactiveUsersMessage: " comptes utilisateurs inactifs ont été supprimés.",
|
|||
|
welcomeMessage: "Bienvenue #NAME !",
|
|||
|
byebyeMessage: "Si vous voyez ce message, c'est que votre déconnexion s'est bien déroulée.<br>À bientôt !",
|
|||
|
infosUserForAdmin: "Cet utilisateur (id: ID_USER) a <b>créé son compte le DATE_CREA</b>, la dernière mise à jour datant du DATE_UPDATE.<br><b>Date de sa dernière connexion : DATE_CONNECTION.</b>",
|
|||
|
infosAdminGodfather: "Cet utilisateur a été parrainé par ",
|
|||
|
infosAdminNbGodChilds: "Ses #NB filleuils : "
|
|||
|
};
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ "../tools/main.js":
|
|||
|
/*!************************!*\
|
|||
|
!*** ../tools/main.js ***!
|
|||
|
\************************/
|
|||
|
/*! no static exports found */
|
|||
|
/***/ (function(module, exports) {
|
|||
|
|
|||
|
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|||
|
|
|||
|
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
|||
|
|
|||
|
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
|
|||
|
|
|||
|
// Quelques fonctions utiles pour les chaînes
|
|||
|
var Tool = /*#__PURE__*/function () {
|
|||
|
function Tool() {
|
|||
|
_classCallCheck(this, Tool);
|
|||
|
}
|
|||
|
|
|||
|
_createClass(Tool, null, [{
|
|||
|
key: "isEmpty",
|
|||
|
value: function isEmpty(myVar) {
|
|||
|
if (myVar === undefined || myVar === null) return true;else {
|
|||
|
myVar += ""; // si autre chose qu'une chaîne envoyé...
|
|||
|
|
|||
|
myVar = myVar.trim();
|
|||
|
if (myVar === "") return true;else return false;
|
|||
|
}
|
|||
|
}
|
|||
|
}, {
|
|||
|
key: "trimIfNotNull",
|
|||
|
value: function trimIfNotNull(myString) {
|
|||
|
if (Tool.isEmpty(myString)) myString = null;else {
|
|||
|
myString += ""; // si autre chose qu'une chaîne envoyé...
|
|||
|
|
|||
|
myString = myString.trim();
|
|||
|
}
|
|||
|
return myString;
|
|||
|
}
|
|||
|
}, {
|
|||
|
key: "shortenIfLongerThan",
|
|||
|
value: function shortenIfLongerThan(myString, max) {
|
|||
|
myString += ""; // au cas où cela ne serait pas une chaîne...
|
|||
|
|
|||
|
if (myString.length > max) myString = myString.substring(0, max - 3) + "...";
|
|||
|
return myString;
|
|||
|
} // source : https://stackoverflow.com/questions/15604140/replace-multiple-strings-with-multiple-other-strings
|
|||
|
|
|||
|
}, {
|
|||
|
key: "replaceAll",
|
|||
|
value: function replaceAll(myString, mapObj) {
|
|||
|
var replaceElts = new RegExp(Object.keys(mapObj).join("|"), "gi");
|
|||
|
return myString.replace(replaceElts, function (matched) {
|
|||
|
return mapObj[matched];
|
|||
|
});
|
|||
|
} // source : https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Math/random
|
|||
|
|
|||
|
}, {
|
|||
|
key: "getRandomInt",
|
|||
|
value: function getRandomInt(min, max) {
|
|||
|
min = Math.ceil(min);
|
|||
|
max = Math.floor(max);
|
|||
|
return Math.floor(Math.random() * (max - min)) + min;
|
|||
|
} // à compléter : https://en.wikipedia.org/wiki/Date_format_by_country
|
|||
|
|
|||
|
}, {
|
|||
|
key: "dateFormat",
|
|||
|
value: function dateFormat(dateString) {
|
|||
|
var lang = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "fr";
|
|||
|
if (Tool.isEmpty(dateString)) return "";
|
|||
|
var myDate = new Date(dateString);
|
|||
|
var myDay = myDate.getDate() + "";
|
|||
|
if (myDay.length === 1) myDay = "0" + myDay;
|
|||
|
var myMounth = myDate.getMonth() + 1 + "";
|
|||
|
if (myMounth.length === 1) myMounth = "0" + myMounth;
|
|||
|
var myYear = myDate.getFullYear();
|
|||
|
if (lang === "fr") return myDay + "/" + myMounth + "/" + myYear;else if (lang === "form") // 2014-02-09
|
|||
|
return myYear + "-" + myMounth + "-" + myDay;else return myMounth + "/" + myDay + "/" + myYear;
|
|||
|
}
|
|||
|
}]);
|
|||
|
|
|||
|
return Tool;
|
|||
|
}();
|
|||
|
|
|||
|
module.exports = Tool;
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ "./src/config/general.js":
|
|||
|
/*!*******************************!*\
|
|||
|
!*** ./src/config/general.js ***!
|
|||
|
\*******************************/
|
|||
|
/*! no static exports found */
|
|||
|
/***/ (function(module, exports) {
|
|||
|
|
|||
|
module.exports = {
|
|||
|
apiUrl: "http://localhost:3000/api",
|
|||
|
usersGetConfigUrl: "/user/getconfig",
|
|||
|
lang: "fr",
|
|||
|
userHomePage: "accueil.html",
|
|||
|
adminHomePage: "admin.html",
|
|||
|
managerHomePage: "gestion.html",
|
|||
|
subscribePage: "inscription.html",
|
|||
|
connectionPage: "connexion.html",
|
|||
|
accountPage: "compte.html",
|
|||
|
questionnairesManagementPage: "gestion-quizs.html",
|
|||
|
usersManagementPage: "gestion-utilisateurs.html",
|
|||
|
nbQuestionnairesUserHomePage: 10,
|
|||
|
illustrationDir: "/img/quizs/"
|
|||
|
}; // à terme fusionner avec les déclarations backend concernant le front, tout étant saisi dans l'admin
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ "./src/tools/clientstorage.js":
|
|||
|
/*!************************************!*\
|
|||
|
!*** ./src/tools/clientstorage.js ***!
|
|||
|
\************************************/
|
|||
|
/*! exports provided: saveLocaly, getLocaly, removeLocaly */
|
|||
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|||
|
|
|||
|
"use strict";
|
|||
|
__webpack_require__.r(__webpack_exports__);
|
|||
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "saveLocaly", function() { return saveLocaly; });
|
|||
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLocaly", function() { return getLocaly; });
|
|||
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeLocaly", function() { return removeLocaly; });
|
|||
|
// FONCTIONS UTILES AU STOCKAGE LOCAL (SESSION, COOKIES, INDEXDB, ETC.)
|
|||
|
// Revenir pour gérer le cas où local.storage n'est pas connu pour utiliser cookie
|
|||
|
var saveLocaly = function saveLocaly(name, data) {
|
|||
|
localStorage.setItem(name, JSON.stringify(data));
|
|||
|
};
|
|||
|
var getLocaly = function getLocaly(name) {
|
|||
|
var json = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|||
|
if (json) return JSON.parse(localStorage.getItem(name));else return localStorage.getItem(name);
|
|||
|
};
|
|||
|
var removeLocaly = function removeLocaly(name) {
|
|||
|
localStorage.removeItem(name);
|
|||
|
};
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ "./src/tools/dom.js":
|
|||
|
/*!**************************!*\
|
|||
|
!*** ./src/tools/dom.js ***!
|
|||
|
\**************************/
|
|||
|
/*! exports provided: addElement */
|
|||
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|||
|
|
|||
|
"use strict";
|
|||
|
__webpack_require__.r(__webpack_exports__);
|
|||
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addElement", function() { return addElement; });
|
|||
|
/* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js");
|
|||
|
/* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_0__);
|
|||
|
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
|
|||
|
|
|||
|
// Fonction associant les attributs fournis à un champ de formulaire
|
|||
|
|
|||
|
var addElement = function addElement(eltParent, eltType) {
|
|||
|
var eltContent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "";
|
|||
|
var eltId = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : "";
|
|||
|
var eltClass = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : [];
|
|||
|
var eltAttributes = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};
|
|||
|
var replace = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : true;
|
|||
|
if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltType) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltParent)) return false;else {
|
|||
|
var newElement = document.createElement(eltType);
|
|||
|
if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltId)) // tester si l'id n'est pas déjà utilisé dans le DOM ?
|
|||
|
newElement.id = eltId;
|
|||
|
|
|||
|
if (Array.isArray(eltClass) && eltClass.length != 0) {
|
|||
|
for (var i in eltClass) {
|
|||
|
newElement.classList.add(eltClass[i]);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if (_typeof(eltAttributes) === "object") // !! tous les objets ne sont pas ok
|
|||
|
{
|
|||
|
for (var attributName in eltAttributes) {
|
|||
|
newElement.setAttribute(attributName, eltAttributes[attributName]);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltContent)) newElement.innerHTML = eltContent.replace(/\n/g, "<br>"); // innerHTML permet d'ajouter du texte ayant lui-même des balises, etc.
|
|||
|
|
|||
|
if (replace) eltParent.innerHTML = "";
|
|||
|
eltParent.appendChild(newElement);
|
|||
|
}
|
|||
|
};
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ "./src/tools/everywhere.js":
|
|||
|
/*!*********************************!*\
|
|||
|
!*** ./src/tools/everywhere.js ***!
|
|||
|
\*********************************/
|
|||
|
/*! exports provided: helloDev */
|
|||
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|||
|
|
|||
|
"use strict";
|
|||
|
__webpack_require__.r(__webpack_exports__);
|
|||
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "helloDev", function() { return helloDev; });
|
|||
|
// Ce script fournit des fonctions utilisées sur toutes les pages du site
|
|||
|
var helloDev = function helloDev() {
|
|||
|
console.log("**** Hello ami développeur :-)\n Le code de WikiLerni est libre et est lisible sur gitlab : \n Bonne lecture :-) \n Pour les suggestions d'amélioration ou questions : dev@wililerni.com ****");
|
|||
|
return true;
|
|||
|
};
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ "./src/tools/url.js":
|
|||
|
/*!**************************!*\
|
|||
|
!*** ./src/tools/url.js ***!
|
|||
|
\**************************/
|
|||
|
/*! exports provided: getUrlParams */
|
|||
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|||
|
|
|||
|
"use strict";
|
|||
|
__webpack_require__.r(__webpack_exports__);
|
|||
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getUrlParams", function() { return getUrlParams; });
|
|||
|
/* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js");
|
|||
|
/* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_0__);
|
|||
|
// Fonction récupérant les paramètres passés par l'url
|
|||
|
|
|||
|
var getUrlParams = function getUrlParams() {
|
|||
|
if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(location.search)) return false;
|
|||
|
var parameters = location.search.substring(1).split("&");
|
|||
|
if (!Array.isArray(parameters) || parameters.length === 0) return false;
|
|||
|
var param,
|
|||
|
datas = {};
|
|||
|
|
|||
|
for (var i in parameters) {
|
|||
|
param = parameters[i].split("=");
|
|||
|
if (param.length === 2) datas[param[0]] = decodeURI(param[1]);
|
|||
|
}
|
|||
|
|
|||
|
return datas;
|
|||
|
};
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ "./src/tools/users.js":
|
|||
|
/*!****************************!*\
|
|||
|
!*** ./src/tools/users.js ***!
|
|||
|
\****************************/
|
|||
|
/*! exports provided: getConfig, getTimeDifference, getPassword, setSession, checkAnswerDatas, checkSession */
|
|||
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|||
|
|
|||
|
"use strict";
|
|||
|
__webpack_require__.r(__webpack_exports__);
|
|||
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getConfig", function() { return getConfig; });
|
|||
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getTimeDifference", function() { return getTimeDifference; });
|
|||
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getPassword", function() { return getPassword; });
|
|||
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setSession", function() { return setSession; });
|
|||
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "checkAnswerDatas", function() { return checkAnswerDatas; });
|
|||
|
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "checkSession", function() { return checkSession; });
|
|||
|
/* harmony import */ var _clientstorage_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./clientstorage.js */ "./src/tools/clientstorage.js");
|
|||
|
/* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js");
|
|||
|
/* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_1__);
|
|||
|
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|||
|
|
|||
|
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|||
|
|
|||
|
var configFrontEnd = __webpack_require__(/*! ../config/general */ "./src/config/general.js");
|
|||
|
|
|||
|
|
|||
|
// Récupère les données de configuration des utilisateurs
|
|||
|
// À terme, un fichier statique importable comme module devrait éviter une requête ajax
|
|||
|
|
|||
|
var getConfig = /*#__PURE__*/function () {
|
|||
|
var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
|
|||
|
return regeneratorRuntime.wrap(function _callee$(_context) {
|
|||
|
while (1) {
|
|||
|
switch (_context.prev = _context.next) {
|
|||
|
case 0:
|
|||
|
return _context.abrupt("return", new Promise(function (resolve, reject) {
|
|||
|
var xhr = new XMLHttpRequest();
|
|||
|
xhr.open("GET", configFrontEnd.apiUrl + configFrontEnd.usersGetConfigUrl);
|
|||
|
|
|||
|
xhr.onload = function () {
|
|||
|
return resolve(JSON.parse(xhr.responseText));
|
|||
|
};
|
|||
|
|
|||
|
xhr.onerror = function () {
|
|||
|
return reject(xhr.statusText);
|
|||
|
};
|
|||
|
|
|||
|
xhr.send();
|
|||
|
}));
|
|||
|
|
|||
|
case 1:
|
|||
|
case "end":
|
|||
|
return _context.stop();
|
|||
|
}
|
|||
|
}
|
|||
|
}, _callee);
|
|||
|
}));
|
|||
|
|
|||
|
return function getConfig() {
|
|||
|
return _ref.apply(this, arguments);
|
|||
|
};
|
|||
|
}();
|
|||
|
var getTimeDifference = function getTimeDifference(config) {
|
|||
|
var timeLocal = new Date().getTimezoneOffset();
|
|||
|
if (timeLocal > config.timeDifferenceMax || timeLocal < config.timeDifferenceMin) return 0;else return timeLocal;
|
|||
|
}; // On enlève volontairement les 0/O pour éviter les confusions !
|
|||
|
// Et mieux vaut aussi débuter et finir par une lettre simple.
|
|||
|
|
|||
|
var getPassword = function getPassword(nbCarMin, nbCarMax) {
|
|||
|
var nbCar = nbCarMin + Math.floor(Math.random() * (nbCarMax - nbCarMin));
|
|||
|
var letters = "ABCDEFGHIJKLMNPQRSTUVWXYZabcdefghijklmnpqrstuvwxyz";
|
|||
|
var others = "123456789!?.*-_%@&ÉÀÈÙ€$ÂÊÛÎ";
|
|||
|
var password = letters[Math.floor(Math.random() * letters.length)];
|
|||
|
|
|||
|
for (var i = 1; i < nbCar - 1; i++) {
|
|||
|
if (i % 2 === 1) password += others[Math.floor(Math.random() * others.length)];else password += letters[Math.floor(Math.random() * letters.length)];
|
|||
|
}
|
|||
|
|
|||
|
password += letters[Math.floor(Math.random() * letters.length)];
|
|||
|
return password;
|
|||
|
}; // J'utilise le stockage local du navigateur pour enregistrer les données permettant de reconnaître l'utilisateur par la suite
|
|||
|
// Seul le serveur pourra vérifier que les identifiants sont (toujours) valides.
|
|||
|
|
|||
|
var setSession = function setSession(userId, token, durationTS) {
|
|||
|
var storageUser = {
|
|||
|
id: userId,
|
|||
|
token: token,
|
|||
|
duration: durationTS
|
|||
|
};
|
|||
|
Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_0__["saveLocaly"])("user", storageUser);
|
|||
|
}; // Vérifie qu'il y a des données locales concernant le résultat d'un quiz
|
|||
|
// Et les ajoute aux données envoyées par les formulaires d'inscription/connexion si c'est le cas
|
|||
|
|
|||
|
var checkAnswerDatas = function checkAnswerDatas(datas) {
|
|||
|
var lastAnswer = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_0__["getLocaly"])("lastAnswer");
|
|||
|
|
|||
|
if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(lastAnswer)) {
|
|||
|
var answer = JSON.parse(lastAnswer);
|
|||
|
|
|||
|
if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(answer.duration) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(answer.nbCorrectAnswers) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(answer.QuestionnaireId) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(answer.nbQuestions)) {
|
|||
|
datas.duration = answer.duration;
|
|||
|
datas.nbCorrectAnswers = answer.nbCorrectAnswers;
|
|||
|
datas.QuestionnaireId = answer.QuestionnaireId;
|
|||
|
datas.nbQuestions = answer.nbQuestions;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return datas;
|
|||
|
}; // Cette fonction teste la connexion de l'utilisateur d'une page
|
|||
|
// On peut fournis une liste de statuts acceptés (si vide = tous), ainsi qu'une url de redirection si non connecté, un message d'erreur à afficher sur la page de destination et l'url sur laquelle revenir une fois connecté
|
|||
|
|
|||
|
var checkSession = /*#__PURE__*/function () {
|
|||
|
var _ref2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(config) {
|
|||
|
var status,
|
|||
|
urlRedirection,
|
|||
|
message,
|
|||
|
urlWanted,
|
|||
|
_args2 = arguments;
|
|||
|
return regeneratorRuntime.wrap(function _callee2$(_context2) {
|
|||
|
while (1) {
|
|||
|
switch (_context2.prev = _context2.next) {
|
|||
|
case 0:
|
|||
|
status = _args2.length > 1 && _args2[1] !== undefined ? _args2[1] : [];
|
|||
|
urlRedirection = _args2.length > 2 ? _args2[2] : undefined;
|
|||
|
message = _args2.length > 3 ? _args2[3] : undefined;
|
|||
|
urlWanted = _args2.length > 4 ? _args2[4] : undefined;
|
|||
|
return _context2.abrupt("return", new Promise(function (resolve, reject) {
|
|||
|
var userDatas = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_0__["getLocaly"])("user");
|
|||
|
|
|||
|
if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(userDatas)) {
|
|||
|
redirectUser(urlRedirection, message, urlWanted);
|
|||
|
resolve(false);
|
|||
|
} else {
|
|||
|
var user = JSON.parse(userDatas);
|
|||
|
|
|||
|
if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(user.id) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(user.token) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(user.duration) || user.duration < Date.now()) {
|
|||
|
Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_0__["removeLocaly"])("user");
|
|||
|
redirectUser(urlRedirection, message, urlWanted);
|
|||
|
resolve(false);
|
|||
|
} else {
|
|||
|
var xhr = new XMLHttpRequest();
|
|||
|
xhr.open("GET", configFrontEnd.apiUrl + config.userRoutes + config.checkLoginRoute + user.token);
|
|||
|
|
|||
|
xhr.onload = function () {
|
|||
|
var response = JSON.parse(xhr.responseText);
|
|||
|
|
|||
|
if (xhr.status === 200 && response.isValid && response.id != undefined) {
|
|||
|
if (response.id === user.id) {
|
|||
|
user.name = response.name;
|
|||
|
user.language = response.language;
|
|||
|
user.timeDifference = response.timeDifference;
|
|||
|
user.status = response.status; // le token et de toute façon vérifier à chaque requête à l'API
|
|||
|
|
|||
|
Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_0__["saveLocaly"])("user", user); // si il s'agit d'un "user" et que son abonnement a expiré, je le redirige vers la caisse :-)
|
|||
|
|
|||
|
if (response.status === "user" && response.nbDaysOk <= 0) {
|
|||
|
var urlAccount = config.siteUrl + "/" + configFrontEnd.accountPage;
|
|||
|
if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configFrontEnd.accountPage); // passée directement ici, l'ancre #subscribe ne fonctionne pas !?
|
|||
|
|
|||
|
resolve(true);
|
|||
|
} else {
|
|||
|
if (status.length !== 0 && status.indexOf(response.status) === -1) {
|
|||
|
redirectUser(urlRedirection, message, urlWanted);
|
|||
|
resolve(false);
|
|||
|
} else resolve(true);
|
|||
|
}
|
|||
|
} else {
|
|||
|
Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_0__["removeLocaly"])("user");
|
|||
|
redirectUser(urlRedirection, message, urlWanted);
|
|||
|
resolve(false);
|
|||
|
}
|
|||
|
} else {
|
|||
|
Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_0__["removeLocaly"])("user");
|
|||
|
redirectUser(urlRedirection, message, urlWanted);
|
|||
|
resolve(false);
|
|||
|
}
|
|||
|
};
|
|||
|
|
|||
|
xhr.onerror = function () {
|
|||
|
return reject(xhr.statusText);
|
|||
|
};
|
|||
|
|
|||
|
xhr.send();
|
|||
|
}
|
|||
|
}
|
|||
|
}));
|
|||
|
|
|||
|
case 5:
|
|||
|
case "end":
|
|||
|
return _context2.stop();
|
|||
|
}
|
|||
|
}
|
|||
|
}, _callee2);
|
|||
|
}));
|
|||
|
|
|||
|
return function checkSession(_x) {
|
|||
|
return _ref2.apply(this, arguments);
|
|||
|
};
|
|||
|
}(); // Cette fonction sert à la précédente en cas de connexion non valide
|
|||
|
|
|||
|
var redirectUser = function redirectUser(urlRedirection, message, urlWanted) {
|
|||
|
if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(message)) Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_0__["saveLocaly"])("message", message);
|
|||
|
if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(urlWanted)) Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_0__["saveLocaly"])("url", urlWanted);
|
|||
|
if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(urlRedirection)) window.location.assign(urlRedirection);
|
|||
|
};
|
|||
|
|
|||
|
/***/ }),
|
|||
|
|
|||
|
/***/ "./src/validation.js":
|
|||
|
/*!***************************!*\
|
|||
|
!*** ./src/validation.js ***!
|
|||
|
\***************************/
|
|||
|
/*! no exports provided */
|
|||
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|||
|
|
|||
|
"use strict";
|
|||
|
__webpack_require__.r(__webpack_exports__);
|
|||
|
/* harmony import */ var _tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./tools/clientstorage.js */ "./src/tools/clientstorage.js");
|
|||
|
/* harmony import */ var _tools_dom_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tools/dom.js */ "./src/tools/dom.js");
|
|||
|
/* harmony import */ var _tools_everywhere_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tools/everywhere.js */ "./src/tools/everywhere.js");
|
|||
|
/* harmony import */ var _tools_url_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tools/url.js */ "./src/tools/url.js");
|
|||
|
/* harmony import */ var _tools_users_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tools/users.js */ "./src/tools/users.js");
|
|||
|
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|||
|
|
|||
|
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|||
|
|
|||
|
// -- GESTION DE LA PAGE PERMETTANT DE VALIDER LA CRÉATION DE SON COMPTE
|
|||
|
/// Un token est transmis en paramètre de l'Url. Il a une validité limité dans le temps.
|
|||
|
/// Dans ce cas, on peut rediriger l'utilisateur vers la page de connexion pour obtenir un nouveau lien de validation
|
|||
|
/// Si le token est ok, on crée une session de courte durée et redirige l'utilisateur vers sa page d'accueil
|
|||
|
/// Si l'utilisateur a déjà une session active valide, c'est qu'il a déjà cliqué sur le lien. On le redirige également vers sa page d'accueil.
|
|||
|
// Fichier de configuration côté client :
|
|||
|
var configFrontEnd = __webpack_require__(/*! ./config/general */ "./src/config/general.js"); // Importation des fonctions utile au script :
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
// Dictionnaires :
|
|||
|
|
|||
|
var txt = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/general$")("./" + configFrontEnd.lang + "/general");
|
|||
|
|
|||
|
var txtUsers = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/user$")("./" + configFrontEnd.lang + "/user");
|
|||
|
|
|||
|
var divResponse = document.getElementById("response");
|
|||
|
Object(_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_2__["helloDev"])();
|
|||
|
var config;
|
|||
|
|
|||
|
var initialise = /*#__PURE__*/function () {
|
|||
|
var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
|
|||
|
var isConnected, user, homePage, datas, xhr;
|
|||
|
return regeneratorRuntime.wrap(function _callee$(_context) {
|
|||
|
while (1) {
|
|||
|
switch (_context.prev = _context.next) {
|
|||
|
case 0:
|
|||
|
_context.prev = 0;
|
|||
|
_context.next = 3;
|
|||
|
return Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_4__["getConfig"])();
|
|||
|
|
|||
|
case 3:
|
|||
|
config = _context.sent;
|
|||
|
|
|||
|
if (config) {
|
|||
|
_context.next = 8;
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_1__["addElement"])(divResponse, "p", txt.serverError, "", ["error"]);
|
|||
|
_context.next = 12;
|
|||
|
break;
|
|||
|
|
|||
|
case 8:
|
|||
|
_context.next = 10;
|
|||
|
return Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_4__["checkSession"])(config);
|
|||
|
|
|||
|
case 10:
|
|||
|
isConnected = _context.sent;
|
|||
|
|
|||
|
if (isConnected) {
|
|||
|
Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_0__["saveLocaly"])("message", {
|
|||
|
message: txtUsers.alreadyConnected,
|
|||
|
color: "information"
|
|||
|
}); // pour l'afficher sur la page suivante
|
|||
|
|
|||
|
user = Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_0__["getLocaly"])("user", true);
|
|||
|
homePage = user.status + "HomePage"; // ne devrait pouvoir être que user ici
|
|||
|
|
|||
|
window.location.assign("/" + configFrontEnd[homePage]);
|
|||
|
Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_1__["addElement"])(divResponse, "p", txtUsers.alreadyConnected, "", ["information"]); // au cas où blocage redirection
|
|||
|
} else {
|
|||
|
datas = Object(_tools_url_js__WEBPACK_IMPORTED_MODULE_3__["getUrlParams"])();
|
|||
|
|
|||
|
if (datas && datas.t !== undefined) {
|
|||
|
xhr = new XMLHttpRequest();
|
|||
|
xhr.open("GET", configFrontEnd.apiUrl + config.userRoutes + config.checkSubscribeTokenRoute + datas.t);
|
|||
|
|
|||
|
xhr.onreadystatechange = function () {
|
|||
|
if (this.readyState == XMLHttpRequest.DONE) {
|
|||
|
var response = JSON.parse(this.responseText);
|
|||
|
|
|||
|
if (this.status === 200 && response.userId != undefined && response.token != undefined) {
|
|||
|
var connexionMaxTime = Date.now() + parseInt(config.connexionMinTimeInHours, 10) * 3600 * 1000;
|
|||
|
Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_4__["setSession"])(response.userId, response.token, connexionMaxTime);
|
|||
|
Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_0__["saveLocaly"])("message", {
|
|||
|
message: txtUsers.validationMessage,
|
|||
|
color: "success"
|
|||
|
}); // pour l'afficher sur la page suivante
|
|||
|
|
|||
|
Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_1__["addElement"])(divResponse, "p", txtUsers.validationMessage, "", ["success"]); // au cas où blocage redirection
|
|||
|
|
|||
|
window.location.assign("/" + configFrontEnd.userHomePage); // que user possible lors de la création
|
|||
|
} else if ((this.status === 200 || this.status === 404) && response.errors != undefined) {
|
|||
|
if (Array.isArray(response.errors)) response.errors = response.errors.join("<br>");else response.errors = txt.serverError;
|
|||
|
Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_1__["addElement"])(divResponse, "p", response.errors, "", ["error"]);
|
|||
|
} else Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_1__["addElement"])(divResponse, "p", txtUsers.badLinkValidationMessage.replace("#URL", configFrontEnd.connectionPage), "", ["error"]);
|
|||
|
}
|
|||
|
};
|
|||
|
|
|||
|
xhr.send();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
case 12:
|
|||
|
_context.next = 17;
|
|||
|
break;
|
|||
|
|
|||
|
case 14:
|
|||
|
_context.prev = 14;
|
|||
|
_context.t0 = _context["catch"](0);
|
|||
|
Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_1__["addElement"])(divResponse, "p", txt.serverError, "", ["error"]);
|
|||
|
|
|||
|
case 17:
|
|||
|
case "end":
|
|||
|
return _context.stop();
|
|||
|
}
|
|||
|
}
|
|||
|
}, _callee, null, [[0, 14]]);
|
|||
|
}));
|
|||
|
|
|||
|
return function initialise() {
|
|||
|
return _ref.apply(this, arguments);
|
|||
|
};
|
|||
|
}();
|
|||
|
|
|||
|
initialise();
|
|||
|
|
|||
|
/***/ })
|
|||
|
|
|||
|
/******/ });
|
|||
|
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9nZW5lcmFsJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3VzZXIkIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL2dlbmVyYWwuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvdXNlci5qcyIsIndlYnBhY2s6Ly8vLi4vdG9vbHMvbWFpbi5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY29uZmlnL2dlbmVyYWwuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2RvbS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZXZlcnl3aGVyZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvdXJsLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy91c2Vycy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdmFsaWRhdGlvbi5qcyJdLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwic2l0ZUhUTUxUaXRsZSIsInNpdGVNZXRhRGVzY3JpcHRpb24iLCJzY3JpcHRUaW1pbmdJbmZvIiwic2NyaXB0VGltaW5nQWxlcnQiLCJzZXJ2ZXJFcnJvciIsInNlcnZlckVycm9yQWRtaW4iLCJuZWVkZWRQYXJhbXMiLCJiYWRVcmwiLCJub3RWYWxpZEZvcm1hdCIsIm5vdEFsbG93ZWQiLCJub3RSZXF1aXJlZCIsInVwZGF0ZUJ0blR4dCIsImFkZEJ0blR4dCIsImRlbGV0ZUJ0blR4dCIsImFkZE9rTWVzc2FnZSIsInVwZGF0ZU9rTWVzc2FnZSIsImRlbGV0ZU9rTWVzc2FnZSIsImZhaWxBdXRoIiwiZmFpbEF1dGhIZWFkZXIiLCJmYWlsQXV0aFRva2VuIiwiZmFpbEF1dGhJZCIsImZhaWxBdXRoQ3JvbiIsInByZXZpb3VzUGFnZSIsIm5leHRQYWdlIiwiYnRuTGlua1RvUXVlc3Rpb25uYWlyZSIsInN0YXRzQWRtaW4iLCJub3RGb3VuZCIsIm5lZWROYW1lIiwibmVlZE5vdFRvb0xvbmdOYW1lIiwibmVlZEVtYWlsIiwibmVlZFVuaXF1ZUVtYWlsIiwibmVlZE5vdFRvb0xvbmdFbWFpbCIsIm5lZWRQYXNzV29yZCIsIm5lZWRMb25nUGFzc1dvcmQiLCJwYXNzd29yZENvcGllZCIsIm5lZWRTdGF0dXMiLCJuZWVkTGFuZ3VhZ2UiLCJuZWVkVmFsaWRMYXN0Q29ubmVjdGlvbkRhdGUiLCJuZWVkU01UUCIsIm5lZWRTTVRQTm90Rm91bmQiLCJuZWVkS25vd05ld3NsZXR0ZXJPayIsIm5lZWRUaW1lRGlmZmVyZW5jZSIsIm5lZWRNaW5UaW1lRGlmZmVyZW5jZSIsIm5lZWRNYXhUaW1lRGlmZmVyZW5jZSIsIm5lZWRVR0NPayIsImdvZGZhdGhlck5vdEZvdW5kIiwiZ29kZmF0aGVyRm91bmQiLCJtYWlsVmFsaWRhdGlvbk1lc3NhZ2UiLCJtYWlsVmFsaWRhdGlvbkxpbmtTdWJqZWN0IiwibWFpbFZhbGlkYXRpb25MaW5rU0JvZHlUeHQiLCJtYWlsVmFsaWRhdGlvbkxpbmtTQm9keUhUTUwiLCJ2YWxpZGF0aW9uTWVzc2FnZSIsInZhbGlkYXRpb25NZXNzYWdlQWRtaW4iLCJ2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2UiLCJ2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2VBZG1pbiIsIm1haWxXZWxjb21lU3ViamVjdCIsIm1haWxXZWxjb21lQm9keVR4dCIsIm1haWxXZWxjb21lQm9keUhUTUwiLCJtYWlsVGhhbmtHb2RmYXRoZXJTdWJqZWN0IiwibWFpbFRoYW5rR29kZmF0aGVyQm9keVR4dCIsIm1haWxUaGFua0dvZGZhdGhlckJvZHlIVE1MIiwiYmFkTGlua1ZhbGlkYXRpb25NZXNzYWdlIiwiZW1haWxOb3RGb3VuZCIsImFscmVhZHlDb25uZWN0ZWQiLCJuZWVkQmVDb25uZWN0ZWQiLCJjb25uZWN0aW9uT2siLCJuZWVkQ2hvb3NlTG9naW5XYXkiLCJuZWVkVmFsaWRhdGlvblRvTG9naW4iLCJ0b29NYW55TG9naW5GYWlscyIsImJhZFBhc3N3b3JkIiwibWFpbExvZ2luTGlua1N1YmplY3QiLCJtYWlsTG9naW5MaW5rQm9keVR4dCIsIm1haWxMb2dpbkxpbmtCb2R5SFRNTCIsIm1haWxMb2dpbkxpbmtNZXNzYWdlIiwidXBkYXRlZE9rTWVzc2FnZSIsInVwZGF0ZWROZWVkR29vZEVtYWlsIiwidXBkYXRlZE5lZWRVbmlxdWVFbWFpbCIsIm1haWxVcGRhdGVMb2dpblN1YmplY3QiLCJtYWlsVXBkYXRlTG9naW5Cb2R5VHh0IiwibWFpbFVwZGF0ZUxvZ2luQm9keUhUTUwiLCJtYWlsVXBkYXRlTG9naW5MaW5rTWVzc2FnZSIsInVwZGF0ZWROZWVkVmFsaWRhdGVkVXNlciIsInVwZGF0ZWROZWVkR29vZEdvZGZhdGhlciIsIm1haWxVcGRhdGVMb2dpbk9rTWVzc2FnZSIsInVwZGF0ZWRGYWlsZWRHb2RmYXRoZXJOb3RGb3VuZCIsImNyZWF0aW9uT2tNZXNzYWdlIiwibWFpbERlbGV0ZVN1YmplY3QiLCJtYWlsRGVsZXRlQm9keVR4dCIsIm1haWxEZWxldGVCb2R5SFRNTCIsIm1haWxEZWxldGVMaW5rTWVzc2FnZSIsImRlbGV0ZUZhaWxNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtPa01lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua0FscmVhZHlNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtGYWlsTWVzc2FnZSIsImNyb25EZWxldGVVbnZhbGlkZWRVc2Vyc01lc3NhZ2UiLCJkZWxldGVJbmFjdGl2ZVVzZXJzTWVzc2FnZSIsIndlbGNvbWVNZXNzYWdlIiwiYnllYnllTWVzc2FnZSIsImluZm9zVXNlckZvckFkbWluIiwiaW5mb3NBZG1pbkdvZGZhdGhlciIsImluZm9zQWRtaW5OYkdvZENoaWxkcyIsIlRvb2wiLCJteVZhciIsInVuZGVmaW5lZCIsInRyaW0iLCJteVN0cmluZyIsImlzRW1wdHkiLCJtYXgiLCJsZW5ndGgiLCJzdWJzdHJpbmciLCJtYXBPYmoiLCJyZXBsYWNlRWx0cyIsIlJlZ0V4cCIsIk9iamVjdCIsImtleXMiLCJqb2luIiwicmVwbGFjZSIsIm1hdGNoZWQiLCJtaW4iLCJNYXRoIiwiY2VpbCIsImZsb29yIiwicmFuZG9tIiwiZGF0ZVN0cmluZyIsImxhbmciLCJteURhdGUiLCJEYXRlIiwibXlEYXkiLCJnZXREYXRlIiwibXlNb3VudGgiLCJnZXRNb250aCIsIm15WWVhciIsImdldEZ1bGxZZWFyIiwiYXBpVXJsIiwidXNlcnNHZXRDb25maWdVcmwiLCJ1c2VySG9tZVBhZ2UiLCJhZG1pbkhvbWVQYWdlIiwibWFuYWdlckhvbWVQYWdlIiwic3Vic2NyaWJlUGFnZSIsImNvbm5lY3Rpb25QYWdlIiwiYWNjb3VudFBhZ2UiLCJxdWVzdGlvbm5haXJ
|