aboutsummaryrefslogtreecommitdiff
path: root/src/modules/users.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/modules/users.js')
-rw-r--r--src/modules/users.js68
1 files changed, 45 insertions, 23 deletions
diff --git a/src/modules/users.js b/src/modules/users.js
index 7b41fab6..b8f49f15 100644
--- a/src/modules/users.js
+++ b/src/modules/users.js
@@ -2,7 +2,7 @@ import backendInteractorService from '../services/backend_interactor_service/bac
import { windowWidth, windowHeight } from '../services/window_utils/window_utils'
import oauthApi from '../services/new_api/oauth.js'
import { compact, map, each, mergeWith, last, concat, uniq, isArray } from 'lodash'
-import { registerPushNotifications, unregisterPushNotifications } from '../services/push/push.js'
+import { registerPushNotifications, unregisterPushNotifications } from '../services/sw/sw.js'
// TODO: Unify with mergeOrAdd in statuses.js
export const mergeOrAdd = (arr, obj, item) => {
@@ -250,6 +250,7 @@ export const mutations = {
signUpPending (state) {
state.signUpPending = true
state.signUpErrors = []
+ state.signUpNotice = {}
},
signUpSuccess (state) {
state.signUpPending = false
@@ -257,6 +258,12 @@ export const mutations = {
signUpFailure (state, errors) {
state.signUpPending = false
state.signUpErrors = errors
+ state.signUpNotice = {}
+ },
+ signUpNotice (state, notice) {
+ state.signUpPending = false
+ state.signUpErrors = []
+ state.signUpNotice = notice
}
}
@@ -287,6 +294,7 @@ export const defaultState = {
usersByNameObject: {},
signUpPending: false,
signUpErrors: [],
+ signUpNotice: {},
relationships: {}
}
@@ -498,7 +506,7 @@ const users = {
store.commit('addNewUsers', users)
store.commit('addNewUsers', targetUsers)
- const notificationsObject = store.rootState.statuses.notifications.idStore
+ const notificationsObject = store.rootState.notifications.idStore
const relevantNotifications = Object.entries(notificationsObject)
.filter(([k, val]) => notificationIds.includes(k))
.map(([k, val]) => val)
@@ -524,9 +532,16 @@ const users = {
const data = await rootState.api.backendInteractor.register(
{ params: { ...userInfo } }
)
- store.commit('signUpSuccess')
- store.commit('setToken', data.access_token)
- store.dispatch('loginUser', data.access_token)
+
+ if (data.access_token) {
+ store.commit('signUpSuccess')
+ store.commit('setToken', data.access_token)
+ store.dispatch('loginUser', data.access_token)
+ return 'ok'
+ } else { // Request succeeded, but user cannot login yet.
+ store.commit('signUpNotice', data)
+ return 'request_sent'
+ }
} catch (e) {
const errors = e.message
store.commit('signUpFailure', errors)
@@ -577,6 +592,7 @@ const users = {
loginUser (store, accessToken) {
return new Promise((resolve, reject) => {
const commit = store.commit
+ const dispatch = store.dispatch
commit('beginLogin')
store.rootState.api.backendInteractor.verifyCredentials(accessToken)
.then((data) => {
@@ -591,57 +607,57 @@ const users = {
commit('setServerSideStorage', user)
commit('addNewUsers', [user])
- store.dispatch('fetchEmoji')
+ dispatch('fetchEmoji')
getNotificationPermission()
.then(permission => commit('setNotificationPermission', permission))
// Set our new backend interactor
commit('setBackendInteractor', backendInteractorService(accessToken))
- store.dispatch('pushServerSideStorage')
+ dispatch('pushServerSideStorage')
if (user.token) {
- store.dispatch('setWsToken', user.token)
+ dispatch('setWsToken', user.token)
// Initialize the shout socket.
- store.dispatch('initializeSocket')
+ dispatch('initializeSocket')
}
const startPolling = () => {
// Start getting fresh posts.
- store.dispatch('startFetchingTimeline', { timeline: 'friends' })
+ dispatch('startFetchingTimeline', { timeline: 'friends' })
// Start fetching notifications
- store.dispatch('startFetchingNotifications')
+ dispatch('startFetchingNotifications')
// Start fetching chats
- store.dispatch('startFetchingChats')
+ dispatch('startFetchingChats')
}
- store.dispatch('startFetchingLists')
+ dispatch('startFetchingLists')
if (user.locked) {
- store.dispatch('startFetchingFollowRequests')
+ dispatch('startFetchingFollowRequests')
}
if (store.getters.mergedConfig.useStreamingApi) {
- store.dispatch('fetchTimeline', { timeline: 'friends', since: null })
- store.dispatch('fetchNotifications', { since: null })
- store.dispatch('enableMastoSockets', true).catch((error) => {
+ dispatch('fetchTimeline', { timeline: 'friends', since: null })
+ dispatch('fetchNotifications', { since: null })
+ dispatch('enableMastoSockets', true).catch((error) => {
console.error('Failed initializing MastoAPI Streaming socket', error)
}).then(() => {
- store.dispatch('fetchChats', { latest: true })
- setTimeout(() => store.dispatch('setNotificationsSilence', false), 10000)
+ dispatch('fetchChats', { latest: true })
+ setTimeout(() => dispatch('setNotificationsSilence', false), 10000)
})
} else {
startPolling()
}
// Get user mutes
- store.dispatch('fetchMutes')
+ dispatch('fetchMutes')
- store.dispatch('setLayoutWidth', windowWidth())
- store.dispatch('setLayoutHeight', windowHeight())
+ dispatch('setLayoutWidth', windowWidth())
+ dispatch('setLayoutHeight', windowHeight())
// Fetch our friends
store.rootState.api.backendInteractor.fetchFriends({ id: user.id })
@@ -650,6 +666,12 @@ const users = {
const response = data.error
// Authentication failed
commit('endLogin')
+
+ // remove authentication token on client/authentication errors
+ if ([400, 401, 403, 422].includes(response.status)) {
+ commit('clearToken')
+ }
+
if (response.status === 401) {
reject(new Error('Wrong username or password'))
} else {
@@ -660,7 +682,7 @@ const users = {
resolve()
})
.catch((error) => {
- console.log(error)
+ console.error(error)
commit('endLogin')
reject(new Error('Failed to connect to server, try again'))
})