Skip to content

Instantly share code, notes, and snippets.

View crrobinson14's full-sized avatar

Chad Robinson crrobinson14

View GitHub Profile
@crrobinson14
crrobinson14 / cors.js
Created October 30, 2018 03:25
ActionHero v19+ CORS middleware
const { Initializer, api } = require('actionhero');
// Adjust to suit... Or optionally move into config...
const allowedOrigins = [
'https://staging.mydomain.com',
'https://www.mydomain.com',
'https://mydomain.com',
'http://localhost:8080',
];

EJS template rendering in ActionHero 19+

This example provides a proof of concept for simple EJS-based template rendering in ActionHero. Note that EJS is this author's favorite "simple" NodeJS template engine but it could easily be replaced with any other engine you wish.

Sample Usage

  1. Copy ejs.js to initializers/.
  2. Create a folder called templates/ and copy leaderboard.js there.
  3. Copy the sample 'getLeaderboard.js' action to actions/.
@crrobinson14
crrobinson14 / initializer.js
Created February 16, 2018 19:34
Clean old workers and tasks
module.exports = {
start: function(_api, next) {
var maxWorkerAge = 10000;
api.log('Removing stuck workers older than ' + maxWorkerAge + 'ms', 'info');
api.resque.queue.cleanOldWorkers(maxWorkerAge, function(err, result) {
if (err) {
api.log(err, 'error');
}
if (Object.keys(result).length > 0) {
api.log('Removed stuck workers with errors: ', 'info', result);
const Redis = require('redis');
const Config = require('./config.js');
const Log = require('./log.js');
let redisClient = Redis.createClient(Config.redis.uri);
// Locking utility function. This is based on https://github.com/errorception/redis-lock but we only needed a simple use-case of it,
// and redis-lock continually retries - we wanted to fail immediately if a lock was in use.
class Lock {
FROM node:8.6.0
#USER node
# Deal with node-gyp permissions issues in Docker
RUN npm -g config set user root
RUN mkdir /root/.npm-global
ENV PATH=/root/.npm-global/bin:$PATH
ENV NPM_CONFIG_PREFIX=/root/.npm-global
# Base tools
v8.6.0
5.3.0
chat@0.1.0 /Users/chad/projects/paltalk/webng/chat
├─┬ @webng/ah-request-processing-plugin@0.1.4
│ └── @webng/node-logger@0.1.12 deduped
├─┬ @webng/ah-swagger@1.0.9
│ ├── actionhero@17.1.0 deduped
│ └── json2yaml@1.1.0 deduped
├─┬ @webng/conform@0.1.5
│ ├─┬ glob@7.1.2
@crrobinson14
crrobinson14 / firebase-backup.sh
Created August 1, 2017 00:54
Firebase Realtime Database Backup Script
#!/usr/bin/env bash
# This script uses a shallow-get technique to get a list of all top level keys
# in a Firebase Realtime Database, then extract the tree under each key into a
# separate JSON file, one per top level key.
#
# It’s great for making backups because you don’t end up with one ginormous
# export file which is really hard to manage with other tools.
#
# It can also immediately give you a sense of where your space is going per key,
@crrobinson14
crrobinson14 / bootstrap.js
Last active March 1, 2017 00:19
ActionHero + Mocha test/ subfolder support files.
// Set NODE_ENV to test so AH creates api.specHelper for us
process.env.NODE_ENV = 'test';
process.env.ACTIONHERO_CONFIG = 'config,local-config';
// Get ActionHero ready to go
var actionheroPrototype = require('actionhero').actionheroPrototype,
actionhero = new actionheroPrototype(),
running = false;
global.api = null;
@crrobinson14
crrobinson14 / session.js
Created February 3, 2017 03:27
ActionHero JWT-oriented Session Middleware
let Promise = require('bluebird'),
pbkdf2 = require('pbkdf2'),
jwt = require('jsonwebtoken'),
encryptionIterations = 10000,
publicApi = {},
api;
/**
* This is an example, but fully functional, session middleware for ActionHero.
* It's based on three design principles:
var pendingNotifications = {},
publicApi = {},
api;
// Dummy function to avoid an Unhandled Rejection error if the user is offline. Prevents us
// from needing to .catch() the notification result in every spot where we call it. Also a
// useful debugging point, so we don't just null it out.
function userNotOnline() {
}