Skip to content

Instantly share code, notes, and snippets.

@axwaxw
Last active August 29, 2015 14:21
Show Gist options
  • Save axwaxw/cfee49f30efd35f982b4 to your computer and use it in GitHub Desktop.
Save axwaxw/cfee49f30efd35f982b4 to your computer and use it in GitHub Desktop.
OnePageCRM Login and Request process for Meteor
// 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