Skip to content

Instantly share code, notes, and snippets.

@sgwilym
Last active October 23, 2015 13:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sgwilym/53922626ac3c8ffb3f29 to your computer and use it in GitHub Desktop.
Save sgwilym/53922626ac3c8ffb3f29 to your computer and use it in GitHub Desktop.
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