Totp
RFC6238 TOTP implementation in pure PostgreSQL plpgsql
Install / Use
/learn @pyramation/TotpREADME
totp 
TOTP implementation in pure PostgreSQL plpgsql
This extension provides the HMAC Time-Based One-Time Password Algorithm (TOTP) as specfied in RFC 6238/4226 as pure plpgsql functions.
Usage
totp.generate
SELECT totp.generate('mysecret');
-- you can also specify totp_interval, and totp_length
SELECT totp.generate('mysecret', 30, 6);
In this case, produces a TOTP code of length 6
013438
totp.verify
SELECT totp.verify('mysecret', '765430');
-- you can also specify totp_interval, and totp_length
SELECT totp.verify('mysecret', '765430', 30, 6);
Depending on input, returns TRUE/FALSE
totp.url
-- totp.url ( email text, totp_secret text, totp_interval int, totp_issuer text )
SELECT totp.url(
'customer@email.com',
'mysecret',
30,
'Acme Inc'
);
Will produce a URL-encoded string
otpauth://totp/customer@email.com?secret=mysecret&period=30&issuer=Acme%20Inc
caveats
- Currently only supports
sha1 - Currently only supports 20 byte secrets
pull requests welcome!
credits
Thanks to
https://tools.ietf.org/html/rfc6238
https://www.youtube.com/watch?v=VOYxF12K1vE
https://pgxn.org/dist/otp/
Development
start the postgres db process
First you'll want to start the postgres docker (you can also just use docker-compose up -d):
make up
install modules
Install modules
yarn install
install the Postgres extensions
Now that the postgres process is running, install the extensions:
make install
This basically sshs into the postgres instance with the packages/ folder mounted as a volume, and installs the bundled sql code as pgxn extensions.
testing
Testing will load all your latest sql changes and create fresh, populated databases for each sqitch module in packages/.
yarn test:watch
building new modules
Create a new folder in packages/
lql init
Then, run a generator:
lql generate
You can also add arguments if you already know what you want to do:
lql generate schema --schema myschema
lql generate table --schema myschema --table mytable
deploy code as extensions
cd into packages/<module>, and run lql package. This will make an sql file in packages/<module>/sql/ used for CREATE EXTENSION calls to install your sqitch module as an extension.
recursive deploy
You can also deploy all modules utilizing versioning as sqtich modules. Remove --createdb if you already created your db:
lql deploy awesome-db --yes --recursive --createdb
Related Skills
feishu-drive
339.5k|
things-mac
339.5kManage Things 3 via the `things` CLI on macOS (add/update projects+todos via URL scheme; read/search/list from the local Things database)
clawhub
339.5kUse the ClawHub CLI to search, install, update, and publish agent skills from clawhub.com
yu-ai-agent
2.0k编程导航 2025 年 AI 开发实战新项目,基于 Spring Boot 3 + Java 21 + Spring AI 构建 AI 恋爱大师应用和 ReAct 模式自主规划智能体YuManus,覆盖 AI 大模型接入、Spring AI 核心特性、Prompt 工程和优化、RAG 检索增强、向量数据库、Tool Calling 工具调用、MCP 模型上下文协议、AI Agent 开发(Manas Java 实现)、Cursor AI 工具等核心知识。用一套教程将程序员必知必会的 AI 技术一网打尽,帮你成为 AI 时代企业的香饽饽,给你的简历和求职大幅增加竞争力。
