How can I tell a AWS Lambda Function to redirect based off the environment?

392 Views Asked by At

So currently I'm using AWS Lambdas as triggers for my Cognito Passwordless authentication. For the create_auth_challenge trigger I have an AWS Lambda function that sends a link to the user to redirect them somewhere based on the environment. The only problem is that I'm not sure how to dynamically tell the function which environment the auth request is coming from.

AWS.config.update({ region: 'us-west-2' });
const SES = new AWS.SES();
exports.handler = async (event,context) => {
    console.log("HERE: ", event,context);
    let secretLoginCode;
    if (!event.request.session || !event.request.session.length) {
        // Generate a new secret login code and send it to the user
        secretLoginCode = Date.now().toString().slice(-4);
        try {
            if ('email' in event.request.userAttributes) {
                const emailResult = await SES.sendEmail({
                    Destination: { ToAddresses: [event.request.userAttributes.email] },
                    Message: {
                        Body: {
                            Html: {
                                Charset: 'UTF-8',
                                Data: `<html><body><p>This is your secret login code:</p>
                           <h3>Your magic link: ${INSERT ENVIRONMENT HERE}/api/auth/cognito/verify?email=${event.request.userAttributes.email}&code=${secretLoginCode}</h3></body></html>`
                            },
                            Text: {
                                Charset: 'UTF-8',
                                Data: `Your magic link: ${INSERT ENVIRONMENT HERE}/api/auth/cognito/verify?email=${event.request.userAttributes.email}&code=${secretLoginCode}`
                            }
                        },
                        Subject: {
                            Charset: 'UTF-8',
                            Data: 'Your magic link'
                        }
                    },
                    Source: 'Company <[email protected]>'
                }).promise();
            }
        } catch (error) {
            console.log(error)
        }
    } else {
        // re-use code generated in previous challenge
        const previousChallenge = event.request.session.slice(-1)[0];
        secretLoginCode = previousChallenge.challengeMetadata.match(/CODE-(\d*)/)[1];
    }
    // Add the secret login code to the private challenge parameters
    // so it can be verified by the "Verify Auth Challenge Response" trigger
    event.response.privateChallengeParameters = { secretLoginCode };
    // Add the secret login code to the session so it is available
    // in a next invocation of the "Create Auth Challenge" trigger
    event.response.challengeMetadata = `CODE-${secretLoginCode}`;
    return event;
};```

This is a magic link authentication by the way.
0

There are 0 best solutions below