[#89] Fix error handling of fetch
API
fixes #89 Signed-off-by: Knut Ahlers <knut@ahlers.me>
This commit is contained in:
parent
1a24fbaba6
commit
f0fd162b4e
1 changed files with 45 additions and 27 deletions
72
src/app.vue
72
src/app.vue
|
@ -260,16 +260,25 @@ export default {
|
||||||
},
|
},
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
})
|
})
|
||||||
.then(resp => resp.json())
|
|
||||||
.then(data => ({ data }))
|
|
||||||
.then(resp => {
|
.then(resp => {
|
||||||
this.secretId = resp.data.secret_id
|
if (resp.status !== 201) {
|
||||||
this.secret = ''
|
// Server says "no"
|
||||||
|
this.error = this.$t('alert-something-went-wrong')
|
||||||
|
this.showError = true
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// Give the interface a moment to transistion and focus
|
resp.json()
|
||||||
window.setTimeout(() => this.$refs.secretUrl.focus(), 100)
|
.then(data => {
|
||||||
|
this.secretId = data.secret_id
|
||||||
|
this.secret = ''
|
||||||
|
|
||||||
|
// Give the interface a moment to transistion and focus
|
||||||
|
window.setTimeout(() => this.$refs.secretUrl.focus(), 100)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
.catch(err => {
|
.catch(err => {
|
||||||
|
// Network error
|
||||||
this.error = this.$t('alert-something-went-wrong')
|
this.error = this.$t('alert-something-went-wrong')
|
||||||
this.showError = true
|
this.showError = true
|
||||||
}))
|
}))
|
||||||
|
@ -300,34 +309,43 @@ export default {
|
||||||
// requestSecret requests the encrypted secret from the backend
|
// requestSecret requests the encrypted secret from the backend
|
||||||
requestSecret() {
|
requestSecret() {
|
||||||
fetch(`api/get/${this.secretId}`)
|
fetch(`api/get/${this.secretId}`)
|
||||||
.then(resp => resp.json())
|
|
||||||
.then(data => ({ data }))
|
|
||||||
.then(resp => {
|
.then(resp => {
|
||||||
const secret = resp.data.secret
|
if (resp.status === 404) {
|
||||||
if (!this.securePassword) {
|
// Secret has already been consumed
|
||||||
this.secret = secret
|
this.error = this.$t('alert-secret-not-found')
|
||||||
|
this.showError = true
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
crypto.dec(secret, this.securePassword)
|
if (resp.status !== 200) {
|
||||||
.then(secret => {
|
// Some other non-200: Something(tm) was wrong
|
||||||
this.secret = secret
|
this.error = this.$t('alert-something-went-wrong')
|
||||||
})
|
this.showError = true
|
||||||
.catch(() => {
|
return
|
||||||
this.error = this.$t('alert-something-went-wrong')
|
}
|
||||||
this.showError = true
|
|
||||||
|
resp.json()
|
||||||
|
.then(data => {
|
||||||
|
const secret = data.secret
|
||||||
|
if (!this.securePassword) {
|
||||||
|
this.secret = secret
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
crypto.dec(secret, this.securePassword)
|
||||||
|
.then(secret => {
|
||||||
|
this.secret = secret
|
||||||
|
})
|
||||||
|
.catch(() => {
|
||||||
|
this.error = this.$t('alert-something-went-wrong')
|
||||||
|
this.showError = true
|
||||||
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
.catch(err => {
|
.catch(err => {
|
||||||
switch (err.response.status) {
|
// Network error
|
||||||
case 404:
|
this.error = this.$t('alert-something-went-wrong')
|
||||||
this.error = this.$t('alert-secret-not-found')
|
this.showError = true
|
||||||
this.showError = true
|
|
||||||
break
|
|
||||||
default:
|
|
||||||
this.error = this.$t('alert-something-went-wrong')
|
|
||||||
this.showError = true
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in a new issue