Rough out 2FA support

This is a work in progress. I would like to test it before you merge it.

Alternatively @rogerhu can test it as well.