"user strict";
const request = require("request");
const OAuth = require("oauth-1.0a");
const crypto = require("crypto");
const fs = require("fs-extra");
let config = require("../../config.json");
const db = require("../database/eatMyRideDB");
/**
* Receive activity files from Garmin
*
* @param {} req - Request data from Garmin contains FIT file callback
* @param {} res
*/
exports.getActivityFiles = async function (req, res) {
console.log("/activity_files post");
console.log("Received " + req.body.activityFiles.length + "activity files");
let activityFiles = req.body.activityFiles;
const waitFor = (ms) => new Promise((r) => setTimeout(r, ms)); // wat is dit
activityFiles.forEach(async (file) => {
await waitFor(50); // wait 50ms before executing
let oauth_token_body = file.userAccessToken;
let oauth_secret_body = "";
// get the user information needed for request
await db
.getUserData(oauth_token_body)
.then((res) => {
oauth_secret_body = res.rows[0].user_secret;
})
.catch((err) => {
console.log(
"No user with token $res.activities.userAccessToken found in database! \n",
err
);
});
// function auto generate van de authorization header. for getting the fitfile
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");
},
});
// url met methode
const request_data = {
url: file.callbackURL,
method: "GET",
};
// token die we van de params krijgen
var token = {
key: oauth_token_body,
secret: oauth_secret_body,
};
request(
{
url: file.callbackURL,
method: request_data.method,
headers: oauth.toHeader(oauth.authorize(request_data, token)),
},
function (error, response, body) {
if (error) {
reject(error);
} else {
fs.outputFile(
"./data/" + file.userAccessToken + "/" + file.summaryId + ".FIT",
{},
(err) => {
if (err) throw err;
db.saveLog(file.summaryId, file.userId, file.fileType); // save log to database
}
);
console.log("New File created");
}
}
);
});
res.status(200);
res.send("Success");
};