parent
ad38588141
commit
155c96c500
@ -0,0 +1,34 @@ |
||||
import os |
||||
|
||||
import requests |
||||
from zope import component |
||||
|
||||
from ...utils import write_db_creds |
||||
from ..ResultView import ResultView |
||||
from ceo_common.interfaces import IConfig |
||||
|
||||
|
||||
class CreateDatabaseResultView(ResultView): |
||||
def show_result(self, resp: requests.Response): |
||||
password = resp.json()['password'] |
||||
db_type = self._model.db_type |
||||
db_type_name = 'MySQL' if db_type == 'mysql' else 'PostgreSQL' |
||||
db_host = component.getUtility(IConfig).get(f'{db_type}_host') |
||||
user_dict = self._model.user_dict |
||||
username = user_dict['uid'] |
||||
filename = os.path.join(user_dict['home_directory'], f"ceo-{db_type}-info") |
||||
wrote_to_file = write_db_creds( |
||||
filename, user_dict, password, db_type, db_host) |
||||
self._add_text(f'{db_type_name} database created.', center=True) |
||||
self._add_text() |
||||
self._add_text((f'''Connection Information: |
||||
|
||||
Database: {username} |
||||
Username: {username} |
||||
Password: {password} |
||||
Host: {db_host}''')) |
||||
self._add_text() |
||||
if wrote_to_file: |
||||
self._add_text(f"These settings have been written to {filename}.") |
||||
else: |
||||
self._add_text(f"We were unable to write these settings to {filename}.") |
@ -0,0 +1,44 @@ |
||||
from asciimatics.widgets import Layout, Text |
||||
|
||||
from ...utils import http_post, http_get, defer |
||||
from ..CeoFrame import CeoFrame |
||||
|
||||
|
||||
class CreateDatabaseView(CeoFrame): |
||||
def __init__(self, screen, width, height, model): |
||||
super().__init__( |
||||
screen, height, width, model, 'CreateDatabase', |
||||
save_data=True, |
||||
) |
||||
layout = Layout([100], fill_frame=True) |
||||
self.add_layout(layout) |
||||
self._username = Text("Username:", "uid") |
||||
layout.add_widget(self._username) |
||||
self.add_buttons( |
||||
back_btn=True, next_scene='Confirm', |
||||
on_next=self._next) |
||||
self.fix() |
||||
|
||||
def _target(self): |
||||
username = self._username.value |
||||
db_type = self._model.db_type |
||||
resp = http_get(f'/api/members/{username}') |
||||
if not resp.ok: |
||||
return resp |
||||
user_dict = resp.json() |
||||
self._model.user_dict = user_dict |
||||
return http_post(f'/api/db/{db_type}/{username}') |
||||
|
||||
def _next(self): |
||||
username = self._username.value |
||||
if not username: |
||||
return |
||||
if self._model.db_type == 'mysql': |
||||
db_type_name = 'MySQL' |
||||
else: |
||||
db_type_name = 'PostgreSQL' |
||||
self._model.confirm_lines = [ |
||||
f'Are you sure you want to create a {db_type_name} database for {username}?', |
||||
] |
||||
self._model.deferred_req = defer(self._target) |
||||
self._model.result_view_name = 'CreateDatabaseResult' |
@ -0,0 +1,29 @@ |
||||
import os |
||||
|
||||
import requests |
||||
from zope import component |
||||
|
||||
from ...utils import write_db_creds |
||||
from ..ResultView import ResultView |
||||
from ceo_common.interfaces import IConfig |
||||
|
||||
|
||||
class ResetDatabasePasswordResultView(ResultView): |
||||
def show_result(self, resp: requests.Response): |
||||
password = resp.json()['password'] |
||||
db_type = self._model.db_type |
||||
db_type_name = 'MySQL' if db_type == 'mysql' else 'PostgreSQL' |
||||
db_host = component.getUtility(IConfig).get(f'{db_type}_host') |
||||
user_dict = self._model.user_dict |
||||
username = user_dict['uid'] |
||||
filename = os.path.join(user_dict['home_directory'], f"ceo-{db_type}-info") |
||||
wrote_to_file = write_db_creds( |
||||
filename, user_dict, password, db_type, db_host) |
||||
self._add_text(f'The new {db_type_name} password for {username} is:') |
||||
self._add_text() |
||||
self._add_text(password) |
||||
self._add_text() |
||||
if wrote_to_file: |
||||
self._add_text(f"The settings in {filename} have been updated.") |
||||
else: |
||||
self._add_text(f"We were unable to update the settings in {filename}.") |
@ -0,0 +1,44 @@ |
||||
from asciimatics.widgets import Layout, Text |
||||
|
||||
from ...utils import http_post, http_get, defer |
||||
from ..CeoFrame import CeoFrame |
||||
|
||||
|
||||
class ResetDatabasePasswordView(CeoFrame): |
||||
def __init__(self, screen, width, height, model): |
||||
super().__init__( |
||||
screen, height, width, model, 'ResetDatabasePassword', |
||||
save_data=True, |
||||
) |
||||
layout = Layout([100], fill_frame=True) |
||||
self.add_layout(layout) |
||||
self._username = Text("Username:", "uid") |
||||
layout.add_widget(self._username) |
||||
self.add_buttons( |
||||
back_btn=True, next_scene='Confirm', |
||||
on_next=self._next) |
||||
self.fix() |
||||
|
||||
def _target(self): |
||||
username = self._username.value |
||||
db_type = self._model.db_type |
||||
resp = http_get(f'/api/members/{username}') |
||||
if not resp.ok: |
||||
return resp |
||||
user_dict = resp.json() |
||||
self._model.user_dict = user_dict |
||||
return http_post(f'/api/db/{db_type}/{username}/pwreset') |
||||
|
||||
def _next(self): |
||||
username = self._username.value |
||||
if not username: |
||||
return |
||||
if self._model.db_type == 'mysql': |
||||
db_type_name = 'MySQL' |
||||
else: |
||||
db_type_name = 'PostgreSQL' |
||||
self._model.confirm_lines = [ |
||||
f'Are you sure you want to reset the {db_type_name} password for {username}?', |
||||
] |
||||
self._model.deferred_req = defer(self._target) |
||||
self._model.result_view_name = 'ResetDatabasePasswordResult' |
@ -0,0 +1 @@ |
||||
|
Loading…
Reference in new issue