Finished off the recovery functionality as well as removed the hashing functions from the User model into its own class to further stick to sole responsibility principle.