Skip to content

Instantly share code, notes, and snippets.

@iaindooley
iaindooley / totp.js
Created October 16, 2024 05:22
Personal TOTP URL Generator
function generateTOTPURL(secret, label,issuer) {
return `otpauth://totp/${label}?secret=${secret}&issuer=${issuer}`;
}
// Function to encode a string to Base32
function base32Encode(str) {
const base32Chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567';
let binString = '';
for (let i = 0; i < str.length; i++) {
const charCode = str.charCodeAt(i);
@iaindooley
iaindooley / gist:51e75dd7315c889fec0f37de3e091aa1
Created August 23, 2022 04:12
Init trellinator submodules for a BenkoBot repo
git submodule add [email protected]:iaindooley/benko-board-trellinator.git apps/benko-board-trellinator
git submodule add [email protected]:iaindooley/trellinator-libs.git apps/trellinator-libs
git submodule add [email protected]:iaindooley/trellinator.git apps/trellinator
git submodule init
git submodule update
var notif = new Notification(notification);
var moved = notif.movedCard();
if(!notif.member().notTrellinator())//ignore moves made by the bot
throw new InvalidActionException("Don't loop!");
moved.cardsLinkedInAttachments().each(function(card)
{
card.moveToList(moved.currentList(),"bottom");
});
var notif = new Notification(notification);
var added = notif.addedChecklistItem();
if(!notif.member().notTrellinator())//don't react if the bot added the item
throw new InvalidActionException("Don't loop!");
var added_to = added.checklist();
var source_card = added_to.card();
card.board().cards().each(function(card)
@iaindooley
iaindooley / gist:99ff3d25f869e2b9d4311f692f888147
Created October 5, 2021 23:57
createWorkspaceAddMembers
var members = [
'username1',
'username2',
'username3'
];
var target = new Trellinator().team("My New Workspace");//find or create
for(var i = 0;i < members.length;i++)
{
var added = new Notification(notification).addedLabel("Copy With State");
var copy = added.card().copyToList(
added.card().board().findOrCreateList("Copied Cards"),
"top"
)
.markDueDateIncomplete();
added.card().checklists().each(function(cl)
{
cl.items().each(function(item)
@iaindooley
iaindooley / gist:9cb592210cdaf45b92be4d3766f804a4
Created September 30, 2021 00:13
populatePdfFromCustomFields
var moved = new Notification(notification).movedCard("Create PDF");
var fields = {};
moved.board().customFields().each(function(field)
{
fields[field.name()] = moved.customFieldValue(field.name());
});
createGoogleDocsPdfFromFieldValues(fields);//this would be a library function
@iaindooley
iaindooley / gist:0cb5d36a528446e6eabb96e41e71fc6b
Created September 30, 2021 00:08
setAttachedLinkToCustomField
var attached = new Notification(notification).attachedLink();
attached.card().setCustomFieldValue("Box Link",attached.link());
attached.remove();
@iaindooley
iaindooley / gist:fa7693d6b55f0e8ea6a3bfd35f78e8de
Created September 29, 2021 04:05
setMemberAndDueDateOnAddedChecklistItem
var added = new Notification(notification).addedChecklistItem();
var split = added.name().split("|");
if(split.length == 3)
{
var text = split[0].trim();
var date = new Date(split[1].trim());
var member = new Member({username: split[2].trim()});
added
var created = new Notification(notification).createdCard(/Orders.*/);
var holding_list = created.board().list("Waiting ... ");
created.board().list("Transporters").cards().each(function(card)
{
Card.create(holding_list,"RFQ Order #"+created.id()).postComment(
//include whatever info from the order card here, just putting description as an example
//which might have all the form field submissions
"@to "+card.name()+" "+card.description+"\n"+created.description()
);