implement ResetPasswordView
continuous-integration/drone/push Build is failing
Details
continuous-integration/drone/push Build is failing
Details
This commit is contained in:
parent
d3c98e418a
commit
1406899ea2
|
@ -52,4 +52,5 @@ class ConfirmView(CeoFrame):
|
||||||
self._model.resp = self._model.deferred_req()
|
self._model.resp = self._model.deferred_req()
|
||||||
finally:
|
finally:
|
||||||
self.clear_flash_message()
|
self.clear_flash_message()
|
||||||
self.go_to_next_scene('Result')
|
next_scene = self._model.result_view_name or 'Result'
|
||||||
|
self.go_to_next_scene(next_scene)
|
||||||
|
|
|
@ -9,6 +9,7 @@ class Model:
|
||||||
self.views = []
|
self.views = []
|
||||||
self.title = None
|
self.title = None
|
||||||
self.scene_stack = []
|
self.scene_stack = []
|
||||||
|
self.result_view_name = None
|
||||||
self.error_message = None
|
self.error_message = None
|
||||||
# view-specific data, to be used when e.g. resizing the window
|
# view-specific data, to be used when e.g. resizing the window
|
||||||
self._initial_viewdata = {
|
self._initial_viewdata = {
|
||||||
|
@ -32,6 +33,9 @@ class Model:
|
||||||
'GetUser': {
|
'GetUser': {
|
||||||
'uid': '',
|
'uid': '',
|
||||||
},
|
},
|
||||||
|
'ResetPassword': {
|
||||||
|
'uid': '',
|
||||||
|
},
|
||||||
}
|
}
|
||||||
self.viewdata = deepcopy(self._initial_viewdata)
|
self.viewdata = deepcopy(self._initial_viewdata)
|
||||||
# data which is shared between multiple views
|
# data which is shared between multiple views
|
||||||
|
@ -51,6 +55,7 @@ class Model:
|
||||||
self.title = None
|
self.title = None
|
||||||
self.error_message = None
|
self.error_message = None
|
||||||
self.scene_stack.clear()
|
self.scene_stack.clear()
|
||||||
|
self.result_view_name = None
|
||||||
for view in self.views:
|
for view in self.views:
|
||||||
if hasattr(view, '_ceoframe_on_reset'):
|
if hasattr(view, '_ceoframe_on_reset'):
|
||||||
view._ceoframe_on_reset()
|
view._ceoframe_on_reset()
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
from ..ResultView import ResultView
|
||||||
|
|
||||||
|
import requests
|
||||||
|
|
||||||
|
|
||||||
|
class ResetPasswordResultView(ResultView):
|
||||||
|
def show_result(self, resp: requests.Response):
|
||||||
|
result = resp.json()
|
||||||
|
uid = self._model.viewdata['ResetPassword']['uid']
|
||||||
|
self._add_text(f'The new password for {uid} is:', center=True)
|
||||||
|
self._add_text()
|
||||||
|
self._add_text(result['password'], center=True)
|
|
@ -0,0 +1,31 @@
|
||||||
|
from asciimatics.widgets import Layout, Text, Label
|
||||||
|
|
||||||
|
from ...utils import defer, http_post
|
||||||
|
from ..CeoFrame import CeoFrame
|
||||||
|
|
||||||
|
|
||||||
|
class ResetPasswordView(CeoFrame):
|
||||||
|
def __init__(self, screen, width, height, model):
|
||||||
|
super().__init__(
|
||||||
|
screen, height, width, model, 'ResetPassword',
|
||||||
|
save_data=True,
|
||||||
|
)
|
||||||
|
layout = Layout([100], fill_frame=True)
|
||||||
|
self.add_layout(layout)
|
||||||
|
layout.add_widget(Label('Enter the username of the user whose password will be reset:'))
|
||||||
|
self._username = Text(None, "uid")
|
||||||
|
layout.add_widget(self._username)
|
||||||
|
|
||||||
|
self.add_buttons(
|
||||||
|
back_btn=True,
|
||||||
|
next_scene='Confirm', on_next=self._next)
|
||||||
|
self.fix()
|
||||||
|
|
||||||
|
def _next(self):
|
||||||
|
uid = self._username.value
|
||||||
|
self._model.viewdata['ResetPassword']['uid'] = uid
|
||||||
|
self._model.confirm_lines= [
|
||||||
|
f"Are you sure you want to reset {uid}'s password?",
|
||||||
|
]
|
||||||
|
self._model.deferred_req = defer(http_post, f'/api/members/{uid}/pwreset')
|
||||||
|
self._model.result_view_name = 'ResetPasswordResult'
|
|
@ -15,6 +15,8 @@ from .members.AddUserView import AddUserView
|
||||||
from .members.GetUserView import GetUserView
|
from .members.GetUserView import GetUserView
|
||||||
from .members.GetUserResultView import GetUserResultView
|
from .members.GetUserResultView import GetUserResultView
|
||||||
from .members.RenewUserView import RenewUserView
|
from .members.RenewUserView import RenewUserView
|
||||||
|
from .members.ResetPasswordView import ResetPasswordView
|
||||||
|
from .members.ResetPasswordResultView import ResetPasswordResultView
|
||||||
|
|
||||||
|
|
||||||
def unhandled(event):
|
def unhandled(event):
|
||||||
|
@ -47,6 +49,8 @@ def screen_wrapper(screen, last_scene, model):
|
||||||
('RenewUser', RenewUserView(screen, width, height, model)),
|
('RenewUser', RenewUserView(screen, width, height, model)),
|
||||||
('GetUser', GetUserView(screen, width, height, model)),
|
('GetUser', GetUserView(screen, width, height, model)),
|
||||||
('GetUserResult', GetUserResultView(screen, width, height, model)),
|
('GetUserResult', GetUserResultView(screen, width, height, model)),
|
||||||
|
('ResetPassword', ResetPasswordView(screen, width, height, model)),
|
||||||
|
('ResetPasswordResult', ResetPasswordResultView(screen, width, height, model)),
|
||||||
]
|
]
|
||||||
scenes = [
|
scenes = [
|
||||||
Scene([view], -1, name=name) for name, view in views
|
Scene([view], -1, name=name) for name, view in views
|
||||||
|
|
Loading…
Reference in New Issue