Bugfix: fix bugs in auth process
Refactor OAuth sequence and main page display
Refactor Oauth and create private repo functionality

* Make all HTTP requests to the Github API go through a single function
* Make all result sorting go through a single function
* Enable admin and user authentication via the Github API
* Refactor the 'create private repo' class
Style code to flake8 standards
Refactor sorting of results into a single function

Create a function that accepts the sorting method as a parameter.
Sorting method can be 'single', 'multiple' or 'teams', depending on
the type of results being sorted.
Refactor all functions in app to use BaseHandler methods

* Make all function in the `main.py` file use the `query` and `sort_results` methods of the `BaseHandler` class
* Reorder the parameters of the `query` method so that `payload` is optional
* Make all functions run out of the `main.py` file, thus making `ghrequests.py` redundant
* `ghrequests.py` has not been deleted as of yet, since it may be useful for future reference
Add membership functionality

* Create handler in `main.py` to get members belonging to a team
* Create handler in `main.py` to remove members from a team
* Create handler in `main.py` to add members to a team
* Create functions in `main.js` to send requests to `main.py`
* Edit `index.html` so that HTML structure exists to add/remove members
* Alter function calls in `main.js` so that no conflicts exist when binding events
Enable batch add of organization members to a team

* `push` members into an array of usernames
* `stringify` the array so that it can be sent correctly via AJAX
* decode the JSON object when it hits `main.py`
* loop through the list of usernames and send a `PUT` request for each
Remove team members from list of all members

* move the 'list all members' code to the ChangeTeam handler for better code
organization in `main.py`
* in `main.js`, move the code that displays all members to the `change_team`
function to enable removal of dupes
* create a sorting function that checks for dupes in `team_members` and then
doesn't add a result to `all_teams` if there is a dupe
Updated app.yaml with global vars
Fixes #12. Auth admin during app setup
Create logs for all actions that cause changes

* Create a log function in BaseHandler that stores logs in ndb
* Create an ndb model in `model.py` which auto-generates a key and a datetime
* Add calls to the log function in `main.py` for all actions that cause change
* Modify `main.js` to supply team names to the log calls in `main.py`
* Fix bug in `index.html`
Add functionality to retrieve logs from ndb

* Set javascript handler to make AJAX call to retrieve and display logs
* Write class in `main.py` to query ndb and return a list of logs
* Enable functionality to filter logs in ndb
* Add front end UI elements to allow user to filter by datetime
* Front end UI not yet connected to back end filtering process
Enable filtering functionality for logs

* Call script from `base.html` to populate date select fields
* Write script to fill date select fields
* Validate fields and send through a value to `main.py`
Enable filtering of logs by date and time

* Grab date & time from user selection in UI
* Parse the data in JS and pass to `main.py`
* Parse data in `main.py`
* Construct timedate objects using the incoming data
* Decide which query to perform based on which values exist
* Clean up code with Flake8
Enable email logs to any email address

* Send email address and filtered logs to emailing function via JSON
* Validate email address with `validate_email` library
* Send error message to user via UI if email address invalid
* Send success message to user via UI if email sends successfully
* Format logs so that each log appears on a new line in email
Enable CRON job to send daily logs digest

* Create a CRON job that runs every 24 hours
* Grab all logs from 12 hours before the CRON job to 12 hours after the CRON job
* Format that digest of logs into email friendly format
* Email the digest to the address specified in the environment variables
* Restrict access to CRON url so that non-admin users cant activate it
* Ignore all `.cron.yaml.swp` files
Delete all business logic files to enable a full rewrite of the app
Removed secret keys from app.yaml

* Storing secret keys as environment variables is not secure
* Swapping them out programmatically is not a clean method
* A better option: https://developers.google.com/api-client-library/python/guide/aaa_client_secrets
Add `client_secrets.json` to `.gitignore` to implement Google secret keys workflow

* Secret keys should not be stored as environment variables
* Google secret keys workflow is much cleaner and better documented
* For more info: https://developers.google.com/api-client-library/python/guide/aaa_client_secrets