Merge pull request #708 from mwhudson/no-ssh-help-bionic

do not show ssh help menu item at all if we cannot determine password…
This commit is contained in:
Dimitri John Ledkov 2020-04-15 16:50:54 +01:00 committed by GitHub
commit 40ec09a50c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 47 additions and 39 deletions

View File

@ -207,7 +207,6 @@ class HelpMenu(WidgetWrap):
self.parent = parent self.parent = parent
close = header_btn(parent.base_widget.label) close = header_btn(parent.base_widget.label)
about = menu_item(_("About this installer"), on_press=self._about) about = menu_item(_("About this installer"), on_press=self._about)
ssh_help = menu_item(_("Help on SSH access"), on_press=self._ssh_help)
keys = menu_item( keys = menu_item(
_("Keyboard shortcuts"), on_press=self._shortcuts) _("Keyboard shortcuts"), on_press=self._shortcuts)
drop_to_shell = menu_item( drop_to_shell = menu_item(
@ -220,8 +219,11 @@ class HelpMenu(WidgetWrap):
color, color,
drop_to_shell, drop_to_shell,
keys, keys,
ssh_help,
} }
if self.parent.ssh_password is not None:
ssh_help = menu_item(
_("Help on SSH access"), on_press=self._ssh_help)
buttons.add(ssh_help)
local_title, local_doc = parent.app.ui.body.local_help() local_title, local_doc = parent.app.ui.body.local_help()
if local_title is not None: if local_title is not None:
local = menu_item( local = menu_item(
@ -251,10 +253,15 @@ class HelpMenu(WidgetWrap):
view_errors, view_errors,
hline, hline,
about, about,
ssh_help, ]
if self.parent.ssh_password is not None:
entries.append(ssh_help)
entries.extend([
hline, hline,
color, color,
] ])
rows = [ rows = [
Columns([ Columns([
@ -330,22 +337,6 @@ class HelpMenu(WidgetWrap):
_("About the installer"), _("About the installer"),
template.format(**info))) template.format(**info)))
def get_installer_password(self):
if self.parent.app.opts.dry_run:
fp = io.StringIO('installer:rAnd0Mpass')
else:
try:
fp = open("/var/log/cloud-init-output.log")
except FileNotFoundError:
fp = io.StringIO('')
with fp:
for line in fp:
if line.startswith("installer:"):
return line[len("installer:"):]
return None
def get_global_addresses(self): def get_global_addresses(self):
ips = [] ips = []
net_model = self.parent.app.base_model.network net_model = self.parent.app.base_model.network
@ -357,12 +348,10 @@ class HelpMenu(WidgetWrap):
texts = [_(SSH_HELP_PROLOGUE), ""] texts = [_(SSH_HELP_PROLOGUE), ""]
password = self.get_installer_password()
if password:
ips = self.get_global_addresses() ips = self.get_global_addresses()
if len(ips) > 0: if len(ips) > 0:
if len(ips) > 1: if len(ips) > 1:
texts.append(_(SSH_HELP_MULTIPLE_ADDRESSES)) texts.append(rewrap(_(SSH_HELP_MULTIPLE_ADDRESSES)))
texts.append("") texts.append("")
for ip in ips: for ip in ips:
texts.append(Text( texts.append(Text(
@ -371,15 +360,14 @@ class HelpMenu(WidgetWrap):
texts.append(_(SSH_HELP_ONE_ADDRESSES).format( texts.append(_(SSH_HELP_ONE_ADDRESSES).format(
ip=str(ips[0]))) ip=str(ips[0])))
texts.append("") texts.append("")
texts.append(SSH_HELP_EPILOGUE.format(password=password)) texts.append(
rewrap(_(SSH_HELP_EPILOGUE).format(
password=self.parent.ssh_password)))
texts.append("") texts.append("")
texts.append(Text(host_key_info())) texts.append(Text(host_key_info()))
else: else:
texts.append("") texts.append("")
texts.append(_(SSH_HELP_NO_ADDRESSES)) texts.append(_(SSH_HELP_NO_ADDRESSES))
else:
texts.append("")
texts.append(SSH_HELP_NO_PASSWORD)
self._show_overlay( self._show_overlay(
SimpleTextStretchy( SimpleTextStretchy(
@ -417,11 +405,29 @@ class HelpMenu(WidgetWrap):
self.parent.app.ui.body)) self.parent.app.ui.body))
def get_installer_password(app):
if app.opts.dry_run:
fp = io.StringIO('installe:rAnd0Mpass')
else:
try:
fp = open("/var/log/cloud-init-output.log")
except FileNotFoundError:
fp = io.StringIO('')
with fp:
for line in fp:
if line.startswith("installer:"):
return line[len("installer:"):]
return None
class HelpButton(PopUpLauncher): class HelpButton(PopUpLauncher):
def __init__(self, app): def __init__(self, app):
self.app = app self.app = app
self.btn = header_btn(_("Help"), on_press=self._open) self.btn = header_btn(_("Help"), on_press=self._open)
self.ssh_password = None
self.showing_something = False self.showing_something = False
super().__init__(self.btn) super().__init__(self.btn)
@ -430,6 +436,8 @@ class HelpButton(PopUpLauncher):
self.open_pop_up() self.open_pop_up()
def create_pop_up(self): def create_pop_up(self):
if self.ssh_password is None:
self.ssh_password = get_installer_password(self.app)
self._menu = HelpMenu(self) self._menu = HelpMenu(self)
return self._menu return self._menu