From f35dbaf064cfe14ee26053a729ae1c31b76800e2 Mon Sep 17 00:00:00 2001 From: Lambda Date: Wed, 26 Dec 2018 14:50:48 +0100 Subject: [PATCH] Treat reserved users like external users in the frontend. --- src/boot/after_store.js | 2 ++ src/components/chat_panel/chat_panel.js | 2 +- src/components/notification/notification.js | 2 +- src/components/status/status.js | 2 +- src/components/user_card/user_card.js | 2 +- src/components/user_card_content/user_card_content.js | 2 +- .../who_to_follow_panel/who_to_follow_panel.js | 2 +- src/modules/instance.js | 1 + .../user_profile_link_generator.js | 9 ++++++--- .../user_profile_link_generator.spec.js | 6 ++++++ 10 files changed, 21 insertions(+), 9 deletions(-) diff --git a/src/boot/after_store.js b/src/boot/after_store.js index 5b9e5c96..e716082a 100644 --- a/src/boot/after_store.js +++ b/src/boot/after_store.js @@ -165,6 +165,8 @@ const afterStoreSetup = ({ store, i18n }) => { store.dispatch('setInstanceOption', { name: 'chatAvailable', value: features.includes('chat') }) store.dispatch('setInstanceOption', { name: 'gopherAvailable', value: features.includes('gopher') }) + store.dispatch('setInstanceOption', { name: 'restrictedNicknames', value: metadata.restrictedNicknames }) + const suggestions = metadata.suggestions store.dispatch('setInstanceOption', { name: 'suggestionsEnabled', value: suggestions.enabled }) store.dispatch('setInstanceOption', { name: 'suggestionsWeb', value: suggestions.web }) diff --git a/src/components/chat_panel/chat_panel.js b/src/components/chat_panel/chat_panel.js index e175e90c..8db12abb 100644 --- a/src/components/chat_panel/chat_panel.js +++ b/src/components/chat_panel/chat_panel.js @@ -22,7 +22,7 @@ const chatPanel = { this.collapsed = !this.collapsed }, userProfileLink (user) { - return generateProfileLink(user.id, user.screen_name) + return generateProfileLink(user.id, user.screen_name, this.$store.state.instance.restrictedNicknames) } } } diff --git a/src/components/notification/notification.js b/src/components/notification/notification.js index 9ab870b6..e83b2263 100644 --- a/src/components/notification/notification.js +++ b/src/components/notification/notification.js @@ -23,7 +23,7 @@ const Notification = { this.userExpanded = !this.userExpanded }, userProfileLink (user) { - return generateProfileLink(user.id, user.screen_name) + return generateProfileLink(user.id, user.screen_name, this.$store.state.instance.restrictedNicknames) } }, computed: { diff --git a/src/components/status/status.js b/src/components/status/status.js index e683056f..d4eb0d60 100644 --- a/src/components/status/status.js +++ b/src/components/status/status.js @@ -291,7 +291,7 @@ const Status = { this.showPreview = false }, userProfileLink (id, name) { - return generateProfileLink(id, name) + return generateProfileLink(id, name, this.$store.state.instance.restrictedNicknames) } }, watch: { diff --git a/src/components/user_card/user_card.js b/src/components/user_card/user_card.js index f0fff335..615e6487 100644 --- a/src/components/user_card/user_card.js +++ b/src/components/user_card/user_card.js @@ -33,7 +33,7 @@ const UserCard = { this.$store.dispatch('removeFollowRequest', this.user) }, userProfileLink (user) { - return generateProfileLink(user.id, user.screen_name) + return generateProfileLink(user.id, user.screen_name, this.$store.state.instance.restrictedNicknames) } } } diff --git a/src/components/user_card_content/user_card_content.js b/src/components/user_card_content/user_card_content.js index 75185053..6d9b3c2f 100644 --- a/src/components/user_card_content/user_card_content.js +++ b/src/components/user_card_content/user_card_content.js @@ -180,7 +180,7 @@ export default { } }, userProfileLink (user) { - return generateProfileLink(user.id, user.screen_name) + return generateProfileLink(user.id, user.screen_name, this.$store.state.instance.restrictedNicknames) } } } diff --git a/src/components/who_to_follow_panel/who_to_follow_panel.js b/src/components/who_to_follow_panel/who_to_follow_panel.js index b2183e6d..eaeb527a 100644 --- a/src/components/who_to_follow_panel/who_to_follow_panel.js +++ b/src/components/who_to_follow_panel/who_to_follow_panel.js @@ -62,7 +62,7 @@ const WhoToFollowPanel = { }, methods: { userProfileLink (id, name) { - return generateProfileLink(id, name) + return generateProfileLink(id, name, this.$store.state.instance.restrictedNicknames) } }, watch: { diff --git a/src/modules/instance.js b/src/modules/instance.js index ab88306f..093bfd0f 100644 --- a/src/modules/instance.js +++ b/src/modules/instance.js @@ -32,6 +32,7 @@ const defaultState = { pleromaBackend: true, emoji: [], customEmoji: [], + restrictedNicknames: [], // Feature-set, apparently, not everything here is reported... mediaProxyAvailable: false, diff --git a/src/services/user_profile_link_generator/user_profile_link_generator.js b/src/services/user_profile_link_generator/user_profile_link_generator.js index 3367eb8a..bca2c9cd 100644 --- a/src/services/user_profile_link_generator/user_profile_link_generator.js +++ b/src/services/user_profile_link_generator/user_profile_link_generator.js @@ -1,7 +1,10 @@ -const generateProfileLink = (id, screenName) => { +import { includes } from 'lodash' + +const generateProfileLink = (id, screenName, restrictedNicknames) => { + const complicated = (isExternal(screenName) || includes(restrictedNicknames, screenName)) return { - name: (isExternal(screenName) ? 'external-user-profile' : 'user-profile'), - params: (isExternal(screenName) ? { id } : { name: screenName }) + name: (complicated ? 'external-user-profile' : 'user-profile'), + params: (complicated ? { id } : { name: screenName }) } } diff --git a/test/unit/specs/services/user_profile_link_generator/user_profile_link_generator.spec.js b/test/unit/specs/services/user_profile_link_generator/user_profile_link_generator.spec.js index 4366f799..8c7a2895 100644 --- a/test/unit/specs/services/user_profile_link_generator/user_profile_link_generator.spec.js +++ b/test/unit/specs/services/user_profile_link_generator/user_profile_link_generator.spec.js @@ -12,4 +12,10 @@ describe('generateProfileLink', () => { name: 'external-user-profile', params: { id: 1 } }) }) + + it('returns obj for restricted user', () => { + expect(generateProfileLink(1, 'lain', ['lain'])).to.eql({ + name: 'external-user-profile', params: { id: 1 } + }) + }) })