From c9755bee7ca912ff34466ba3a53e08be66e11019 Mon Sep 17 00:00:00 2001 From: Jim Pollaro <30908497+pollaro@users.noreply.github.com> Date: Thu, 12 Jul 2018 15:07:08 -0500 Subject: [PATCH 01/15] Logout Changes #9915 (#10022) * Added session check before route changes, but express isn't finding route * Added a logout component. Changed route to logout on server. Typing 'logout' in URL will logout of Vue + Express * Removed commented text from previous version * Updated logout function to comply with formatting and eliminate unused blocks * Added package-lock.json back * package-lock.json * recreated package-lock file * fix(auth): allow logout from direct visit to /logout path * fix(merge): clean up more misc changes * fix(merge): remove extra file --- webpack/config/index.js | 2 +- website/client/components/auth/logout.vue | 13 +++++++++++++ website/client/router.js | 2 ++ website/client/store/actions/auth.js | 2 +- website/server/controllers/top-level/auth.js | 4 ++-- 5 files changed, 19 insertions(+), 4 deletions(-) create mode 100644 website/client/components/auth/logout.vue diff --git a/webpack/config/index.js b/webpack/config/index.js index 463e6f3028..35fa37adc8 100644 --- a/webpack/config/index.js +++ b/webpack/config/index.js @@ -62,7 +62,7 @@ module.exports = { target: DEV_BASE_URL, changeOrigin: true, }, - '/logout': { + '/logout-server': { target: DEV_BASE_URL, changeOrigin: true, }, diff --git a/website/client/components/auth/logout.vue b/website/client/components/auth/logout.vue new file mode 100644 index 0000000000..b826794272 --- /dev/null +++ b/website/client/components/auth/logout.vue @@ -0,0 +1,13 @@ + diff --git a/website/client/router.js b/website/client/router.js index bd74858d2c..6368e39744 100644 --- a/website/client/router.js +++ b/website/client/router.js @@ -27,6 +27,7 @@ const PrivacyPage = () => import(/* webpackChunkName: "static" */'./components/s const TermsPage = () => import(/* webpackChunkName: "static" */'./components/static/terms'); const RegisterLoginReset = () => import(/* webpackChunkName: "auth" */'./components/auth/registerLoginReset'); +const Logout = () => import(/* webpackChunkName: "auth" */'./components/auth/logout'); // User Pages // const StatsPage = () => import(/* webpackChunkName: "user" */'./components/userMenu/stats'); @@ -105,6 +106,7 @@ const router = new VueRouter({ routes: [ { name: 'register', path: '/register', component: RegisterLoginReset, meta: {requiresLogin: false} }, { name: 'login', path: '/login', component: RegisterLoginReset, meta: {requiresLogin: false} }, + { name: 'logout', path: '/logout', component: Logout }, { name: 'resetPassword', path: '/reset-password', component: RegisterLoginReset, meta: {requiresLogin: false} }, { name: 'tasks', path: '/', component: UserTasks }, { diff --git a/website/client/store/actions/auth.js b/website/client/store/actions/auth.js index d5f8ebb618..02fd27d286 100644 --- a/website/client/store/actions/auth.js +++ b/website/client/store/actions/auth.js @@ -68,5 +68,5 @@ export async function socialAuth (store, params) { export function logout () { localStorage.removeItem(LOCALSTORAGE_AUTH_KEY); localStorage.removeItem(LOCALSTORAGE_SOCIAL_AUTH_KEY); - window.location.href = '/logout'; + window.location.href = '/logout-server'; } diff --git a/website/server/controllers/top-level/auth.js b/website/server/controllers/top-level/auth.js index bfda8ab7e2..f7fd76fe2b 100644 --- a/website/server/controllers/top-level/auth.js +++ b/website/server/controllers/top-level/auth.js @@ -5,7 +5,7 @@ let api = {}; // Internal authentication routes // Set a new password after having requested a password reset (GET route to input password) -api.resetPasswordSetNewOne = { +api.resetPasswordSetNewOne = { method: 'GET', url: '/static/user/auth/local/reset-password-set-new-one', runCron: false, @@ -24,7 +24,7 @@ api.resetPasswordSetNewOne = { // Logout the user from the website. api.logout = { method: 'GET', - url: '/logout', + url: '/logout-server', async handler (req, res) { if (req.logout) req.logout(); // passportjs method req.session = null; From 535ee2b2a706ac282d8f9ff069b8b1c92cc63ca4 Mon Sep 17 00:00:00 2001 From: Brian Fenton Date: Thu, 12 Jul 2018 15:07:49 -0500 Subject: [PATCH 02/15] Adding hand cursor to FAQ headings, and ability to address answers via URL hash (#10260) * Turning H2s into anchors to add hand cursor and to create addressable page fragments adding ref to target individual entries adding scroll handler to make sure expanded result is in view. * combining click handler directives as per CR * changing question display to always render, then hide via CSS, vs only render when state changes. * updating pug template to include heading in each URL fragment * simplifying logic & moving to vue-bootstrap accordion since multiple open panels is not required * adding pointer cursor to FAQ headings * moving initial hash checking to data prop instead of mounted so it does not trigger oddities on on hash change (re-mount) * using new pug HTML for bootstrap collapse * removing extraneous markup * updating styling to match existing page * removing fancier than necessary markup, and attendant styles * using more standard event property --- website/client/components/static/faq.vue | 50 +++++++++++++++++------- 1 file changed, 35 insertions(+), 15 deletions(-) diff --git a/website/client/components/static/faq.vue b/website/client/components/static/faq.vue index a26e1260cd..e2ce08aa0c 100644 --- a/website/client/components/static/faq.vue +++ b/website/client/components/static/faq.vue @@ -1,18 +1,36 @@ + diff --git a/website/client/components/groups/membersModal.vue b/website/client/components/groups/membersModal.vue index c9ca4ca013..1ce8bc98af 100644 --- a/website/client/components/groups/membersModal.vue +++ b/website/client/components/groups/membersModal.vue @@ -53,6 +53,9 @@ div span.dropdown-icon-item .svg-icon.inline(v-html="icons.removeIcon") span.text {{$t('removeManager2')}} + b-dropdown-item(@click='viewProgress(member)') + span.dropdown-icon-item + span.text {{ $t('viewProgress') }} .row(v-if='isLoadMoreAvailable') .col-12.text-center button.btn.btn-secondary(@click='loadMoreMembers()') {{ $t('loadMore') }} @@ -475,6 +478,11 @@ export default { groupData.leader = member; this.$root.$emit('updatedGroup', groupData); }, + viewProgress (member) { + this.$root.$emit('habitica:challenge:member-progress', { + progressMemberId: member._id, + }); + }, }, }; diff --git a/website/common/locales/en/challenge.json b/website/common/locales/en/challenge.json index 39d0342263..2953470e5f 100644 --- a/website/common/locales/en/challenge.json +++ b/website/common/locales/en/challenge.json @@ -132,6 +132,7 @@ "locationRequired": "Location of challenge is required ('Add to')", "categoiresRequired": "One or more categories must be selected", "viewProgressOf": "View Progress Of", + "viewProgress": "View Progress", "selectMember": "Select Member", "confirmKeepChallengeTasks": "Do you want to keep challenge tasks?", "selectParticipant": "Select a Participant" From 8eac8732c5f7817d81e23ca517676c0760880a7a Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Mon, 16 Jul 2018 12:02:37 +0200 Subject: [PATCH 15/15] fix(tasks): do not load completed todos if not necessary --- website/client/components/tasks/column.vue | 1 + 1 file changed, 1 insertion(+) diff --git a/website/client/components/tasks/column.vue b/website/client/components/tasks/column.vue index 02693cbac3..eef611ca7a 100644 --- a/website/client/components/tasks/column.vue +++ b/website/client/components/tasks/column.vue @@ -450,6 +450,7 @@ export default { if (this.type !== 'todo') return; this.$root.$on('habitica::resync-requested', () => { + if (this.activeFilter.label !== 'complete2') return; this.loadCompletedTodos(true); }); },