Last active
August 29, 2015 14:21
-
-
Save axwaxw/cfee49f30efd35f982b4 to your computer and use it in GitHub Desktop.
OnePageCRM Login and Request process for Meteor
This file contains hidden or 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
// REQUIRES MOMENT | |
// REQUIRES THE JSCRYPTO PACKAGES FROM ATMOSPHERE - JPARKER | |
// THESE ARE THE METHODS FOR LOGGING IN AND THEN MAKING A REQUEST | |
// NOT EXHAUSTIVE - AND FRANKLY FAIRLY AGRICULTURAL AT THIS STAGE | |
// THESE ARE VERY DELIBERATELY VERBOSE BECAUSE ITS NOT A STANDARD AUTH PROCESS | |
// AND I WANT TO SEE WHAT'S GOING ON IF / WHEN I UPDATE THIS | |
Meteor.methods({ | |
onepagecrm_login: function (creds) { | |
console.log('----------') | |
console.log('onepagecrm login method') | |
var method = 'POST' | |
var api_url = 'https://app.onepagecrm.com/api/v3/login.json' | |
var data = { | |
login: creds.login, | |
password: creds.password | |
} | |
var response = HTTP.call('POST', api_url, { | |
data: data | |
}) | |
var content = response.data | |
var auth_key = content.data.auth_key | |
var user_id = content.data.user_id | |
// NB I AM STORING THESE CREDS IN A COLLECTION CALLED 'CONNECTIONS' | |
// THERE ARE OTHER WAYS TO DEAL WITH THIS... | |
// GET CONNECTION AND UPDATE | |
var connection = Connections.findOne({user_id: this.userId}); | |
var connection_id = connection._id | |
var onepagecrm_connection = {} | |
onepagecrm_connection.onepagecrm_user_id = user_id | |
onepagecrm_connection.onepagecrm_auth_key = auth_key | |
Connections.update({_id: connection_id }, { $set: onepagecrm_connection }); | |
}, | |
// THIS NEXT ONE IS THE REQUEST METHOD AND IN MY CASE SOME VARIABLES ARE PASSED IN THE | |
// CALL TO THIS METHOD AND SOME ARE STORED IN THE 'CONNECTIONS' COLLECTION FOR THIS USER | |
// SO - PAY ATTENTION ONLY TO THE VARIABLES RATHER THAN WHERE i GET THEM FROM. | |
onepagecrm_request: function(options) { | |
var connection = options.connection; | |
var user_id = connection.onepagecrm_user_id | |
var auth_key = connection.onepagecrm_auth_key | |
var method = options && options.method || null | |
var target = options && options.target || null | |
var partial = options && options.partial || null | |
var data = options && options.data || null | |
var base_url = 'https://app.onepagecrm.com/api/v3/' | |
var url = base_url + target + ".json" | |
if (partial) { | |
url = url + "?partial=1" | |
} | |
// YOU HAVE TO ADD THE 'PARTIAL' PARAM THIS WAY BECAUSE THE WHOLE URL GETS ENCODED | |
var json_data = JSON.stringify(data) | |
var timestamp = moment().unix() | |
var encoded_url = CryptoJS.SHA1(url).toString() | |
var encoded_json_data = CryptoJS.SHA1(json_data).toString() | |
var signature_string = user_id + "." + timestamp + "." + method + "." + encoded_url + "." + encoded_json_data | |
var decoded_auth_key = CryptoJS.enc.Base64.parse(auth_key) | |
var signature = CryptoJS.HmacSHA256(signature_string, decoded_auth_key).toString() | |
var headers = { | |
"X-OnePageCRM-UID": user_id, | |
"X-OnePageCRM-TS": timestamp, | |
"X-OnePageCRM-Auth": signature | |
} | |
try { | |
var response = HTTP.call(method, url, { | |
headers: headers, | |
data: data | |
}) | |
return response // OR WHATEVS | |
} | |
catch (e) { | |
console.log(': ' + e.message) | |
throw new Meteor.Error('400', e.message) | |
return true // OR WHATEVS | |
} | |
} | |
}) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment