appfolio-security-basics

Featured

Secure AppFolio API credentials and tenant data. Trigger: "appfolio security".

AI & Automation 2,266 stars 315 forks Updated today MIT

Install

View on GitHub

Quality Score: 99/100

Stars 20%
100
Recency 20%
100
Frontmatter 20%
70
Documentation 15%
100
Issue Health 10%
50
License 10%
100
Description 5%
100

Skill Content

# AppFolio Security Basics ## Overview AppFolio manages property portfolios containing tenant PII (SSNs, bank accounts, lease terms), owner financial data, and maintenance vendor records. A breach exposes rent rolls, payment histories, and personally identifiable tenant information across every managed property. Secure every integration point: API credentials, webhook endpoints, and any pipeline that touches tenant or owner financial records. ## API Key Management ```typescript import https from "https"; import axios, { AxiosInstance } from "axios"; function createAppFolioClient(): AxiosInstance { const clientId = process.env.APPFOLIO_CLIENT_ID; const clientSecret = process.env.APPFOLIO_CLIENT_SECRET; const baseUrl = process.env.APPFOLIO_BASE_URL; if (!clientId || !clientSecret || !baseUrl) { throw new Error("Missing APPFOLIO_CLIENT_ID, APPFOLIO_CLIENT_SECRET, or APPFOLIO_BASE_URL"); } return axios.create({ baseURL: baseUrl, auth: { username: clientId, password: clientSecret }, httpsAgent: new https.Agent({ minVersion: "TLSv1.2", rejectUnauthorized: true }), }); } ``` ## Webhook Signature Verification ```typescript import crypto from "crypto"; function verifyAppFolioWebhook(req: Request, res: Response, next: NextFunction): void { const signature = req.headers["x-appfolio-signature"] as string; const secret = process.env.APPFOLIO_WEBHOOK_SECRET!; const expected = crypto.createHmac("sha256", secret).update(req.body).digest("hex"); if (...

Details

Author
jeremylongshore
Repository
jeremylongshore/claude-code-plugins-plus-skills
Created
7 months ago
Last Updated
today
Language
Python
License
MIT

Integrates with

Similar Skills

Semantically similar based on skill content — not just same category