Skip to content

Instantly share code, notes, and snippets.

View furkan3ayraktar's full-sized avatar
👨‍💻

Furkan Bayraktar furkan3ayraktar

👨‍💻
View GitHub Profile
@furkan3ayraktar
furkan3ayraktar / LambdaEdgeIndexRedirect.js
Created March 31, 2018 13:44
Redirect requests to index.html within same folder from CloudFront with Labda@Edge.
const path = require('path');
exports.handler = (event, context, callback) => {
const { request } = event.Records[0].cf;
console.log('Request URI: ', request.uri);
const parsedPath = path.parse(request.uri);
let newUri;
@furkan3ayraktar
furkan3ayraktar / DetectRelevantPaths.js
Created March 29, 2018 16:36
Detecting relevant paths in the request.
const path = require('path');
exports.handler = (event, context, callback) => {
const { request, config } = event.Records[0].cf;
let originalUri = request.uri;
const parsedPath = path.parse(originalUri);
if (parsedPath.ext === '') {
// Every request that does not have an extension should be a route in our
@furkan3ayraktar
furkan3ayraktar / CloudFrontMetadataInject.js
Last active October 5, 2023 16:38
Complete Lambda@Edge function to inject metadata.
const path = require('path');
const https = require('https');
const zlib = require('zlib');
const downloadContent = (url, callback) => {
https.get(url, (res) => {
let response;
let body = '';
if (res.headers['content-encoding'] === 'gzip') {
@furkan3ayraktar
furkan3ayraktar / Handler.js
Created March 29, 2018 16:31
Handler for Lambda function
exports.handler = (event, context, callback) => {
const { request, config } = event.Records[0].cf;
let originalUri = request.uri;
const parsedPath = path.parse(originalUri);
if (parsedPath.ext === '') {
request.uri = '/index.html';
let metaUrl = 'https://houseofradon.com';
@furkan3ayraktar
furkan3ayraktar / FetchIndexHtmlAndCreateCloudFrontResponse.js
Created March 29, 2018 16:26
Function for fetching index.html of SPA and adding metaData to it. This function also prepares a response for CloudFront to cache.
const fetchIndexHtmlAndCreateCloudFrontResponse = (url, metaTags, metaHeaders, callback) => {
downloadContent(url, (isOk, result, headers) => {
if (!isOk) {
console.log('Error fetching content:', result);
callback(false);
} else {
// We have <title>House of Radon</title> inside the actual index.html. We use that part to replace with actual metadata.
const finalBody = result.replace('<title>House of Radon</title>', metaTags);
@furkan3ayraktar
furkan3ayraktar / FetchMetaData.js
Created March 29, 2018 16:23
Function for fetching metadata from backend.
const fetchMetaData = (url, callback) => {
downloadContent(url, (isOk, result, headers) => {
if (!isOk) {
console.log('Error fetching meta data:', result);
callback(false);
} else {
const metaData = JSON.parse(result);
let metaTags = '';
@furkan3ayraktar
furkan3ayraktar / DownloadContent.js
Created March 29, 2018 15:40
Content downloader used in Lambda@Edge function.
const https = require('https');
const zlib = require('zlib');
const downloadContent = (url, callback) => {
https.get(url, (res) => {
let response;
let body = '';
if (res.headers['content-encoding'] === 'gzip') {
response = res.pipe(zlib.createGunzip());