Saturday, September 9, 2017

Change Log: 2.29.654

Illuminated Lady (work in progress).
Release 2.29.654 is another pretty big one, so be on the lookout for issues.

The release is primarily focused on back-end enhancements, but the one major user-facing aspect of the legacy app that does change in this one is the way the login screen works.

And boy howdy does it change.

As I teased in my last post, the whole sign-in experience, from presentation to the back-end/API stuff, has been totally redone and massively upgraded. The legacy app now authenticates versus the API for everything, including password resets.

In other UI/UX news, release 2.29.654 also address a couple of performance issues that have been escalated recently.

There's a ton of stuff in this release: hit the jump for more details (and another funny work in progress shot on my Illuminated Lady)!

And thanks for using the Manager!

Corrections and Fixes

  1. Resolved an issue where Settlement Sheet drop-down/pickers were not initializing. -AK
  2. Settlement Sheet Locations controls now use settlement.sheet instead of deprecated settlement_sheet element.
  3. Addressed a Settlement Sheet issue where the Innovation Deck would sometimes fail to load and have to retry (one or more times) after adding an innovation.
  4. Addressed an issue where removing an item from an asset list on the Survivor Sheet or Settlement Sheet would fail to re-add it to the picker (e.g. so that the user could add it again).
  5. Addressed an issue where Settlement Sheet controls would fail to work due to asynchronous API calls made by initialize() and reinitialize() stepping on one another. -WayForger
  6. Addressed page load failures due to JS/API conflicts.
  7. The Survival Limit tooltip on the Survival Sheet now updates without a page reload/refresh.
  8. Addressed a presentation...annoyance where a "random" Fighting Art would show a weird, broken-looking "card" element. Now it shows a card with a spinner, e.g. to indicate that it's "thinking".
  9. Fixed an issue where the burger/sidenav Expansions controls could sometimes throw JS console errors because they used the hasattr() method before the scope could have caught up with them
  10. Addressed a tablet resolution presentation issue where the "no survivors in this settlement" warning box blocked some controls on the Campaign Summary view.
  11. Fixed a bug in the Survivor Sheet where un-checking the "Retired" box did not work under certain circumstances. -WayForger
  12. Fixed a couple of typos in the settlement event logger.
  13. Addressed an issue affecting Settlement Sheet Innovations and Locations where their ng-repeat was iterating over settlement_sheet instead of settlement.sheet and not responding appropriately to updates.

Application Improvements

  1. Created login.py in the legacy app to manage all API-based login/authentication operations.
  2. Deprecated the legacy app's html.login methods (burn the ships).
  3. Updated index in the legacy app to call login.render() any time a user hits the server without a session in his cookie.
  4. Removed the deprecated settings.cfg element 'static_root' from the legacy app settings. 
  5. Created a new AngularJS app for signing in, registering, resetting password.
    1. built a new AngularJS controls/app
    2. Updated session.py to process recovery requests
    3. Added API routes to support getting a code and resetting
    4. Updated the new login.py module to be able to render the unique recovery screen/view
  6. Added the "Report an Issue" page to the dev blog here.
  7. Moved html.authenticate_by_form() method from html.py (where it never belonged) to the new login.py. module and made it a method of a new class called AuthObject that basically does sign-in stuff. Deprecated 'password_again' check from it, since we will no longer do password resets through the legacy webapp.
  8. Also relocated set_cookie_js() from html.py to login.py module's new AuthObject class.
  9. Re-implemented login via session.py so that users with expired cookies and no cookies can create new sessions directly
  10. Deprecated the admin.create_user_user() method
  11. Moved initAssetLists() to the root scope (i.e. in kdmManager.js) and refactored it to work for either the Settlement Sheet or the Survivor Sheet
  12. Refactored survivorSheet.js and settlementSheet.js to call the kdmManager.rootController.initAssetLists() method when refreshing assets.
  13. Deprecated the kdmManager.js factory called apiService() (because it was overkill). Refactored getJSONfromAPI() method to just return a normal $http.get() promise.
  14. Updated the kdmManager.js hasattr() shortcut function to be way more descriptive when it fails.
  15. Deprecated the kdmManager.js method loadSettlement() and replaced calls to it with calls to getJSONfromAPI(), which is the golden boy now that it's been freshly reimplemented.
  16. DRYed up the survivorSheet.js and settlementSheet.js modules by removing all calls to $scope.reinitialize() and enhancing postJSONtoAPI() to just automatically sleep for a second and reinitialize.
  17. Added a settlementSheetcontroller method to survivorSheet.js to handle misc. Settlement Sheet updates:
    1. added updateAttrib() method to the controller
    2. added setAttrib() method to the controller
    3. tied them to the API
  18. Refactored Settlement Sheet Survival Limit, Population and Death Count to use the new JS/API controls.
  19. Removed support from the legacy webapp for updating the settlement's name from the Settlement Sheet; replaced the controls with an API call.
  20. The settlement event log is now updated in real-time as settlement assets (e.g. survivors, the settlement sheet, etc.) are updated/managed. No more reloading the page to see the updated event log!
  21. Deprecated the update_name() method from the legacy webapp assets.py module.
  22. Deprecated the get_survivor_attribute() method from assets.py as well.
  23. Deprecated the old session.recover_password() method

API Development

  1. Requests to the /login route that do not have a JSON payload get rejected with a special 422 message.
  2. The Admin Panel now pops a prompt and lets you copy a user's OID to the clipboard when you click on it in the Recent Activity box
  3. Models.__init__() runs the base class set_request_params() method before it calls the new() method. Removed those calls from the Survivor and Settlement subclass new() methods (for DRYness).
  4. Added a new() method to the models.users.User class. Added some basic validation and invalid usage exceptions.
  5. Created new Settlement class methods update_attribute() and set_attribute() and documented them.
  6. Added some quick duck-typing to the Settlement class baseline() method (e.g. for Survival Limit, Population, Death Count, etc.)
  7. Removed the call in the Survivor class to the deprecated Models.get_asset() method.
  8. Added the set_name() method to the Settlement class methods. Added some nice event logging around it. Also, we're stripping incoming name values now.
  9. Added password recovery and update routes and methods:
    1. added initiate_password_recovery() method to users.py
    2. added reset_password() method to users.py
    3. added an update_password() method to the User class
    4. created a new form email for password reset requests
  10. Enhanced the Models.check_request_params() method to include required keys in its failure message, which, in turn, means that the InvalidUsage() exception now returns 400's with must more robust messages. -khoa
  11. Un-retiring a Survivor now deletes the 'retired' attribute from their mdb record, since it's not part of the baseline data model.






No comments:

Post a Comment