Skip to content

Mobilpadde/moths

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

moths 🪰

emojicon authentications

Go Reference codecov

what (is this 💩)

Emojies as TOTP, because.

why 🥲

We all could use a little more emotion in our lives 🤗 Go show the world how you really feel!

It's a great companion for any app that uses 2FA - as every app should! Make your app's 2FA as star-striking as your app! 🤩

So whether your mascot is:

  1. 🦋
  2. 🐰
  3. 🐶
  4. 🐕
  5. 🐷
  6. 🐥
  7. 🐱
  8. 🐣
  9. 🐻
  10. 🐈

moths has got you covered! 🪰

P.S. These emojies wasn't chosen by accident (random), they really are the 10 utmost frequently used (animal) emojies of 2021

Show that sparkly emojies ✨

how 🧑‍💼

Running this is quite easy 💨

  1. Download the dependencies ⏬

Note

You can skip this step and let the run-command handle it - but you knew that 🧠

go mod download
  1. Add a secret 🔐

Warning

This is just an one-liner to write the base64-encoded sha256 of moths into .env. Make sure to use something better 🤷

You don't need to use environment variables, this is just my choice.

echo 'moths' | sha256sum | base64 -w 0 | { echo -n "MOTHS_SECRET=$(cat -)" } > .env
  1. Run the program 🏃
go run .

As I said, easy-peasy! 💖

options 👓

To setup a new code-generator, you must call token.NewGenerator as

gen, err := token.NewGenerator()

But I do recommend to add some customization, as it will fail immediately if not.

Like so

gen, err := token.NewGenerator(
  token.OptionWithSecret(secret), // Any string as the secret
  token.OptionWithPeriod(time.Second), // Each code is only valid for a second
  token.OptionWithAmount(6), // Each must is always `6` emojies
  token.OptionWithEmojies(emojies.CATS), // A pure slice of cats
  token.OptionWithTime(time.Now().AddDate(10, 0, 0)), // 10 years into the future
)

There are a few options to choose from, these are

Warning

Options marked with an asterix (*) are required!

generating 🖇

Now that you have a sparkly new code-generator, you can use it as

code, err := gen.Next()

Now that you have a code, you can use its functions

validating 🧑‍🔬

To validate, you'll need both the code (or the token) and the generator

str := code.String() // Ideally you'd get this from the user
ok := gen.Validate(str)

emojies 😻

To use your own set of known emojies, you can reference the cat-emojies.

I've chosen the cats as it's a great reference, both for creating and re-using.

If we would like to add an easter-egg to a purebred slice of cats, we could do it like:

// A slice of cat emojies and a single hotdog 🌭
var catsHotdog = []string{
	emoji.GrinningCat.String(),
	emoji.GrinningCatWithSmilingEyes.String(),
	emoji.CatWithTearsOfJoy.String(),
	emoji.SmilingCatWithHeartEyes.String(),
	emoji.CatWithWrySmile.String(),
	emoji.KissingCat.String(),
	emoji.WearyCat.String(),
	emoji.CryingCat.String(),
	emoji.PoutingCat.String(),

	emoji.HotDog.String(),
}

var CATS_HOTDOG = ToEmojies(catsHotdog)

It doesn't even have to be from the emoji-package, simply make a slice of your desired emojies, and use the ToEmojies-func. Then provide this as an argument in token.OptionWithEmojies(CATS_HOTDOG) when calling the token.NewGenerator().

example 🤷

Check out main.go for an example

show-case 🕺

Three iterations of moths

history ✍

future 🔮

  • Add Skew Intervals 🕰️
  • Add better documentation 🫢
  • Get into fixing geatures 🤦
  • Export / Import - d1bb4cc
  • Rename moth to something better (OTP / Token) - 6105848
  • Rename the Moths-struct to Generator - 4c973ef
    • This means renaming the otp-package as well? - fcdf295
  • Get pkg.go.dev up-to-date - Works with v6

shoutout 📢💨

I couldn't have done it without these lovely OSS 🦾

In no specific order 🤷