"use strict";
// Dependencies
const request = require("request");
const OAuth = require("oauth-1.0a");
const crypto = require("crypto");
const eatmyride = require("../database/eatMyRideDB");
const Activity = require("../model/activities");
let config = require("../../config.json");
/**
* Step 1: Get Request token
*
* @param {} req
* @param {} res - Response
*/
exports.requestToken = function(req, res) {
// Configure request
const oauth = OAuth({
consumer: {
key: config.garmin.key, // geef van garmin de key mee
secret: config.garmin.secret // geef van garmin de secret mee
},
signature_method: "HMAC-SHA1", // Encrypty door HMAC-SHA1
hash_function(base_string, key) {
return crypto
.createHmac("sha1", key)
.update(base_string)
.digest("base64");
}
});
const request_data = {
url: config.url.requestToken,
method: "POST"
};
request(
{
url: request_data.url,
method: request_data.method,
headers: oauth.toHeader(oauth.authorize(request_data))
},
function(error, response, body) {
res.send(response);
}
);
};
/**
* Step 2: Get user access token
*
* @param {} req - Oauth token, Oauth verifier and Oauth secret
* @param {} res - Response
*/
exports.retrieveAccessToken = function(req, res) {
let oauth_token = req.body.token;
let oauth_secret = req.body.secret;
let oauth_verifier = req.body.verifier;
// Initialize
const oauth = OAuth({
consumer: {
key: config.garmin.key,
secret: config.garmin.secret
},
signature_method: "HMAC-SHA1",
hash_function(base_string, key) {
return crypto
.createHmac("sha1", key)
.update(base_string)
.digest("base64");
}
});
const request_data = {
url: config.url.accessToken,
method: "POST",
data: {
oauth_verifier: oauth_verifier
}
};
var token = {
key: oauth_token,
secret: oauth_secret
};
request(
{
url: config.url.accessToken,
method: request_data.method,
headers: oauth.toHeader(oauth.authorize(request_data, token))
},
function(err, response, body) {
// save
try {
let body_to_token_and_secret = splitBody(body);
eatmyride.saveUser(
body_to_token_and_secret[0],
body_to_token_and_secret[1]
);
Activity.getHistoricDataAfterLogin(body_to_token_and_secret[0], body_to_token_and_secret[1], 1);
} catch (err) {
console.log(
"The body does not contain the data token and secret \n",
err
);
}
res.send(response);
}
);
};
/**
* Split the body to strings we can work with
*
* @return array with the token and secret. If fail empty string
*/
var splitBody = function(body) {
// oauth_token=3795b466-6595-449c-a73b-7c1ce5200291&oauth_token_secret=cPbEW166uOYVEYBjPnSIA8Vx8ethtoqv1qb
try {
let splittedBody = body.split("&");
return [
splittedBody[0].split("=")[1].replace(/\s+/g, ''), // oauth_token=3795b466-6595-449c-a73b-7c1ce520029
splittedBody[1].split("=")[1].replace(/\s+/g, '') // oauth_token_secret=cPbEW166uOYVEYBjPnSIA8Vx8ethtoqv1qb
];
} catch (error) {
console.log(error);
return "";
}
};