|Illuminated Lady (work in progress).|
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
- Resolved an issue where Settlement Sheet drop-down/pickers were not initializing. -AK
- Settlement Sheet Locations controls now use settlement.sheet instead of deprecated settlement_sheet element.
- 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.
- 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).
- 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
- Addressed page load failures due to JS/API conflicts.
- The Survival Limit tooltip on the Survival Sheet now updates without a page reload/refresh.
- 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".
- 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
- Addressed a tablet resolution presentation issue where the "no survivors in this settlement" warning box blocked some controls on the Campaign Summary view.
- Fixed a bug in the Survivor Sheet where un-checking the "Retired" box did not work under certain circumstances. -WayForger
- Fixed a couple of typos in the settlement event logger.
- 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.
- Created login.py in the legacy app to manage all API-based login/authentication operations.
- Deprecated the legacy app's html.login methods (burn the ships).
- Updated index in the legacy app to call login.render() any time a user hits the server without a session in his cookie.
- Removed the deprecated settings.cfg element 'static_root' from the legacy app settings.
- Created a new AngularJS app for signing in, registering, resetting password.
- built a new AngularJS controls/app
- Updated session.py to process recovery requests
- Added API routes to support getting a code and resetting
- Updated the new login.py module to be able to render the unique recovery screen/view
- Added the "Report an Issue" page to the dev blog here.
- 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.
- Also relocated set_cookie_js() from html.py to login.py module's new AuthObject class.
- Re-implemented login via session.py so that users with expired cookies and no cookies can create new sessions directly
- Deprecated the admin.create_user_user() method
- 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
- Refactored survivorSheet.js and settlementSheet.js to call the kdmManager.rootController.initAssetLists() method when refreshing assets.
- Deprecated the kdmManager.js factory called apiService() (because it was overkill). Refactored getJSONfromAPI() method to just return a normal $http.get() promise.
- Updated the kdmManager.js hasattr() shortcut function to be way more descriptive when it fails.
- 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.
- 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.
- Added a settlementSheetcontroller method to survivorSheet.js to handle misc. Settlement Sheet updates:
- added updateAttrib() method to the controller
- added setAttrib() method to the controller
- tied them to the API
- Refactored Settlement Sheet Survival Limit, Population and Death Count to use the new JS/API controls.
- Removed support from the legacy webapp for updating the settlement's name from the Settlement Sheet; replaced the controls with an API call.
- 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!
- Deprecated the update_name() method from the legacy webapp assets.py module.
- Deprecated the get_survivor_attribute() method from assets.py as well.
- Deprecated the old session.recover_password() method
- Requests to the /login route that do not have a JSON payload get rejected with a special 422 message.
- 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
- 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).
- Added a new() method to the models.users.User class. Added some basic validation and invalid usage exceptions.
- Created new Settlement class methods update_attribute() and set_attribute() and documented them.
- Added some quick duck-typing to the Settlement class baseline() method (e.g. for Survival Limit, Population, Death Count, etc.)
- Removed the call in the Survivor class to the deprecated Models.get_asset() method.
- 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.
- Added password recovery and update routes and methods:
- added initiate_password_recovery() method to users.py
- added reset_password() method to users.py
- added an update_password() method to the User class
- created a new form email for password reset requests
- 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
- Un-retiring a Survivor now deletes the 'retired' attribute from their mdb record, since it's not part of the baseline data model.