Fix register error handling, and client json parsing
This commit is contained in:
parent
c0f8f1288f
commit
0450a03971
4 changed files with 31 additions and 21 deletions
|
@ -94,7 +94,7 @@ func (a *App) RegisterUser(username string, email string, password string) error
|
||||||
var err error
|
var err error
|
||||||
user, err = a.store.GetUserByUsername(username)
|
user, err = a.store.GetUserByUsername(username)
|
||||||
if err == nil && user != nil {
|
if err == nil && user != nil {
|
||||||
return errors.Wrap(err, "The username already exists")
|
return errors.New("The username already exists")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -102,7 +102,7 @@ func (a *App) RegisterUser(username string, email string, password string) error
|
||||||
var err error
|
var err error
|
||||||
user, err = a.store.GetUserByEmail(email)
|
user, err = a.store.GetUserByEmail(email)
|
||||||
if err == nil && user != nil {
|
if err == nil && user != nil {
|
||||||
return errors.Wrap(err, "The email already exists")
|
return errors.New("The email already exists")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -65,11 +65,11 @@ export default class App extends React.PureComponent<unknown, State> {
|
||||||
<Route path='/register'>
|
<Route path='/register'>
|
||||||
<RegisterPage/>
|
<RegisterPage/>
|
||||||
</Route>
|
</Route>
|
||||||
<Route path='/'>
|
<Route path='/board'>
|
||||||
{this.state.initialLoad && !this.state.user && <Redirect to='login'/>}
|
{this.state.initialLoad && !this.state.user && <Redirect to='login'/>}
|
||||||
<BoardPage setLanguage={this.setAndStoreLanguage}/>
|
<BoardPage setLanguage={this.setAndStoreLanguage}/>
|
||||||
</Route>
|
</Route>
|
||||||
<Route path='/board'>
|
<Route path='/'>
|
||||||
{this.state.initialLoad && !this.state.user && <Redirect to='login'/>}
|
{this.state.initialLoad && !this.state.user && <Redirect to='login'/>}
|
||||||
<BoardPage setLanguage={this.setAndStoreLanguage}/>
|
<BoardPage setLanguage={this.setAndStoreLanguage}/>
|
||||||
</Route>
|
</Route>
|
||||||
|
|
|
@ -24,6 +24,15 @@ class OctoClient {
|
||||||
Utils.log(`OctoClient serverUrl: ${this.serverUrl}`)
|
Utils.log(`OctoClient serverUrl: ${this.serverUrl}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async getJson(response: Response, defaultValue: any = {}): Promise<any> {
|
||||||
|
// The server may return null or malformed json
|
||||||
|
try {
|
||||||
|
return await response.json()
|
||||||
|
} catch {
|
||||||
|
return defaultValue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async login(username: string, password: string): Promise<boolean> {
|
async login(username: string, password: string): Promise<boolean> {
|
||||||
const path = '/api/v1/login'
|
const path = '/api/v1/login'
|
||||||
const body = JSON.stringify({username, password, type: 'normal'})
|
const body = JSON.stringify({username, password, type: 'normal'})
|
||||||
|
@ -36,7 +45,7 @@ class OctoClient {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
const responseJson = (await response.json() || {}) as {token?: string}
|
const responseJson = (await this.getJson(response)) as {token?: string}
|
||||||
this.token = responseJson.token
|
this.token = responseJson.token
|
||||||
if (responseJson.token !== '') {
|
if (responseJson.token !== '') {
|
||||||
localStorage.setItem('sessionId', this.token || '')
|
localStorage.setItem('sessionId', this.token || '')
|
||||||
|
@ -45,7 +54,7 @@ class OctoClient {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
async register(email: string, username: string, password: string, token?: string): Promise<200 | 401 | 500> {
|
async register(email: string, username: string, password: string, token?: string): Promise<{code: number, json: any}> {
|
||||||
const path = '/api/v1/register'
|
const path = '/api/v1/register'
|
||||||
const body = JSON.stringify({email, username, password, token})
|
const body = JSON.stringify({email, username, password, token})
|
||||||
const response = await fetch(this.serverUrl + path, {
|
const response = await fetch(this.serverUrl + path, {
|
||||||
|
@ -53,10 +62,8 @@ class OctoClient {
|
||||||
headers: this.headers(),
|
headers: this.headers(),
|
||||||
body,
|
body,
|
||||||
})
|
})
|
||||||
if (response.status === 200 || response.status === 401) {
|
const json = (await this.getJson(response))
|
||||||
return response.status
|
return {code: response.status, json}
|
||||||
}
|
|
||||||
return 500
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private headers() {
|
private headers() {
|
||||||
|
@ -73,7 +80,7 @@ class OctoClient {
|
||||||
if (response.status !== 200) {
|
if (response.status !== 200) {
|
||||||
return undefined
|
return undefined
|
||||||
}
|
}
|
||||||
const user = (await response.json()) as IUser
|
const user = (await this.getJson(response)) as IUser
|
||||||
return user
|
return user
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -86,7 +93,7 @@ class OctoClient {
|
||||||
if (response.status !== 200) {
|
if (response.status !== 200) {
|
||||||
return []
|
return []
|
||||||
}
|
}
|
||||||
const blocks = (await response.json() || []) as IMutableBlock[]
|
const blocks = (await this.getJson(response, [])) as IMutableBlock[]
|
||||||
this.fixBlocks(blocks)
|
this.fixBlocks(blocks)
|
||||||
return blocks
|
return blocks
|
||||||
}
|
}
|
||||||
|
@ -97,7 +104,7 @@ class OctoClient {
|
||||||
if (response.status !== 200) {
|
if (response.status !== 200) {
|
||||||
return []
|
return []
|
||||||
}
|
}
|
||||||
const blocks = (await response.json() || []) as IMutableBlock[]
|
const blocks = (await this.getJson(response, [])) as IMutableBlock[]
|
||||||
this.fixBlocks(blocks)
|
this.fixBlocks(blocks)
|
||||||
return blocks
|
return blocks
|
||||||
}
|
}
|
||||||
|
@ -135,7 +142,7 @@ class OctoClient {
|
||||||
if (response.status !== 200) {
|
if (response.status !== 200) {
|
||||||
return []
|
return []
|
||||||
}
|
}
|
||||||
const blocks = (await response.json() || []) as IMutableBlock[]
|
const blocks = (await this.getJson(response, [])) as IMutableBlock[]
|
||||||
this.fixBlocks(blocks)
|
this.fixBlocks(blocks)
|
||||||
return blocks
|
return blocks
|
||||||
}
|
}
|
||||||
|
@ -217,7 +224,7 @@ class OctoClient {
|
||||||
Utils.log(`uploadFile response: ${text}`)
|
Utils.log(`uploadFile response: ${text}`)
|
||||||
const json = JSON.parse(text)
|
const json = JSON.parse(text)
|
||||||
|
|
||||||
// const json = await response.json()
|
// const json = await this.getJson(response)
|
||||||
return json.url
|
return json.url
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
Utils.logError(`uploadFile json ERROR: ${e}`)
|
Utils.logError(`uploadFile json ERROR: ${e}`)
|
||||||
|
@ -237,7 +244,7 @@ class OctoClient {
|
||||||
if (response.status !== 200) {
|
if (response.status !== 200) {
|
||||||
return undefined
|
return undefined
|
||||||
}
|
}
|
||||||
const sharing = (await response.json()) as ISharing
|
const sharing = (await this.getJson(response)) as ISharing
|
||||||
return sharing
|
return sharing
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -267,7 +274,7 @@ class OctoClient {
|
||||||
if (response.status !== 200) {
|
if (response.status !== 200) {
|
||||||
return undefined
|
return undefined
|
||||||
}
|
}
|
||||||
const workspace = (await response.json()) as IWorkspace
|
const workspace = (await this.getJson(response)) as IWorkspace
|
||||||
return workspace
|
return workspace
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -32,16 +32,19 @@ class RegisterPage extends React.PureComponent<Props, State> {
|
||||||
const queryString = new URLSearchParams(window.location.search)
|
const queryString = new URLSearchParams(window.location.search)
|
||||||
const signupToken = queryString.get('t') || ''
|
const signupToken = queryString.get('t') || ''
|
||||||
|
|
||||||
const registered = await client.register(this.state.email, this.state.username, this.state.password, signupToken)
|
const response = await client.register(this.state.email, this.state.username, this.state.password, signupToken)
|
||||||
if (registered === 200) {
|
if (response.code === 200) {
|
||||||
const logged = await client.login(this.state.username, this.state.password)
|
const logged = await client.login(this.state.username, this.state.password)
|
||||||
if (logged) {
|
if (logged) {
|
||||||
this.props.history.push('/')
|
this.props.history.push('/')
|
||||||
|
|
||||||
|
// HACKHACK: react-router-dom seems to require a refresh to navigate correctly
|
||||||
|
// this.setState({email: '', username: '', password: ''})
|
||||||
}
|
}
|
||||||
} else if (registered === 401) {
|
} else if (response.code === 401) {
|
||||||
this.setState({errorMessage: 'Invalid registration link, please contact your administrator'})
|
this.setState({errorMessage: 'Invalid registration link, please contact your administrator'})
|
||||||
} else {
|
} else {
|
||||||
this.setState({errorMessage: 'Server error'})
|
this.setState({errorMessage: response.json.error})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue