Last active
October 23, 2015 13:45
-
-
Save sgwilym/53922626ac3c8ffb3f29 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import Relay from 'react-relay'; | |
import request from 'superagent'; | |
var savedHeaders; | |
try { | |
savedHeaders = JSON.parse(localStorage.getItem('SAVED_CREDS_KEY')); | |
} catch(err) { | |
savedHeaders = null; | |
}; | |
const defaultLayerInit = { | |
headers: savedHeaders | |
} | |
const defaultLayer = new Relay.DefaultNetworkLayer(`${ENV.apiUrl}/graphql`, defaultLayerInit); | |
const AuthNetworkLayer = { | |
// Private variables for authorisation | |
_authUrl: ENV.authUrl, | |
_tokenFormat: { | |
'access-token': '{{ access-token }}', | |
'token-type': 'Bearer', | |
client: '{{ client }}', | |
expiry: '{{ expiry }}', | |
uid: '{{ uid }}' | |
}, | |
_headers: savedHeaders, | |
// Auth methods for interfacing with devise_token_auth | |
_updateAuthCredentials(headers) { | |
// Create new headers | |
var newHeaders = {}; | |
for (let key in this._tokenFormat) { | |
newHeaders[key] = headers[key]; | |
} | |
this._headers = newHeaders; | |
this._init['headers'] = newHeaders; | |
// Persist the data in cookies / localStorage | |
localStorage.setItem('SAVED_CREDS_KEY', JSON.stringify(newHeaders)); | |
}, | |
_clearAuthCredentials() { | |
this._headers = {}; | |
this._init['headers'] = {}; | |
try { | |
localStorage.removeItem('SAVED_CREDS_KEY'); | |
} catch(err) { | |
this._headers = null; | |
} | |
}, | |
validateToken() { | |
return new Promise((resolve, reject) => { | |
if (this._headers) { | |
request.get(`${this._authUrl}/validate_token`) | |
.set(this._headers) | |
.end((err, res) => { | |
if (err) { | |
this._clearAuthCredentials(); | |
reject(err); | |
} else { | |
this._updateAuthCredentials(res.headers); | |
resolve(res); | |
} | |
}); | |
} else { | |
reject('No saved tokens'); | |
} | |
}); | |
}, | |
signUp(params) { | |
return new Promise((resolve, reject) => { | |
request.post(`${this._authUrl}`) | |
.send(params) | |
.end((err, res) => { | |
if (err) { | |
reject(res); | |
} else { | |
resolve(res); | |
} | |
}) | |
}) | |
}, | |
logIn(params) { | |
return new Promise((resolve, reject) => { | |
request.post(`${this._authUrl}/sign_in`) | |
.set('Content-Type', 'application/json') | |
.send(params) | |
.end((err, res) => { | |
if (err) { | |
reject(res); | |
} else { | |
this._updateAuthCredentials(res.headers); | |
resolve(res); | |
} | |
}) | |
}); | |
}, | |
logOut(params) { | |
return new Promise((resolve, reject) => { | |
request.del(`${this._authUrl}/sign_out`) | |
.set(this._headers) | |
.end((err, res) => { | |
if (err) { | |
reject(res); | |
} else { | |
this._clearAuthCredentials; | |
resolve(res); | |
} | |
}) | |
}) | |
}, | |
updatePassword(params) { | |
return new Promise((resolve, reject) => { | |
request.put(`${this._authUrl}/password`) | |
.set(this._headers) | |
.send(params) | |
.end((err, res) => { | |
if (err) { | |
reject(res); | |
} else { | |
this._updateAuthCredentials(res.headers); | |
resolve(res); | |
} | |
}) | |
}); | |
}, | |
...defaultLayer, | |
sendQueries(requests) { | |
return defaultLayer.sendQueries(requests); | |
} | |
} | |
export default AuthNetworkLayer; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment