moths ๐ชฐ
emojicon authentications
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:
- ๐ฆ
- ๐ฐ
- ๐ถ
- ๐
- ๐ท
- ๐ฅ
- ๐ฑ
- ๐ฃ
- ๐ป
- ๐
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 ๐จ
- Download the dependencies โฌ
Note
You can skip this step and let the run
-command handle it - but you knew that ๐ง
go mod download
- 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 ๐คท
echo 'moths' | sha256sum | base64 -w 0 | { echo -n "MOTHS_SECRET=$(cat -)" } > .env
Note
You don't need to use environment variables, this is just my choice.
- Run the program ๐
go run .
As I said, easy-peasy! ๐
options ๐
To setup a new moth
-generator, you must call moths.NewMoths
as
gen, err := moths.NewMoths()
But I do recommend to add some customization, as it will fail immediately if not.
Like so
gen, err := moths.NewMoths(
moths.OptionWithSecret(secret), // any string as the secret
moths.OptionWithInterval(time.Second), // Each is only valid for a second
moths.OptionWithAmount(6), // Each must is always `6` emojies
moths.OptionWithEmojies(emojies.CATS), // A pure slice of cats
moths.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 moth
-generator, you can use it as
otp, err := gen.Next()
Now that you have an OTP
, you can use its functions
validating ๐งโ๐ฌ
To validate, you'll need both the moth
(or the token
) and the generator
token := otp.String() // Ideally you'd get this from the user
ok := gen.Validate(token)
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 pure bred 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 moths.OptionWithEmojies(CATS_HOTDOG)
when calling the moths.NewMoths()
.
example ๐คท
Check out main.go
for an example
show-case ๐บ
history โ
future ๐ฎ
- Rename
moth
to something better (OTP
/ Token
)
- Add better documentation ๐ซข
- Rename the
gen
-variable to otp
- This means renaming the
otp
-package as well?
- Get pkg.go.dev up-to-date
shoutout ๐ข๐จ
I couldn't have done it without these lovely OSS ๐ฆพ
In no specific order ๐คท