Skip to content

Instantly share code, notes, and snippets.

@jomasim
Last active January 23, 2024 14:37
Show Gist options
  • Save jomasim/c66f2790a3b96e08add61e06900fb072 to your computer and use it in GitHub Desktop.
Save jomasim/c66f2790a3b96e08add61e06900fb072 to your computer and use it in GitHub Desktop.
cognito lambda triggers
// Cognito lambdas triggers
// Create auth challenge Lambda trigger
var AWS = require("aws-sdk");
exports.handler = (event, context, callback) => {
event.response.publicChallengeParameters = {};
event.response.privateChallengeParameters = {};
const session = event.request.session;
const currentSession = session ? session.length - 1 : 0;
const MAX_ATTEMPTS = 3;
if (
event.request.session.length == 0 &&
event.request.challengeName == "CUSTOM_CHALLENGE"
) {
//create the code
var answer = Math.random().toString(10).substr(2, 6);
// send answer via sms
// sendCode(answer) using something like aws sdk
//set the return parameters **including the correct answer**
event.response.privateChallengeParameters.answer = answer;
event.response.challengeMetadata = answer;
event.response.publicChallengeParameters = {
challengeType: "PASSWORDLESS_CHALLENGE",
phone_number: event.request.userAttributes.phone_number,
attempts: 1,
attemptsLeft: 2,
};
} else {
const attempts = session.length;
const attemptsLeft = MAX_ATTEMPTS - attempts;
const metaData = session[currentSession].challengeMetadata;
if (attempts < MAX_ATTEMPTS) {
event.response.privateChallengeParameters.answer = metaData;
event.response.challengeMetadata = metaData;
event.response.publicChallengeParameters = {
challengeType: "PASSWORDLESS_CHALLENGE",
phone_number: event.request.userAttributes.phone_number,
attempts,
attemptsLeft,
};
}
}
callback(null, event);
};
// Define auth challenge Lambda trigger
exports.handler = (event, context, callback) => {
const session = event.request.session
const currentSession = session ? session.length - 1 : 0
const attempts = session.length;
const MAX_ATTEMPTS = 3;
if (session.length === 0) {
event.response = {
challengeName: "CUSTOM_CHALLENGE",
failAuthentication: false,
issueTokens: false,
};
} else {
if (session[currentSession].challengeName === "CUSTOM_CHALLENGE") {
if (session[currentSession].challengeResult === true) {
event.response.issueTokens = true;
event.response.failAuthentication = false;
} else {
if (attempts <= MAX_ATTEMPTS) {
event.response = {
challengeName: "CUSTOM_CHALLENGE",
failAuthentication: false,
issueTokens: false,
};
} else {
event.response.issueTokens = false;
event.response.failAuthentication = true;
}
}
}
}
callback(null, event);
}
// Verify auth challenge response Lambda trigger
exports.handler = (event, context, callback) => {
if (event.request.privateChallengeParameters.answer == event.request.challengeAnswer) {
event.response.answerCorrect = true;
} else {
event.response.answerCorrect = false;
}
callback(null, event);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment