Skip to content

Instantly share code, notes, and snippets.

View rts-rob's full-sized avatar
👋
Howdy

Rob Sutter rts-rob

👋
Howdy
View GitHub Profile
@rts-rob
rts-rob / slack_request_body.json
Last active September 12, 2017 08:24
Slack API Request Body
{
"token": "ABCD1234EFGH5678IJKL9012",
"team_id": "XXXXXXXXX",
"team_domain": "someteamdomain",
"channel_id": "YYYYYYYYY",
"channel_name": "directmessage",
"user_id": "ZZZZZZZZZ",
"user_name": "someuser",
"command": "/dbreset",
"text": "",
@rts-rob
rts-rob / validateUserAgent.js
Last active September 12, 2017 08:15
Promisified function for validating the user agent of an AWS Lambda invocation
function validateUserAgent(event, desiredUserAgent) {
return new Promise(function(resolve, reject) {
const foundUserAgent = event.requestContext.identity.userAgent.toLowerCase();
if (foundUserAgent.startsWith(desiredUserAgent.toLowerCase())) {
resolve(querystring.parse(event.body));
} else {
reject(buildError(401, "This endpoint cannot be accessed via the current User Agent."));
}
@rts-rob
rts-rob / handler.js
Last active September 12, 2017 07:34
Main function of Promise-based refactor of our self-service database reset function via slack
module.exports.reset = (event, context, callback) => {
const targetUserAgent = 'slackbot';
const targetSlackTeam = 'SomeSlackTeam';
validateUserAgent(event, targetUserAgent)
.then(requestBody => validateSlackTeam(requestBody, targetSlackTeam))
.then(validatedRequestBody => extractUser(validatedRequestBody))
.then(extractedUser => resetDB(extractedUser))
.then(response => callback(null, response))
.catch(error => callback(error));
@rts-rob
rts-rob / template.yaml
Last active September 11, 2017 12:49
Simple SAM example with one DynamoDB table and one Lambda function
AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Resources:
someTable:
Type: 'AWS::DynamoDB::Table'
Properties:
AttributeDefinitions:
- AttributeName: id
AttributeType: S
- AttributeName: version
@rts-rob
rts-rob / serverless.yml
Created September 11, 2017 12:38
Simple Serverless Framework example with one DynamoDB table and one Lambda function
service: serverless
provider:
name: aws
runtime: nodejs6.10
functions:
someFunction:
handler: someFunction.handler
description: Lambda Function
events:
- stream:
@rts-rob
rts-rob / serverless.tf
Last active November 19, 2021 09:05
Simple Terraform example with one DynamoDB table and one Lambda function
provider "aws" { }
resource "aws_iam_role" "iam_for_lambda" {
name = "iam_for_lambda"
assume_role_policy = <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
@rts-rob
rts-rob / three-table-join.sql
Created September 11, 2017 06:25
Example of an INNER JOIN across three tables
CREATE VIEW ClassesAndRunningInformation AS
SELECT
ClassGroup.Name AS ClassGroupName,
Running.StartDate,
Module.Name AS ModuleName,
Module.Length AS ModuleLength
FROM
ClassGroup
INNER JOIN
Running
@rts-rob
rts-rob / user.sql
Created September 11, 2017 06:23
User and Type example showing foreign key constraints and builtin uuid() function for generating id
CREATE TABLE userType (
id int NOT NULL,
description varchar(255) NOT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE user (
id char(32) NOT NULL, -- use uuid() on INSERT
username varchar(24) NOT NULL, -- rob
passwordHash char(40) NOT NULL, -- c8fed00eb2e87f1cee8e90ebbe870c190ac3848c
@rts-rob
rts-rob / archetype.js
Created September 11, 2017 06:22
Basic archetype of every express function ever
function archetype (request, response) {
// Get Data out of the request
// Process that data
// Build and send the response
response.setHeaders();
response.write();
response.end();
}
@rts-rob
rts-rob / authentication.js
Created September 11, 2017 06:21
Basic psuedocode example of a signup/login flow with salt and hash
function signup (email, password) {
const salt = uuid();
const hashedPassword = hash(`${salt}${password}`);
// this stores everything in the DB
createUser(email, salt, hashedPassword);
}
function login (request, response) {
// get the salt - SELECT salt FROM users
// WHERE email = ?, [email]