Skip to content

Instantly share code, notes, and snippets.

@franzwong
franzwong / index.js
Created December 8, 2018 06:21
Working with fluture and sanctuary
const F = require('fluture')
const {create, env} = require ('sanctuary');
const {env: flutureEnv} = require ('fluture-sanctuary-types');
const S = create ({checkTypes: true, env: env.concat (flutureEnv)});
const getName = id => new Promise(resolve => {
console.log(id)
setTimeout(() => resolve('Franz'), 3000)
})
@franzwong
franzwong / quicksort.js
Created December 18, 2018 05:39
Quicksort with ramda
const R = require('ramda')
function quicksort(list) {
return R.ifElse(
R.pipe(R.length, R.gt(2)),
R.identity,
list => {
const [pivot, ...rest] = list
return R.pipe(
R.partition(R.gt(pivot)),
@franzwong
franzwong / nginx.conf
Created January 1, 2019 10:12
Dockerized nginx as reverse proxy
events {}
http {
upstream webapp {
server host.docker.internal:3000; # development only
}
server {
listen 80;
server_name localhost;
@franzwong
franzwong / index.js
Last active January 9, 2019 06:58
HowTo: Create AWS Lambda with Cloudformation
// For simplicity, error handling is not included
const axios = require('axios')
const AWS = require('aws-sdk');
const region = process.env['AwsRegion']
AWS.config.update({region});
const url = process.env['ExchangeRateURL']
const bucket = process.env['S3Bucket']
@franzwong
franzwong / exchange-rate.yaml
Last active January 12, 2019 11:27
HowTo: Create AWS Lambda with Cloudformation
AWSTemplateFormatVersion: 2010-09-09
Parameters:
AwsRegion:
Type: String
Default: us-east-1
# This bucket stores the lambda function package
LambdaCodeBucket:
Type: String
Default: my-lambda
LambdaCodeKey:
@franzwong
franzwong / signUp.js
Created January 22, 2019 11:57
HowTo: Implement user sign up and login with AWS Cognito
async function signUp(email, password) {
try {
const cognito = new AWS.CognitoIdentityServiceProvider()
await cognito.adminCreateUser({
UserPoolId: process.env.USER_POOL_ID,
Username: email,
MessageAction: 'SUPPRESS',
TemporaryPassword: password,
}).promise()
@franzwong
franzwong / login.js
Created January 22, 2019 12:01
HowTo: Implement user sign up and login with AWS Cognito
async function login(email, password) {
try {
const cognito = new AWS.CognitoIdentityServiceProvider()
return await cognito.adminInitiateAuth({
AuthFlow: 'ADMIN_NO_SRP_AUTH',
ClientId: process.env.CLIENT_ID,
UserPoolId: process.env.USER_POOL_ID,
AuthParameters: {
USERNAME: email,
PASSWORD: password
@franzwong
franzwong / trustPolicy.json
Last active January 24, 2019 10:17
HowTo: Grant IAM role to Cognito authenticated user
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Principal": {"Federated": "cognito-identity.amazonaws.com"},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {"cognito-identity.amazonaws.com:aud": "<IDENTITY_POOL_ID>"},
"ForAnyValue:StringLike": {"cognito-identity.amazonaws.com:amr": "authenticated"}
}
@franzwong
franzwong / permissionPolicy.json
Last active January 24, 2019 10:16
HowTo: Grant IAM role to Cognito authenticated user
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject"
],
@franzwong
franzwong / getUserCredentials.js
Created January 23, 2019 14:29
HowTo: Implement user sign up and login with AWS Cognito
async function getUserCredentials(idToken) {
const cognitoidentity = new AWS.CognitoIdentity()
const providerName = `cognito-idp.${process.env.AWS_REGION}.amazonaws.com/${process.env.USER_POOL_ID}`
let response = await cognitoidentity.getId({
IdentityPoolId: process.env.IDENTITY_POOL_ID,
Logins: {
[providerName]: idToken
}
}).promise()