lanraragi: 0.8.90 -> 0.9.0

This commit is contained in:
TomaSajt 2023-11-05 13:28:47 +01:00
parent ce89133d42
commit eac5dfd20f
No known key found for this signature in database
GPG key ID: F011163C050122A1
6 changed files with 134 additions and 116 deletions

View file

@ -72,11 +72,10 @@ in
"HOME" = "/var/lib/lanraragi";
};
preStart = ''
REDIS_PASS=${lib.optionalString (cfg.redis.passwordFile != null) "$(head -n1 ${cfg.redis.passwordFile})"}
cat > lrr.conf <<EOF
{
redis_address => "127.0.0.1:${toString cfg.redis.port}",
redis_password => "$REDIS_PASS",
redis_password => "${lib.optionalString (cfg.redis.passwordFile != null) ''$(head -n1 ${cfg.redis.passwordFile})''}",
redis_database => "0",
redis_database_minion => "1",
redis_database_config => "2",
@ -84,15 +83,9 @@ in
}
EOF
'' + lib.optionalString (cfg.passwordFile != null) ''
PASS_HASH=$(
PASS=$(head -n1 ${cfg.passwordFile}) ${cfg.package.perlEnv}/bin/perl -I${cfg.package}/share/lanraragi/lib -e \
'use LANraragi::Controller::Config; print LANraragi::Controller::Config::make_password_hash($ENV{PASS})' \
2>/dev/null
)
${lib.getExe pkgs.redis} -h 127.0.0.1 -p ${toString cfg.redis.port} -a "$REDIS_PASS" <<EOF
${lib.getExe pkgs.redis} -h 127.0.0.1 -p ${toString cfg.redis.port} ${lib.optionalString (cfg.redis.passwordFile != null) ''-a "$(head -n1 ${cfg.redis.passwordFile})"''}<<EOF
SELECT 2
HSET LRR_CONFIG password $PASS_HASH
HSET LRR_CONFIG password $(${cfg.package}/bin/helpers/lrr-make-password-hash $(head -n1 ${cfg.passwordFile}))
EOF
'';
};

View file

@ -10,19 +10,17 @@ import ./make-test-python.nix ({ pkgs, lib, ... }: {
services.lanraragi = {
enable = true;
passwordFile = pkgs.writeText "lrr-test-pass" ''
ultra-secure-password
Ultra-secure-p@ssword-"with-spec1al\chars
'';
port = 4000;
redis = {
port = 4001;
passwordFile = pkgs.writeText "redis-lrr-test-pass" ''
still-a-very-secure-password
123-redis-PASS
'';
};
};
};
};
testScript = ''
@ -34,7 +32,7 @@ import ./make-test-python.nix ({ pkgs, lib, ... }: {
machine2.wait_for_unit("lanraragi.service")
machine2.wait_until_succeeds("curl -f localhost:4000")
machine2.succeed("[ $(curl -o /dev/null -X post 'http://localhost:4000/login' --data-raw 'password=ultra-secure-password' -w '%{http_code}') -eq 302 ]")
machine2.succeed("[ $(curl -o /dev/null -X post 'http://localhost:4000/login' --data-raw 'password=Ultra-secure-p@ssword-\"with-spec1al\\chars' -w '%{http_code}') -eq 302 ]")
'';
})

View file

@ -1,34 +0,0 @@
diff --git a/lib/LANraragi.pm b/lib/LANraragi.pm
index e6b833c4..d677030b 100644
--- a/lib/LANraragi.pm
+++ b/lib/LANraragi.pm
@@ -144,8 +144,13 @@ sub startup {
shutdown_from_pid( get_temp . "/minion.pid" );
my $miniondb = $self->LRR_CONF->get_redisad . "/" . $self->LRR_CONF->get_miniondb;
+ my $redispassword = $self->LRR_CONF->get_redispassword;
+
+ # If the password is non-empty, add the required delimiters
+ if ($redispassword) { $redispassword = "x:" . $redispassword . "@"; }
+
say "Minion will use the Redis database at $miniondb";
- $self->plugin( 'Minion' => { Redis => "redis://$miniondb" } );
+ $self->plugin( 'Minion' => { Redis => "redis://$redispassword$miniondb" } );
$self->LRR_LOGGER->info("Successfully connected to Minion database.");
$self->minion->missing_after(5); # Clean up older workers after 5 seconds of unavailability
diff --git a/lib/LANraragi/Model/Config.pm b/lib/LANraragi/Model/Config.pm
index f52056d4..63e1f5d3 100644
--- a/lib/LANraragi/Model/Config.pm
+++ b/lib/LANraragi/Model/Config.pm
@@ -42,8 +42,8 @@ sub get_minion {
my $miniondb = get_redisad . "/" . get_miniondb;
my $password = get_redispassword;
- # If the password is non-empty, add the required @
- if ($password) { $password = $password . "@"; }
+ # If the password is non-empty, add the required delimiters
+ if ($password) { $password = "x:" . $password . "@"; }
return Minion->new( Redis => "redis://$password$miniondb" );
}

View file

@ -1,21 +1,16 @@
diff --git a/tools/cpanfile b/tools/cpanfile
index 359c61fe..ca3b7ec7 100755
--- a/tools/cpanfile
+++ b/tools/cpanfile
@@ -20,7 +20,7 @@ requires 'Sort::Naturally', 1.03;
requires 'Authen::Passphrase', 0.008;
requires 'File::ReadBackwards', 1.05;
requires 'URI::Escape', 1.74;
-requires 'URI', 5.09;
+requires 'URI', 5.05;
# Used by Installer
requires 'IPC::Cmd', 1.02;
diff --git a/tools/install.pl b/tools/install.pl
index 0cbb847d..1bd61fa0 100755
index dbeb7c11..06e4c675 100755
--- a/tools/install.pl
+++ b/tools/install.pl
@@ -91,32 +91,6 @@ if ( $ENV{HOMEBREW_FORMULA_PREFIX} ) {
@@ -9,6 +9,7 @@ use Config;
use feature qw(say);
use File::Path qw(make_path);
+use File::Copy qw(copy);
#Vendor dependencies
my @vendor_css = (
@@ -91,32 +92,6 @@ if ( $ENV{HOMEBREW_FORMULA_PREFIX} ) {
$cpanopt = " -l " . $ENV{HOMEBREW_FORMULA_PREFIX} . "/libexec";
}
@ -48,16 +43,60 @@ index 0cbb847d..1bd61fa0 100755
#Check for PerlMagick
say("Checking for ImageMagick/PerlMagick...");
my $imgk;
@@ -154,12 +128,6 @@ if ( $back || $full ) {
@@ -136,36 +111,11 @@ if ($@) {
say("OK!");
}
-#Build & Install CPAN Dependencies
-if ( $back || $full ) {
- say("\r\nInstalling Perl modules... This might take a while.\r\n");
-
- if ( $Config{"osname"} ne "darwin" ) {
- say("Installing Linux::Inotify2 for non-macOS systems... (This will do nothing if the package is there already)");
-
- install_package( "Linux::Inotify2", $cpanopt );
- }
-
- if ( system( "cpanm --installdeps ./tools/. --notest" . $cpanopt ) != 0 ) {
- die "Something went wrong while installing Perl modules - Bailing out.";
- }
-}
-
#Clientside Dependencies with Provisioning
if ( $front || $full ) {
- say("\r\nObtaining remote Web dependencies...\r\n");
-
- if ( system("npm install") != 0 ) {
- if ( system("npm ci") != 0 ) {
- die "Something went wrong while obtaining node modules - Bailing out.";
- }
-
say("\r\nProvisioning...\r\n");
#Load File::Copy
- #Load File::Copy
- install_package( "File::Copy", $cpanopt );
- File::Copy->import("copy");
-
make_path getcwd . "/public/css/vendor";
make_path getcwd . "/public/css/webfonts";
make_path getcwd . "/public/js/vendor";
@@ -212,19 +162,3 @@ sub cp_node_module {
}
-sub install_package {
-
- my $package = $_[0];
- my $cpanopt = $_[1];
-
- ## no critic
- eval "require $package"; #Run-time evals are needed here to check if the package has been properly installed.
- ## use critic
-
- if ($@) {
- say("$package not installed! Trying to install now using cpanm$cpanopt");
- system("cpanm $package $cpanopt");
- } else {
- say("$package package installed, proceeding...");
- }
-}

View file

@ -0,0 +1,13 @@
diff --git a/tools/cpanfile b/tools/cpanfile
index 7385aea7..22f9b069 100755
--- a/tools/cpanfile
+++ b/tools/cpanfile
@@ -20,7 +20,7 @@ requires 'Sort::Naturally', 1.03;
requires 'Authen::Passphrase', 0.008;
requires 'File::ReadBackwards', 1.05;
requires 'URI::Escape', 1.74;
-requires 'URI', 5.09;
+requires 'URI', 5.05;
# Used by Installer
requires 'IPC::Cmd', 1.02;

View file

@ -9,16 +9,47 @@
, nixosTests
}:
let
perlEnv = perl.withPackages (_: cpanDeps);
buildNpmPackage rec {
pname = "lanraragi";
version = "0.9.0";
cpanDeps = with perl.pkgs; [
src = fetchFromGitHub {
owner = "Difegue";
repo = "LANraragi";
rev = "v.${version}";
hash = "sha256-euZotpXTUSmxlA5rbTUhHpHH0Ojd3AZjGasxYZ+L7NY=";
};
patches = [
(fetchpatch {
name = "fix-redis-auth.patch";
url = "https://github.com/Difegue/LANraragi/commit/1711b39759ad02ab2a8863ce1f35f6479c9a2917.patch";
hash = "sha256-WfKeieysIlS64qgVEc75JFKjxXuvZN85M6US/gwjTzw=";
})
(fetchpatch {
name = "fix-ghostscript-device.patch";
url = "https://github.com/Difegue/LANraragi/commit/087d63b11c89fda8cb3a30cdb2e86ecd6be66bb7.patch";
hash = "sha256-Cu9d/dDlO0yuFCTKOyg5A0gIuiA+FcWD9PjexB/BK0U=";
})
./install.patch
./loosen-dep-reqs.patch # Can be removed once perl.pkgs.URI is updated
./fix-paths.patch
./expose-password-hashing.patch # Used by the NixOS module
];
npmDepsHash = "sha256-/F/lhQIVGbbFxFuQXXwHUVlV2jhHt0hFf94v0FrTKt8=";
nativeBuildInputs = [ perl makeBinaryWrapper ];
buildInputs = with perl.pkgs; [
perl
ImageMagick
locallib
Redis
Encode
ArchiveLibarchiveExtract
ArchiveLibarchivePeek
ListMoreUtils
NetDNSNative
SortNaturally
AuthenPassphrase
@ -39,50 +70,17 @@ let
FileChangeNotify
ModulePluggable
TimeLocal
YAMLSyck
StringSimilarity
] ++ lib.optional stdenv.isLinux LinuxInotify2;
in
buildNpmPackage rec {
pname = "lanraragi";
version = "0.8.90";
src = fetchFromGitHub {
owner = "Difegue";
repo = "LANraragi";
rev = "v.${version}";
hash = "sha256-ljnREUGCKvUJvcQ+aJ6XqiMTkVmfjt/0oC47w3PCj/k=";
};
patches = [
(fetchpatch {
name = "add-package-lock-json.patch"; # Can be removed when updating to 0.9.0
url = "https://github.com/Difegue/LANraragi/commit/c5cd8641795bf7e40deef4ae955ea848dde44050.patch";
hash = "sha256-XKxRzeugkIe6N4XRN6+O1wEZpxo6OzU0OaG0ywKFv38=";
})
./install.patch
./fix-paths.patch
./expose-password-hashing.patch
./fix-minion-redis-password.patch # Should be upstreamed
];
npmFlags = [ "--legacy-peer-deps" ];
npmDepsHash = "sha256-UQsChPU5b4+r5Kv6P/3rJCGUzssiUNSKo3w4axNyJew=";
nativeBuildInputs = [
perl
makeBinaryWrapper
perl.pkgs.Appcpanminus
] ++ cpanDeps;
nativeCheckInputs = with perl.pkgs; [
TestMockObject
TestTrap
TestDeep
];
buildPhase = ''
runHook preBuild
# Check if every perl dependency was installed
# explicitly call cpanm with perl because the shebang is broken on darwin
perl ${perl.pkgs.Appcpanminus}/bin/cpanm --installdeps ./tools --notest
perl ./tools/install.pl install-full
rm -r node_modules public/js/vendor/*.map public/css/vendor/*.map
@ -91,6 +89,12 @@ buildNpmPackage rec {
doCheck = true;
nativeCheckInputs = with perl.pkgs; [
TestMockObject
TestTrap
TestDeep
];
checkPhase = ''
runHook preCheck
@ -104,19 +108,23 @@ buildNpmPackage rec {
runHook preInstall
mkdir -p $out/share/lanraragi
cp -r lib public script templates package.json $out/share/lanraragi
chmod +x script/launcher.pl
cp -r lib public script templates package.json lrr.conf $out/share/lanraragi
makeWrapper ${perlEnv}/bin/perl $out/bin/lanraragi \
makeWrapper $out/share/lanraragi/script/launcher.pl $out/bin/lanraragi \
--prefix PERL5LIB : $PERL5LIB \
--prefix PATH : ${lib.makeBinPath [ ghostscript ]} \
--add-flags "$out/share/lanraragi/script/launcher.pl -f $out/share/lanraragi/script/lanraragi"
--run "cp -n --no-preserve=all $out/share/lanraragi/lrr.conf ./lrr.conf 2>/dev/null || true" \
--add-flags "-f $out/share/lanraragi/script/lanraragi"
makeWrapper ${lib.getExe perl} $out/bin/helpers/lrr-make-password-hash \
--prefix PERL5LIB : $out/share/lanraragi/lib:$PERL5LIB \
--add-flags "-e 'use LANraragi::Controller::Config; print LANraragi::Controller::Config::make_password_hash(@ARGV[0])' 2>/dev/null"
runHook postInstall
'';
passthru = {
inherit perlEnv;
tests = { inherit (nixosTests) lanraragi; };
};
passthru.tests.module = nixosTests.lanraragi;
meta = {
changelog = "https://github.com/Difegue/LANraragi/releases/tag/${src.rev}";
@ -128,3 +136,4 @@ buildNpmPackage rec {
platforms = lib.platforms.unix;
};
}