diff --git a/fhem/FHEM/42_npmjs.pm b/fhem/FHEM/42_npmjs.pm
index fcb4bc40b..54f0038da 100644
--- a/fhem/FHEM/42_npmjs.pm
+++ b/fhem/FHEM/42_npmjs.pm
@@ -1078,23 +1078,27 @@ sub RetrieveNpmOutput($$) {
# Final parsing error
else {
if ($o) {
+ my $runningUser = getpwuid($<);
if ( $o =~ m/Permission.denied.\(publickey\)\.?\r?\n?$/i ) {
$h->{error}{code} = "E403";
$h->{error}{summary} =
"Forbidden - None of the SSH keys from ~/.ssh/ "
. "were authorized to access remote host";
- $h->{error}{detail} = $o;
+ $h->{error}{detail} = "
$o
";
}
elsif ( $o =~ m/^sudo: /i ) {
$h->{error}{code} = "E403";
$h->{error}{summary} =
"Forbidden - " . "passwordless sudo permissions required";
$h->{error}{detail} =
- $o . "\n\n"
- . "You may add the following lines to /etc/sudoers.d/fhem:\n"
- . " fhem ALL=(ALL) NOPASSWD:SETENV: /usr/bin/npm update *\n"
- . " fhem ALL=(ALL) NOPASSWD:SETENV: /usr/bin/npm install *\n"
- . " fhem ALL=(ALL) NOPASSWD:SETENV: /usr/bin/npm uninstall *";
+ $o
+ . "
"
+ . "You may add the following lines to /etc/sudoers.d/$runningUser:\n"
+ . ""
+ . " $runningUser ALL=(ALL) NOPASSWD:SETENV: /usr/bin/npm update *\n"
+ . " $runningUser ALL=(ALL) NOPASSWD:SETENV: /usr/bin/npm install *\n"
+ . " $runningUser ALL=(ALL) NOPASSWD:SETENV: /usr/bin/npm uninstall *"
+ . "
";
}
elsif ( $o =~
m/(?:(\w+?): )?(?:(\w+? \d+): )?(\w+?): [^:]*?not.found$/i
@@ -1104,18 +1108,18 @@ m/(?:(\w+?): )?(?:(\w+? \d+): )?(\w+?): [^:]*?No.such.file.or.directory$/i
{
$h->{error}{code} = "E404";
$h->{error}{summary} = "Not Found - $3 is not installed";
- $h->{error}{detail} = $o;
+ $h->{error}{detail} = "$o
";
}
else {
$h->{error}{code} = "E501";
$h->{error}{summary} = "Parsing error - " . $@;
- $h->{error}{detail} = $p;
+ $h->{error}{detail} = "$p
";
}
}
else {
$h->{error}{code} = "E500";
$h->{error}{summary} = "Parsing error - " . $@;
- $h->{error}{detail} = $p;
+ $h->{error}{detail} = "$p
";
}
}
}
@@ -1327,10 +1331,10 @@ sub CreateErrorList($) {
$ret .= " | ";
$ret .= '';
$ret .= '';
- $ret .= "| Summary:\n$error->{summary}\n\n | ";
+ $ret .= "Summary: $error->{summary} | ";
$ret .= '
';
$ret .= '';
- $ret .= "| Detail:\n$error->{detail} | ";
+ $ret .= "Detail: $error->{detail} | ";
$ret .= '
';
}
else {
@@ -1359,38 +1363,40 @@ sub CreateInstalledList($$) {
my $header = '';
my $footer = '';
if ($html) {
- $header = '';
+ $header = '';
}
- my $rowOpen = '';
- my $rowOpenEven = '';
- my $rowOpenOdd = '';
- my $colOpen = '';
- my $txtOpen = '';
- my $txtClose = '';
- my $colClose = "\t\t\t";
- my $rowClose = '';
+ my $rowOpen = '';
+ my $rowOpenEven = '';
+ my $rowOpenOdd = '';
+ my $colOpen = '';
+ my $colOpenMinWidth = '';
+ my $txtOpen = '';
+ my $txtClose = '';
+ my $colClose = "\t\t\t";
+ my $rowClose = '';
if ($html) {
- $rowOpen = '';
- $rowOpenEven = '
';
- $rowOpenOdd = '
';
- $colOpen = '| ';
- $txtOpen = "";
- $txtClose = "";
- $colClose = ' | ';
- $rowClose = '
';
+ $rowOpen = '';
+ $rowOpenEven = '
';
+ $rowOpenOdd = '
';
+ $colOpen = '| ';
+ $colOpenMinWidth = ' | ';
+ $txtOpen = "";
+ $txtClose = "";
+ $colClose = ' | ';
+ $rowClose = '
';
}
push @ret,
$rowOpen
- . $colOpen
+ . $colOpenMinWidth
. $txtOpen
. 'Package Name'
. $txtClose
. $colClose
- . $colOpen
+ . $colOpenMinWidth
. $txtOpen
. 'Installed Version'
. $txtClose
@@ -1404,8 +1410,8 @@ sub CreateInstalledList($$) {
next if ( $package eq "undefined" );
my $l = $linecount % 2 == 0 ? $rowOpenEven : $rowOpenOdd;
- $l .= $colOpen . $package . $colClose;
- $l .= $colOpen
+ $l .= $colOpenMinWidth . $package . $colClose;
+ $l .= $colOpenMinWidth
. (
defined( $packages->{$package}{version} )
? $packages->{$package}{version}
@@ -1435,48 +1441,50 @@ sub CreateOutdatedList($$) {
my $header = '';
my $footer = '';
if ($html) {
- $header = '';
+ $header = '';
}
- my $rowOpen = '';
- my $rowOpenEven = '';
- my $rowOpenOdd = '';
- my $colOpen = '';
- my $txtOpen = '';
- my $txtClose = '';
- my $colClose = "\t\t\t";
- my $rowClose = '';
+ my $rowOpen = '';
+ my $rowOpenEven = '';
+ my $rowOpenOdd = '';
+ my $colOpen = '';
+ my $colOpenMinWidth = '';
+ my $txtOpen = '';
+ my $txtClose = '';
+ my $colClose = "\t\t\t";
+ my $rowClose = '';
if ($html) {
- $rowOpen = '';
- $rowOpenEven = '
';
- $rowOpenOdd = '
';
- $colOpen = '| ';
- $txtOpen = "";
- $txtClose = "";
- $colClose = ' | ';
- $rowClose = '
';
+ $rowOpen = '';
+ $rowOpenEven = '
';
+ $rowOpenOdd = '
';
+ $colOpen = '| ';
+ $colOpenMinWidth = ' | ';
+ $txtOpen = "";
+ $txtClose = "";
+ $colClose = ' | ';
+ $rowClose = '
';
}
push @ret,
$rowOpen
- . $colOpen
+ . $colOpenMinWidth
. $txtOpen
. 'Package Name'
. $txtClose
. $colClose
- . $colOpen
+ . $colOpenMinWidth
. $txtOpen
. 'Installed Version'
. $txtClose
. $colClose
- . $colOpen
+ . $colOpenMinWidth
. $txtOpen
. 'Update Version'
. $txtClose
. $colClose
- . $colOpen
+ . $colOpenMinWidth
. $txtOpen
. 'Upgrade Version'
. $txtClose
@@ -1491,14 +1499,14 @@ sub CreateOutdatedList($$) {
my $fhemPkg = defined( $fhem_npm_modules{$package} ) ? 1 : 0;
my $l = $linecount % 2 == 0 ? $rowOpenEven : $rowOpenOdd;
- $l .= $colOpen . $package . $colClose;
- $l .= $colOpen
+ $l .= $colOpenMinWidth . $package . $colClose;
+ $l .= $colOpenMinWidth
. (
defined( $packages->{$package}{current} )
? $packages->{$package}{current}
: '?'
) . $colClose;
- $l .= $colOpen . (
+ $l .= $colOpenMinWidth . (
defined( $packages->{$package}{wanted} )
? (
$fhemPkg
@@ -1517,7 +1525,7 @@ sub CreateOutdatedList($$) {
)
: '?'
) . $colClose;
- $l .= $colOpen
+ $l .= $colOpenMinWidth
. (
defined( $packages->{$package}{latest} )
? $packages->{$package}{latest}
@@ -1573,7 +1581,6 @@ sub ToDay() {
This line may easily be added to a new file in /etc/sudoers.d/fhem and will automatically included to /etc/sudoers from there.
- More restricted sudo settings are currently not supported.
Only checking for outdated packages does not require any privileged access at all!
@@ -1671,7 +1678,6 @@ sub ToDay() {
Diese Zeile kann einfach in einer neuen Datei unter /etc/sudoers.d/fhem hinzugefügt werden und wird von dort automatisch in /etc/sudoers inkludiert.
- Restriktiviere sudo Einstellungen sind derzeit nicht möglich.
Um nur die zu aktualisierenden Pakete zu überprüfen wird überhaupt kein priviligierter Zugriff benötigt!
@@ -1759,7 +1765,7 @@ sub ToDay() {
"abstract": "Modul zur Bedienung der Node.js Installation und Updates"
}
},
- "version": "v1.0.5",
+ "version": "v1.0.6",
"release_status": "stable",
"author": [
"Julian Pawlowski "