Skip to content

Instantly share code, notes, and snippets.

@ngs
Last active February 19, 2019 15:38
Show Gist options
  • Select an option

  • Save ngs/a6582e1ea4f63059459db4162ba510e7 to your computer and use it in GitHub Desktop.

Select an option

Save ngs/a6582e1ea4f63059459db4162ba510e7 to your computer and use it in GitHub Desktop.
Verify License
const crypto = require('crypto');
const https = require('https');
const { parseString } = require('./xml2js/xml2js');
exports.handler = (event, context, callback) => {
let { token } = event;
let buf = Buffer.from(token, 'base64');
let xml = buf.toString().replace(/\u0000/g, '');
https.get('https://verificationservice.officeapps.live.com/ova/verificationagent.svc/rest/verify?token=' + encodeURIComponent(xml), (resp) => {
let data = '';
resp.on('data', (chunk) => {
data += chunk;
});
resp.on('end', () => {
parseString(xml, function (err, result) {
if (err) {
return callback(err, null);
}
let payload = result.r.t[0].$
let purchaserId = payload.oid;
parseString(data, function (err, result) {
if (err) {
return callback(err, null);
}
let res = result.VerifyEntitlementTokenResponse;
let ret = { purchaserId };
Object.keys(res).forEach((k) => {
let value = res[k][0];
if(!value) {
return;
} else if (value.$ && value.$['i:nil']) {
value = null;
} else if (/^(true|false)$/.test(value)) {
value = value === 'true';
} else if(/^(\d+)$/.test(value)) {
value = parseInt(value, 10);
}
ret[k.replace(/^(.)/, (s) => s.toLowerCase())] = value;
});
ret.userHash = crypto.createHmac('sha256', process.env.INTERCOM_ID_HASH_SECRET)
.update(ret.userId)
.digest('hex');
callback(null, ret);
});
});
});
}).on("error", (err) => {
callback(err, null);
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment