diff options
| -rw-r--r-- | src/components/registration/registration.js | 12 | ||||
| -rw-r--r-- | src/components/registration/registration.vue | 13 | ||||
| -rw-r--r-- | src/components/user_card_content/user_card_content.vue | 4 | ||||
| -rw-r--r-- | src/modules/users.js | 4 | ||||
| -rw-r--r-- | src/services/api/api.service.js | 3 | ||||
| -rw-r--r-- | src/services/backend_interactor_service/backend_interactor_service.js | 2 |
6 files changed, 34 insertions, 4 deletions
diff --git a/src/components/registration/registration.js b/src/components/registration/registration.js index 0618ac6c..65b2fb9b 100644 --- a/src/components/registration/registration.js +++ b/src/components/registration/registration.js @@ -11,7 +11,8 @@ const registration = { username: '', password: '', confirm: '' - } + }, + captcha: {} }), validations: { user: { @@ -29,6 +30,8 @@ const registration = { if ((!this.registrationOpen && !this.token) || this.signedIn) { this.$router.push('/~/main/all') } + + this.setCaptcha() }, computed: { token () { return this.$route.params.token }, @@ -41,10 +44,12 @@ const registration = { }) }, methods: { - ...mapActions(['signUp']), + ...mapActions(['signUp', 'getCaptcha']), async submit () { this.user.nickname = this.user.username this.user.token = this.token + this.user.captcha_solution = this.captcha.solution + this.user.captcha_token = this.captcha.token this.$v.$touch() @@ -56,6 +61,9 @@ const registration = { console.warn('Registration failed: ' + error) } } + }, + setCaptcha () { + this.getCaptcha().then(cpt => { this.captcha = cpt }) } } } diff --git a/src/components/registration/registration.vue b/src/components/registration/registration.vue index 8cb1392b..f187e215 100644 --- a/src/components/registration/registration.vue +++ b/src/components/registration/registration.vue @@ -75,6 +75,19 @@ </ul> </div> + <div class="form-group" id="captcha-group" v-if="captcha.type != 'none'"> + <template v-if="captcha.type == 'kocaptcha'"> + <img v-bind:src="captcha.url" v-on:click="setCaptcha"> + + <sub>Click the image to get a new captcha</sub> + <label class='form--label' for='captcha-label'>CAPTCHA</label> + + <input :disabled="isPending" + v-model='captcha.solution' + class='form-control' id='captcha-answer' type='text'> + </template> + </div> + <div class='form-group' v-if='token' > <label for='token'>{{$t('registration.token')}}</label> <input disabled='true' v-model='token' class='form-control' id='token' type='text'> diff --git a/src/components/user_card_content/user_card_content.vue b/src/components/user_card_content/user_card_content.vue index 136bcd6a..ed8bba43 100644 --- a/src/components/user_card_content/user_card_content.vue +++ b/src/components/user_card_content/user_card_content.vue @@ -25,7 +25,7 @@ <div v-if="user.follows_you && loggedIn && isOtherUser" class="following"> {{ $t('user_card.follows_you') }} </div> - <div class="floater" v-if="switcher || isOtherUser"> + <div class="floater" v-if="isOtherUser && (loggedIn || !switcher)"> <!-- id's need to be unique, otherwise vue confuses which user-card checkbox belongs to --> <input class="userHighlightText" type="text" :id="'userHighlightColorTx'+user.id" v-if="userHighlightType !== 'disabled'" v-model="userHighlightColor"/> <input class="userHighlightCl" type="color" :id="'userHighlightColor'+user.id" v-if="userHighlightType !== 'disabled'" v-model="userHighlightColor"/> @@ -67,7 +67,7 @@ </button> </span> </div> - <div class='mute' v-if='isOtherUser'> + <div class='mute' v-if='isOtherUser && loggedIn'> <span v-if='user.muted'> <button @click="toggleMute" class="pressed"> {{ $t('user_card.muted') }} diff --git a/src/modules/users.js b/src/modules/users.js index 25d1c81f..65b172bc 100644 --- a/src/modules/users.js +++ b/src/modules/users.js @@ -142,6 +142,10 @@ const users = { throw Error(errors) } }, + async getCaptcha (store) { + return await store.rootState.api.backendInteractor.getCaptcha() + }, + logout (store) { store.commit('clearCurrentUser') store.commit('setToken', false) diff --git a/src/services/api/api.service.js b/src/services/api/api.service.js index ae876b7f..b509c905 100644 --- a/src/services/api/api.service.js +++ b/src/services/api/api.service.js @@ -167,6 +167,8 @@ const register = (params) => { }) } +const getCaptcha = () => fetch('/api/pleroma/captcha').then(resp => resp.json()) + const authHeaders = (accessToken) => { if (accessToken) { return { 'Authorization': `Bearer ${accessToken}` } @@ -496,6 +498,7 @@ const apiService = { setUserMute, fetchMutes, register, + getCaptcha, updateAvatar, updateBg, updateProfile, diff --git a/src/services/backend_interactor_service/backend_interactor_service.js b/src/services/backend_interactor_service/backend_interactor_service.js index c84373ac..cc72f607 100644 --- a/src/services/backend_interactor_service/backend_interactor_service.js +++ b/src/services/backend_interactor_service/backend_interactor_service.js @@ -71,6 +71,7 @@ const backendInteractorService = (credentials) => { const fetchMutes = () => apiService.fetchMutes({credentials}) const fetchFollowRequests = () => apiService.fetchFollowRequests({credentials}) + const getCaptcha = () => apiService.getCaptcha() const register = (params) => apiService.register(params) const updateAvatar = ({params}) => apiService.updateAvatar({credentials, params}) const updateBg = ({params}) => apiService.updateBg({credentials, params}) @@ -100,6 +101,7 @@ const backendInteractorService = (credentials) => { setUserMute, fetchMutes, register, + getCaptcha, updateAvatar, updateBg, updateBanner, |
