Registration App
Merge branch 'sprint9' of https://github.com/Innovation-Toolkit/midas into login-register
Notification Enhancements

* Added DKIM settings to emails
* Added SES settings for emails
* Refactored notification services into separate files
Pull volunteer out to button

By Mollie's suggestion, make 'Volunteer' a button at the bottom
of the opportunity list.  Make it a call to action.

Also change "owner" to "requestor".
Add ModalAlert comp; add volunteer dialog

By having a standardized alert component, can pop up
a modal for verifying things with the user (otherwise
known as "are you sure?" dialogs).  Implement it for
volunteers, so that they have to confirm they have
supervisory approval.

Addresses issue #65.

Puts in the framework for issue #84.
Add "are you sure" for close proj/opp

This addresses issue #84 and prevents
accidental closures.
Fix project cards to show counts

Fix issue #100 with an absolutely positioned
div that puts the counts at the bottom of the card.
Merge branch 'login-register' of git://github.com/eGT-Labs/midas into eGT-Labs-login-register
Clean up registration app

Move all the registration stuff into the login controller
and view.  Render the whole thing on load, and then switch
between login and register using hide/show.  Clean up the
form, and use a more 'consumery' acceptance to terms
and conditions.  Removed inline style definitions.

A lot more to do...

- need to put a config option for the terms and conditions link.
- need to ask user for more fields (location, agency)
- need to check if username is valid (from profile form)
- need to verify password rules
- need to verify that passwords match
- need to seperate backend login from register (different endpoint)

...
Remove registration view/template

No longer needed; integrated to login view/template.
Add actual validation to register form

Validation now checks that the password is non-empty,
and that the password confirmation field matches the
password entered.

Also added a validation method to check that a checkbox
has been checked.  Need this to make sure someone agrees
to the terms and conditions.

For pull request #105.
Check if username is valid (#105)

The register app now checks with the backend as the user types
to find out if the username is valid.

Added a 'button' validator that checks if a sidecar button
is in the success state -- useful for these inputs where you
can provide real time feedback to the user.
Seperate local & register apis; look up by email

The /api/auth/local api is now used solely for authentication
and will not create an account if it does not exist

The /api/auth/register api will create a new account
if it doesn't exist.  If an account does exist, it will
error out of the process indicating that the account exists.

Logging in and registering now both looks for multiple
email addresses.  This way you can log in with any of the email
addresses registered with your account.

Addresses pull request / issue #105.
Update messages; don't pass through errors

For security, we shouldn't pass through the underlying
error to the user.  Instead, tell them the email address
or password is invalid.

Similarly, since we're only using email addresses now and
not usernames, the error message should mention the
email address.
Add password validation

This commit implements two major aspects of password validation:

1. A utility function that makes sure a password meets OWASP
security rules as specified in
https://www.owasp.org/index.php/Password_length_%26_complexity
and
https://www.owasp.org/index.php/Password_length_%26_complexity
Specifically, passwords must:
- not repeat part of the email address
- have lowercase
- have uppercase
- have a number
- have a symbol
- be at least 8 characters

2. UI to tell a user what part of their password doesn't
meet the password rules.  If you've ever tried to create a
password in a system that doesn't give you visual feedback,
it is really annoying and frustrating.  Instead, tell people
why their password works or doesn't.

Addresses the pull request in #105 and issue comments
from @jhinton in #75.
Logic flaw in username check

Use the new user utility to check if any account
exists with this username/email

The check for the currently logged in user didn't
work if there was no logged in user.  So clean up that
logic.
Perform user registration backend validation

The backend should also validate user creation rules so that
someone can't just hack the api.  This means checking that
a valid email is specified and that the password meets
password rules.

Addresses #75 and #105.
Stylize login form

Make it a bit more like most consumer services.

The new model -- "sign up now" button from a splash page
will go to the register form (not login).  Login is the
standard pinterest-style with a small sign up now at the
bottom.

Make corners less rounded, and make bottom of the form a different
color (grey) than the rest.
Only check against the most recent password

Since we can store multiple password records for a user,
check that their password matches with the most recent
successfully set password.
Use new project default images

From @sharonlo.

Posted on the wiki:
https://github.com/Innovation-Toolkit/midas/wiki/Styleguide