Skip to content

Instantly share code, notes, and snippets.

@jasonpolites
Last active November 9, 2017 23:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jasonpolites/82b1c67f2fb06f1869a069847cc4b096 to your computer and use it in GitHub Desktop.
Save jasonpolites/82b1c67f2fb06f1869a069847cc4b096 to your computer and use it in GitHub Desktop.
[Very] rough example of using the signBlob API in GCP
const rp = require('request-promise');
exports.blobSigner = (req, res) => {
let serviceNamePromise = getServiceAccountName();
let serviceTokenPromise = getServiceAccountToken();
Promise.all([
serviceNamePromise,
serviceTokenPromise]).then((values)=>{
let value = req.body;
let projectId = process.env.GCLOUD_PROJECT;
let serviceAccount = values[0];
let accessToken = JSON.parse(values[1]).access_token;
let blob = new Buffer(value).toString('base64');
signBlob(blob, projectId, serviceAccount, accessToken).then((result) => {
res.send(result);
}, (err) => {
handleError(res, err);
});
}, (err) => {
handleError(res, err);
});
}
function handleError(res, err) {
res.status(400).send(err);
}
function getServiceAccountName() {
return rp({
uri: 'http://metadata/computeMetadata/v1/instance/service-accounts/default/email',
headers: {
'Metadata-Flavor': 'Google'
}
});
}
function getServiceAccountToken() {
return rp({
uri: 'http://metadata/computeMetadata/v1/instance/service-accounts/default/token',
headers: {
'Metadata-Flavor': 'Google'
}
});
}
function signBlob(blob, projectId, serviceAccount, accessToken) {
console.log(`Attempting to sign blob ${blob} for project ${projectId} on service account ${serviceAccount} with token ${accessToken}`);
let uri = `https://iam.googleapis.com/v1/projects/${projectId}/serviceAccounts/${serviceAccount}:signBlob`;
let bearerToken = `Bearer ${accessToken}`;
return rp({
method: 'POST',
uri: uri,
headers: {
'Authorization': bearerToken
},
body: {
'bytesToSign': blob
},
json: true
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment