Skip to content

Instantly share code, notes, and snippets.

View crrobinson14's full-sized avatar

Chad Robinson crrobinson14

View GitHub Profile
@crrobinson14
crrobinson14 / server.py
Created March 30, 2025 00:50 — forked from kallsyms/server.py
Bismuth CVE-2025-31160
import socket
import struct
import threading
import time
GPUDPORT = 59123
APIVERSION = 1
class GPUDServer:
def __init__(self, port=GPUDPORT):
export const useCrudeEventWrapper = () => {
const [someUiThing, setSomeUiThing] = useState();
useEffect(() => {
const adapter = new MyAdapter();
adapter.on('somethinghappened', (event) => {
setSomeUiThing(event.whatever);
});
return () => adapter.off('somethinghappened'); // or however you unsub
});
The rain came down in sheets, threatening to drench the small hunter's gear and clothes.
John had been tracking his prize elk all morning, but as the storm rolled in, he knew it
was time to find shelter. He set his backpack aside and began frantically searching for
a place to take cover.
Spotting a nearby old oak tree, John gathered his gear and ran towards it. He quickly
found a suitable spot near the trunk and began to set up his tarp, securing it with
rocks and trees to keep it from blowing away. As he worked, the wind howled through
the branches above him.
export const AppState = observable({
isAuthenticated: false,
profile: null as Profile | null,
});
export const setProfile = action((profile: Profile | null) => {
if (AppState.isAuthenticated && profile === null) {
console.log('[STATE] Logged out');
AppState.isAuthenticated = false;
AppState.profile = null;
@crrobinson14
crrobinson14 / boot.js
Last active February 6, 2020 17:06
ActionHero Secrets-Loading Boot Routine
const { loadSecrets } = require('./src/lib/secrets');
exports.default = async function BOOT() {
await loadSecrets('path/to/my/secret');
};
@crrobinson14
crrobinson14 / chatClient.js
Created January 23, 2020 20:36
WS/REST capable Chat / Action Handling client for ActionHero
const ReconnectingWebSocket = require('reconnecting-websocket');
const axios = require('axios');
const WS = require('ws');
// Written with ES5 metaphors to eliminate the need for Babel in test.
const KEY_CHARS = '0123456789abcdefghijklmnopqrstuvwxyz'.split('');
const generateRequestId = () => {
const uuid = [];
@crrobinson14
crrobinson14 / qosLog.js
Created February 9, 2019 00:21
QOS Logging Middleware for ActionHero
const { Initializer, api } = require('actionhero');
const fs = require('fs');
const shortid = require('../lib/shortid');
const safeApiRequestId = params => (params.apiRequestId || shortid(20))
.replace(/[^0-9a-zA-Z_-]/g, '')
.substring(0, 64);
function instrumentAction(data) {
const { action, params, response, connection } = data;

Requires json2yaml and, of course, ActionHero itself installed in the project. This script is fairly crude and has some hard-coded behaviors, such as expecting to find data models defined on api.models. It is provided here only for reference.

@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/.