From cb8bd64636f4774fe85e2d4d6cbb8f89e108e25b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timoth=C3=A9e=20Poussard?= <tpoussard@neogeo.fr> Date: Mon, 6 Dec 2021 17:53:40 +0100 Subject: [PATCH] hide login button & change redirection according to conf --- public/config/config.json | 2 ++ src/App.vue | 71 ++++++++++++++++++++++++--------------- src/store/index.js | 33 +++--------------- 3 files changed, 51 insertions(+), 55 deletions(-) diff --git a/public/config/config.json b/public/config/config.json index f8f8e583..d6c92bb1 100644 --- a/public/config/config.json +++ b/public/config/config.json @@ -9,6 +9,8 @@ "VUE_APP_LOGO_PATH":"/geocontrib/img/logo-neogeo-circle.png", "VUE_APP_DJANGO_BASE":"http://localhost:8010", "VUE_APP_DJANGO_API_BASE":"http://localhost:8010/api/", + "VUE_APP_DISABLE_LOGIN_BUTTON":false, + "VUE_APP_LOGIN_URL":"", "DEFAULT_BASE_MAP":{ "SERVICE": "https://{s}.tile.openstreetmap.fr/osmfr/{z}/{x}/{y}.png", "OPTIONS": { diff --git a/src/App.vue b/src/App.vue index 6318200d..b356b5c0 100644 --- a/src/App.vue +++ b/src/App.vue @@ -88,24 +88,30 @@ {{ userFullname || user.username || "Utilisateur inconnu" }} </router-link> <div - v-if="user && user.is_administrator" + v-if="USER_LEVEL_PROJECTS && project" class="item ui label vertical no-hover" > - <span v-if="USER_LEVEL_PROJECTS && project"> - {{ USER_LEVEL_PROJECTS[project.slug] }}</span - > + {{ USER_LEVEL_PROJECTS[project.slug] }} <br /> - <span v-if="user.is_administrator"> - Gestionnaire métier - </span> </div> - <!-- // todo : find out SSO_SETTED in django --> - <a v-if="user && !SSO_SETTED" @click="logout" class="item" - ><i class="ui logout icon"></i> - </a> - <router-link v-else-if="!user" to="/connexion/" class="item" - >Se Connecter</router-link + <div + v-if="user && user.is_administrator" + class="item ui label vertical no-hover" > + Gestionnaire métier + </div> + <div v-frag v-if="!DISABLE_LOGIN_BUTTON"> + <a v-if="user" @click="logout" class="item" + ><i class="ui logout icon"></i> + </a> + <router-link + v-else-if="!user && !SSO_LOGIN_URL" + to="/connexion/" + class="item" + >Se connecter</router-link + > + <a v-else class="item" :href="SSO_LOGIN_URL">Se connecter</a> + </div> </div> </div> </div> @@ -115,22 +121,30 @@ {{ userFullname || user.username || "Utilisateur inconnu" }} </router-link> <div - v-if="user || user.is_administrator" + v-if="USER_LEVEL_PROJECTS && project" class="item ui label vertical no-hover" > - <span v-if="USER_LEVEL_PROJECTS && project"> - {{ USER_LEVEL_PROJECTS[project.slug] }}</span - > + {{ USER_LEVEL_PROJECTS[project.slug] }} <br /> - <span v-if="user.is_administrator"> Gestionnaire métier </span> </div> - <!-- // todo : find out SSO_SETTED in django --> - <a v-if="user && !SSO_SETTED" @click="logout" class="item" - ><i class="ui logout icon"></i> - </a> - <router-link v-else-if="!user" to="/connexion/" class="item" - >Se Connecter</router-link + <div + v-if="user && user.is_administrator" + class="item ui label vertical no-hover" > + Gestionnaire métier + </div> + <div v-frag v-if="!DISABLE_LOGIN_BUTTON"> + <a v-if="user" @click="logout" class="item" + ><i class="ui logout icon"></i> + </a> + <router-link + v-else-if="!user && !SSO_LOGIN_URL" + to="/connexion/" + class="item" + >Se Connecter</router-link + > + <a v-else class="item" :href="SSO_LOGIN_URL">Se connecter</a> + </div> </div> </div> </div> @@ -200,7 +214,6 @@ export default { ...mapState([ "projects", "user", - "SSO_SETTED", "USER_LEVEL_PROJECTS", "configuration", "messages", @@ -210,6 +223,12 @@ export default { APPLICATION_NAME() { return this.configuration.VUE_APP_APPLICATION_NAME; }, + DISABLE_LOGIN_BUTTON() { + return this.configuration.VUE_APP_DISABLE_LOGIN_BUTTON; + }, + SSO_LOGIN_URL() { + return this.configuration.VUE_APP_LOGIN_URL; + }, PACKAGE_VERSION: () => process.env.PACKAGE_VERSION || "0", logo() { return this.configuration.VUE_APP_LOGO_PATH; @@ -306,8 +325,6 @@ footer { } .menu.container { width: auto !important; - margin-left: 1em !important; - margin-right: 1em !important; } .push-right-desktop { margin-left: auto; diff --git a/src/store/index.js b/src/store/index.js index bc5b7567..650578b9 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -6,27 +6,8 @@ import feature_type from "./modules/feature_type" import feature from "./modules/feature" import map from "./modules/map" -// axios.defaults.headers.common['X-CSRFToken'] = (name => { -// var re = new RegExp(name + "=([^;]+)"); -// var value = re.exec(document.cookie); -// return (value !== null) ? unescape(value[1]) : null; -// })('csrftoken'); - - Vue.use(Vuex); - -// axios.defaults.withCredentials = true; // * add cookies to axios -// function updateAxiosHeader() { -// axios.defaults.headers.common['X-CSRFToken'] = (name => { -// var re = new RegExp(name + "=([^;]+)"); -// var value = re.exec(document.cookie); -// return (value !== null) ? unescape(value[1]) : null; -// })('csrftoken'); -// } -// // ! À vérifier s'il y a un changement de token pendant l'éxécution de l'appli -// updateAxiosHeader(); - const noPermissions = { "can_view_project": true, "can_create_project": false, "can_update_project": false, "can_view_feature": true, "can_view_archived_feature": true, "can_create_feature": false, "can_update_feature": false, "can_delete_feature": false, "can_publish_feature": false, "can_create_feature_type": false, "can_view_feature_type": true, "is_project_administrator": false } export default new Vuex.Store({ @@ -43,7 +24,6 @@ export default new Vuex.Store({ projects: [], last_comments: [], staticPages: null, - SSO_SETTED: false, USER_LEVEL_PROJECTS: null, user_permissions: null, levelsPermissions: [], @@ -81,9 +61,6 @@ export default new Vuex.Store({ SET_STATIC_PAGES(state, staticPages) { state.staticPages = staticPages; }, - SET_SSO(state, SSO_SETTED) { - state.SSO_SETTED = SSO_SETTED; - }, SET_USER_LEVEL_PROJECTS(state, USER_LEVEL_PROJECTS) { state.USER_LEVEL_PROJECTS = USER_LEVEL_PROJECTS; }, @@ -124,7 +101,7 @@ export default new Vuex.Store({ SET_CANCELLABLE_SEARCH_REQUEST(state, payload) { state.cancellableSearchRequest.push(payload); }, - + RESET_CANCELLABLE_SEARCH_REQUEST(state) { state.cancellableSearchRequest = []; }, @@ -202,11 +179,13 @@ export default new Vuex.Store({ if (response && response.status === 200) { const user = response.data.user; commit("SET_USER", user); - //window.localStorage.setItem("user", JSON.stringify(user)); // ? nécessaire ? } }) .catch(() => { - router.push({ name: "login" }); + //* if an url to redirect to an external authentification system is present, do not redirect to the login page + if (!state.configuration.VUE_APP_LOGIN_URL) { + router.push({ name: "login" }); + } }); } }, @@ -229,7 +208,6 @@ export default new Vuex.Store({ }, LOGOUT({ commit, dispatch }) { - // const pageNoRedirect = ["liste-signalements", "details-type-signalement", "details-signalement", "project_detail", "mentions", "aide", "index"] axios .get(`${this.state.configuration.VUE_APP_DJANGO_API_BASE}logout/`) .then((response) => { @@ -237,7 +215,6 @@ export default new Vuex.Store({ commit("SET_USER", false); commit("SET_USER_LEVEL_PROJECTS", null); dispatch("GET_USER_LEVEL_PERMISSIONS"); - // if (!pageNoRedirect.includes(router.history.current.name)) router.push("/"); if (router.history.current.name !== "index") router.push("/"); } }) -- GitLab