enh: replace 'allowUTF8' (introduced in rc1) by 'fanciness'

This commit is contained in:
Stéphane Lesimple 2021-06-29 17:40:22 +00:00 committed by Stéphane Lesimple
parent 5415ed2793
commit 2193ee487d
4 changed files with 36 additions and 19 deletions

View file

@ -91,7 +91,7 @@ Session policies
Options to customize the established sessions behaviour
- :ref:`displayLastLogin`
- :ref:`allowUTF8`
- :ref:`fanciness`
- :ref:`interactiveModeAllowed`
- :ref:`interactiveModeTimeout`
- :ref:`interactiveModeByDefault`
@ -611,16 +611,20 @@ displayLastLogin
If ``true``, display their last login information on connection to your users.
.. _allowUTF8:
.. _fanciness:
allowUTF8
fanciness
*********
:Type: ``boolean``
:Type: ``string``
:Default: ``true``
:Default: ``full``
When ``true``, The Bastion will use some UTF-8 characters on the output, for a more pleasant experience (for warnings, critical messages, etc.). Note that if the terminal doesn't advertise UTF-8 support, UTF-8 will not be used, even when enabled here.
Customize to which extent the text output by the program will use decorations to enhance human-friendliness and highlight warnings or critical messages. Note that if a given session's terminal doesn't advertise UTF-8 support, UTF-8 will not be used, regardless of what is set here.
- "none": Text will only consist of us-ascii characters
- "basic": UTF-8 characters will be used to draw tables, instead of ---'s, among other things
- "full": Some emoticons may appear to highlight important messages
.. _interactiveModeAllowed:

View file

@ -262,10 +262,14 @@
# DEFAULT: true
"displayLastLogin": true,
#
# allowUTF8 (boolean)
# DESC: When ``true``, The Bastion will use some UTF-8 characters on the output, for a more pleasant experience (for warnings, critical messages, etc.). Note that if the terminal doesn't advertise UTF-8 support, UTF-8 will not be used, even when enabled here.
# DEFAULT: true
"allowUTF8": true,
# fanciness (string)
# DESC: Customize to which extent the text output by the program will use decorations to enhance human-friendliness and highlight warnings or critical messages. Note that if a given session's terminal doesn't advertise UTF-8 support, UTF-8 will not be used, regardless of what is set here.
#
# - "none": Text will only consist of us-ascii characters
# - "basic": UTF-8 characters will be used to draw tables, instead of ---'s, among other things
# - "full": Some emoticons may appear to highlight important messages
# DEFAULT: full
"fanciness": "full",
#
# interactiveModeAllowed (boolean)
# DESC: If set to ``true``, ``--interactive`` mode is allowed. Otherwise, this feature is disabled.

View file

@ -371,7 +371,8 @@ sub osh_header {
my $hostname = Sys::Hostname::hostname();
my $versionline = 'the-bastion-' . $VERSION;
my $output = '';
if (OVH::Bastion::can_use_utf8()) {
my $fanciness = OVH::Bastion::config('fanciness')->value;
if (OVH::Bastion::can_use_utf8() && grep { $fanciness eq $_ } qw{ basic full }) {
my $line = "\N{U+256D}\N{U+2500}\N{U+2500}" . $hostname . "\N{U+2500}" x (80 - length($hostname) - length($versionline) - 6) . $versionline . "\N{U+2500}" x 3 . "\n";
$output .= colored($line, 'bold blue');
$output .= colored("\N{U+2502} \N{U+25B6} $text\n", 'blue');
@ -395,7 +396,8 @@ sub osh_footer {
}
my $output;
if (OVH::Bastion::can_use_utf8()) {
my $fanciness = OVH::Bastion::config('fanciness')->value;
if (OVH::Bastion::can_use_utf8() && grep { $fanciness eq $_ } qw{ basic full }) {
$output = colored("\N{U+2570}" . "\N{U+2500}" x (79 - length($text) - 6) . "</$text>" . "\N{U+2500}" x 3 . "\n", 'bold blue');
}
else {
@ -510,15 +512,15 @@ sub _osh_log {
print $output $params{'text'} . "\n";
}
else {
my $prefix = OVH::Bastion::can_use_utf8() ? "\N{U+2502}" : '~';
my $prefix = OVH::Bastion::can_use_utf8() && OVH::Bastion::config('fanciness')->value eq 'full' ? "\N{U+2502}" : '~';
my $prefixIfNotEmpty = '';
my $color;
if ($params{'type'} eq 'crit') {
$prefixIfNotEmpty = (OVH::Bastion::can_use_utf8() ? "\N{U+26D4}" : "[!]");
$prefixIfNotEmpty = (OVH::Bastion::can_use_utf8() && OVH::Bastion::config('fanciness')->value eq 'full' ? "\N{U+26D4}" : "[!]");
$color = 'red bold';
}
elsif ($params{'type'} eq 'warn') {
$prefixIfNotEmpty = (OVH::Bastion::can_use_utf8() ? "\N{U+2757}" : "[#]");
$prefixIfNotEmpty = (OVH::Bastion::can_use_utf8() && OVH::Bastion::config('fanciness')->value eq 'full' ? "\N{U+2757}" : "[#]");
$color = 'yellow';
}
else {
@ -1056,8 +1058,8 @@ sub do_pamtester {
sub can_use_utf8 {
# only use UTF-8 if allowed in the config, if user LANG seems to support it, and if TERM is defined and not dumb
return (OVH::Bastion::config('allowUTF8')->value && $ENV{'LANG'} && ($ENV{'LANG'} =~ /utf-?8/i) && $ENV{'TERM'} && $ENV{'TERM'} !~ /dumb|unknown/i);
# only use UTF-8 if user LANG seems to support it, and if TERM is defined and not dumb
return ($ENV{'LANG'} && ($ENV{'LANG'} =~ /utf-?8/i) && $ENV{'TERM'} && $ENV{'TERM'} !~ /dumb|unknown/i);
}
1;

View file

@ -133,7 +133,8 @@ sub load_configuration {
{name => 'syslogDescription', default => 'bastion', validre => qr/^([a-zA-Z0-9_.-]+)$/},
{name => 'ttyrecFilenameFormat', default => '%Y-%m-%d.%H-%M-%S.#usec#.&uniqid.&account.&user.&ip.&port.ttyrec', validre => qr/^([a-zA-Z0-9%&#_.-]+)$/},
{name => 'accountExpiredMessage', default => '', validre => qr/^(.*)$/, emptyok => 1},
{name => 'accountExternalValidationProgram', default => '', validre => qr'^([a-zA-Z0-9/$_.-]*)$', emptyok => 1},
{name => 'fanciness', default => 'full', validre => qr/^((none|boomer)|(basic|millenial)|(full|genz))$/},
{name => 'accountExternalValidationProgram', default => '', validre => qr'^([a-zA-Z0-9/$_.-]*)$', emptyok => 1},
)
{
if (!$C->{$o->{'name'}} && !$o->{'emptyok'}) {
@ -226,7 +227,7 @@ sub load_configuration {
options => [
qw{
enableSyslog enableGlobalAccessLog enableAccountAccessLog enableGlobalSqlLog enableAccountSqlLog displayLastLogin
interactiveModeByDefault allowUTF8
interactiveModeByDefault
}
],
},
@ -512,6 +513,11 @@ sub load_configuration {
}
delete $unknownkeys{'ingressToEgressRules'};
# ... normalize fanciness
$C->{'fanciness'} = 'none' if $C->{'fanciness'} eq 'boomer';
$C->{'fanciness'} = 'basic' if $C->{'fanciness'} eq 'millenial';
$C->{'fanciness'} = 'full' if $C->{'fanciness'} eq 'genz';
# OK we're done
$_cache_config = $C;
@ -791,6 +797,7 @@ sub json_load {
# Load file content
my $rawConf;
if (open(my $fh, '<', $file)) {
local $_ = undef;
while (<$fh>) {
chomp;
s/^((?:(?:[^"]*"){2}|[^"]*)*[^"]*)\/\/.*$/$1/; # Remove comment that start with //