In preparation for adding a new passkey module and key, shared code from individual modules and keys will be moved into abstract classes
Refactor
- Interface IModule -> abstract class Module
- Interface IAuthKey -> abstract class AuthKey
Move shared code from individual modules into abstract classes
- Shared DB fields (ID, creation timestamp)
- Possibly isEnabled() and newKey()? If we make subclasses of Module explicitly point to their corresponding AuthKey subclass
- Change Module::verify() to just iterate over keys and delegate to AuthKey::verify()
- Change OATHManage::isModuleEnabled() to a method on modules that check if they are enabled