81 lines
2.4 KiB
JavaScript
81 lines
2.4 KiB
JavaScript
const AWS = require("aws-sdk")
|
|
const fetch = require("node-fetch")
|
|
const env = require("../../../environment")
|
|
const {
|
|
deployToObjectStore,
|
|
performReplication,
|
|
fetchCredentials,
|
|
} = require("./utils")
|
|
|
|
/**
|
|
* Verifies the users API key and
|
|
* Verifies that the deployment fits within the quota of the user
|
|
* Links to the "check-api-key" lambda.
|
|
* @param {object} deployment - information about the active deployment, including the appId and quota.
|
|
*/
|
|
exports.preDeployment = async function (deployment) {
|
|
const json = await fetchCredentials(env.DEPLOYMENT_CREDENTIALS_URL, {
|
|
apiKey: env.BUDIBASE_API_KEY,
|
|
appId: deployment.getAppId(),
|
|
quota: deployment.getQuota(),
|
|
})
|
|
|
|
// set credentials here, means any time we're verified we're ready to go
|
|
if (json.credentials) {
|
|
AWS.config.update({
|
|
accessKeyId: json.credentials.AccessKeyId,
|
|
secretAccessKey: json.credentials.SecretAccessKey,
|
|
sessionToken: json.credentials.SessionToken,
|
|
})
|
|
}
|
|
|
|
return json
|
|
}
|
|
|
|
/**
|
|
* Finalises the deployment, updating the quota for the user API key
|
|
* The verification process returns the levels to update to.
|
|
* Calls the "deployment-success" lambda.
|
|
* @param {object} deployment information about the active deployment, including the quota info.
|
|
* @returns {Promise<object>} The usage has been updated against the user API key.
|
|
*/
|
|
exports.postDeployment = async function (deployment) {
|
|
const DEPLOYMENT_SUCCESS_URL =
|
|
env.DEPLOYMENT_CREDENTIALS_URL + "deploy/success"
|
|
|
|
const response = await fetch(DEPLOYMENT_SUCCESS_URL, {
|
|
method: "POST",
|
|
body: JSON.stringify({
|
|
apiKey: env.BUDIBASE_API_KEY,
|
|
quota: deployment.getQuota(),
|
|
}),
|
|
headers: {
|
|
"Content-Type": "application/json",
|
|
Accept: "application/json",
|
|
},
|
|
})
|
|
|
|
if (response.status !== 200) {
|
|
throw new Error(`Error updating deployment quota for API Key`)
|
|
}
|
|
|
|
return await response.json()
|
|
}
|
|
|
|
exports.deploy = async function (deployment) {
|
|
const appId = deployment.getAppId()
|
|
const { bucket, accountId } = deployment.getVerification()
|
|
const metadata = { accountId }
|
|
await deployToObjectStore(appId, bucket, metadata)
|
|
}
|
|
|
|
exports.replicateDb = async function (deployment) {
|
|
const appId = deployment.getAppId()
|
|
const verification = deployment.getVerification()
|
|
return performReplication(
|
|
appId,
|
|
verification.couchDbSession,
|
|
env.DEPLOYMENT_DB_URL
|
|
)
|
|
}
|