Refactor login logic to the login widget.

**DO NOT MERGE**

A little work needs to be done yet.
I think this is an usability feature, the only thing that does is to disable (or enable) the "Login" button if the user didn't filled all the needed fields.
Except the case of the provider that we need to programatically fill it since we get that data from the 'providers' widget.

Maybe I'm missing something?