Unverified Commit 91941994 authored by TomaSajt's avatar TomaSajt
Browse files

lanraragi: init at 0.8.90

parent 5a3ef293
Loading
Loading
Loading
Loading
+36 −0
Original line number Diff line number Diff line
diff --git a/lib/LANraragi/Controller/Config.pm b/lib/LANraragi/Controller/Config.pm
index 2cd2c999..0bd8ab6e 100644
--- a/lib/LANraragi/Controller/Config.pm
+++ b/lib/LANraragi/Controller/Config.pm
@@ -50,6 +50,15 @@ sub index {
     );
 }
 
+sub make_password_hash {
+    my $ppr = Authen::Passphrase::BlowfishCrypt->new(
+        cost        => 8,
+        salt_random => 1,
+        passphrase  => shift,
+    );
+    return $ppr->as_rfc2307;
+}
+
 # Save the given parameters to the Redis config
 sub save_config {
 
@@ -95,14 +104,7 @@ sub save_config {
         my $password = $self->req->param('newpassword');
 
         if ( $password ne "" ) {
-            my $ppr = Authen::Passphrase::BlowfishCrypt->new(
-                cost        => 8,
-                salt_random => 1,
-                passphrase  => $password,
-            );
-
-            my $pass_hashed = $ppr->as_rfc2307;
-            $confhash{password} = $pass_hashed;
+            $confhash{password} = make_password_hash($password);
         }
     }
 
+34 −0
Original line number Diff line number Diff line
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" );
 }
+100 −0
Original line number Diff line number Diff line
diff --git a/lib/LANraragi.pm b/lib/LANraragi.pm
index e6b833c4..4b90e4c5 100644
--- a/lib/LANraragi.pm
+++ b/lib/LANraragi.pm
@@ -21,6 +21,8 @@ use LANraragi::Utils::Minion;
 use LANraragi::Model::Search;
 use LANraragi::Model::Config;
 
+use FindBin;
+
 # This method will run once at server start
 sub startup {
     my $self = shift;
@@ -30,7 +32,7 @@ sub startup {
     say "キタ━━━━━━(゚∀゚)━━━━━━!!!!!";
 
     # Load package.json to get version/vername/description
-    my $packagejson = decode_json( Mojo::File->new('package.json')->slurp );
+    my $packagejson = decode_json( Mojo::File->new("$FindBin::Bin/../package.json")->slurp );
 
     my $version = $packagejson->{version};
     my $vername = $packagejson->{version_name};
diff --git a/lib/LANraragi/Model/Archive.pm b/lib/LANraragi/Model/Archive.pm
index 73e824dd..8bcea29c 100644
--- a/lib/LANraragi/Model/Archive.pm
+++ b/lib/LANraragi/Model/Archive.pm
@@ -13,6 +13,7 @@ use Time::HiRes qw(usleep);
 use File::Basename;
 use File::Copy "cp";
 use File::Path qw(make_path);
+use FindBin;
 
 use LANraragi::Utils::Generic qw(remove_spaces remove_newlines render_api_response);
 use LANraragi::Utils::TempFolder qw(get_temp);
@@ -126,7 +127,7 @@ sub serve_thumbnail {
         } else {
 
             # If the thumbnail doesn't exist, serve the default thumbnail.
-            $self->render_file( filepath => "./public/img/noThumb.png" );
+            $self->render_file( filepath => "$FindBin::Bin/../public/img/noThumb.png" );
         }
         return;
 
diff --git a/lib/LANraragi/Utils/Generic.pm b/lib/LANraragi/Utils/Generic.pm
index 14736893..4352f023 100644
--- a/lib/LANraragi/Utils/Generic.pm
+++ b/lib/LANraragi/Utils/Generic.pm
@@ -17,6 +17,8 @@ use Sys::CpuAffinity;
 use LANraragi::Utils::TempFolder qw(get_temp);
 use LANraragi::Utils::Logging qw(get_logger);
 
+use FindBin;
+
 # Generic Utility Functions.
 use Exporter 'import';
 our @EXPORT_OK =
@@ -161,7 +163,7 @@ sub start_shinobu {
     my $mojo = shift;
 
     my $proc = Proc::Simple->new();
-    $proc->start( $^X, "./lib/Shinobu.pm" );
+    $proc->start( $^X, "$FindBin::Bin/../lib/Shinobu.pm" );
     $proc->kill_on_destroy(0);
 
     $mojo->LRR_LOGGER->debug( "Shinobu Worker new PID is " . $proc->pid );
@@ -201,7 +203,7 @@ sub get_css_list {
 
     #Get all the available CSS sheets.
     my @css;
-    opendir( my $dir, "./public/themes" ) or die $!;
+    opendir( my $dir, "$FindBin::Bin/../public/themes" ) or die $!;
     while ( my $file = readdir($dir) ) {
         if ( $file =~ /.+\.css/ ) { push( @css, $file ); }
     }
diff --git a/lib/LANraragi/Utils/Logging.pm b/lib/LANraragi/Utils/Logging.pm
index ee29c507..6bdfc1bd 100644
--- a/lib/LANraragi/Utils/Logging.pm
+++ b/lib/LANraragi/Utils/Logging.pm
@@ -18,7 +18,7 @@ our @EXPORT_OK = qw(get_logger get_plugin_logger get_logdir get_lines_from_file)
 # Get the Log folder.
 sub get_logdir {
 
-    my $log_folder = "$FindBin::Bin/../log";
+    my $log_folder = "./log";
 
     # Folder location can be overriden by LRR_LOG_DIRECTORY
     if ( $ENV{LRR_LOG_DIRECTORY} ) {
diff --git a/lib/LANraragi/Utils/TempFolder.pm b/lib/LANraragi/Utils/TempFolder.pm
index 792b1c1b..f0eb341b 100644
--- a/lib/LANraragi/Utils/TempFolder.pm
+++ b/lib/LANraragi/Utils/TempFolder.pm
@@ -20,7 +20,7 @@ our @EXPORT_OK = qw(get_temp get_tempsize clean_temp_full clean_temp_partial);
 #Get the current tempfolder.
 #This can be called from any process safely as it uses FindBin.
 sub get_temp {
-    my $temp_folder = "$FindBin::Bin/../public/temp";
+    my $temp_folder = "./public/temp";
 
     # Folder location can be overriden by LRR_TEMP_DIRECTORY
     if ( $ENV{LRR_TEMP_DIRECTORY} ) {
+63 −0
Original line number Diff line number Diff line
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
--- a/tools/install.pl
+++ b/tools/install.pl
@@ -91,32 +91,6 @@ if ( $ENV{HOMEBREW_FORMULA_PREFIX} ) {
     $cpanopt = " -l " . $ENV{HOMEBREW_FORMULA_PREFIX} . "/libexec";
 }
 
-#Load IPC::Cmd
-install_package( "IPC::Cmd",         $cpanopt );
-install_package( "Config::AutoConf", $cpanopt );
-IPC::Cmd->import('can_run');
-require Config::AutoConf;
-
-say("\r\nWill now check if all LRR software dependencies are met. \r\n");
-
-#Check for Redis
-say("Checking for Redis...");
-can_run('redis-server')
-  or die 'NOT FOUND! Please install a Redis server before proceeding.';
-say("OK!");
-
-#Check for GhostScript
-say("Checking for GhostScript...");
-can_run('gs')
-  or warn 'NOT FOUND! PDF support will not work properly. Please install the "gs" tool.';
-say("OK!");
-
-#Check for libarchive
-say("Checking for libarchive...");
-Config::AutoConf->new()->check_header("archive.h")
-  or die 'NOT FOUND! Please install libarchive and ensure its headers are present.';
-say("OK!");
-
 #Check for PerlMagick
 say("Checking for ImageMagick/PerlMagick...");
 my $imgk;
@@ -154,12 +128,6 @@ if ( $back || $full ) {
 #Clientside Dependencies with Provisioning
 if ( $front || $full ) {
 
-    say("\r\nObtaining remote Web dependencies...\r\n");
-
-    if ( system("npm install") != 0 ) {
-        die "Something went wrong while obtaining node modules - Bailing out.";
-    }
-
     say("\r\nProvisioning...\r\n");
 
     #Load File::Copy
+130 −0
Original line number Diff line number Diff line
{ lib
, stdenv
, buildNpmPackage
, fetchFromGitHub
, fetchpatch
, makeBinaryWrapper
, perl
, ghostscript
, nixosTests
}:

let
  perlEnv = perl.withPackages (_: cpanDeps);

  cpanDeps = with perl.pkgs; [
    ImageMagick
    locallib
    Redis
    Encode
    ArchiveLibarchiveExtract
    ArchiveLibarchivePeek
    NetDNSNative
    SortNaturally
    AuthenPassphrase
    FileReadBackwards
    URI
    LogfileRotate
    Mojolicious
    MojoliciousPluginTemplateToolkit
    MojoliciousPluginRenderFile
    MojoliciousPluginStatus
    IOSocketSSL
    CpanelJSONXS
    Minion
    MinionBackendRedis
    ProcSimple
    ParallelLoops
    SysCpuAffinity
    FileChangeNotify
    ModulePluggable
    TimeLocal
  ] ++ 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

    perl ./tools/install.pl install-full
    rm -r node_modules public/js/vendor/*.map public/css/vendor/*.map

    runHook postBuild
  '';

  doCheck = true;

  checkPhase = ''
    runHook preCheck

    rm tests/plugins.t # Uses network
    prove -r -l -v tests

    runHook postCheck
  '';

  installPhase = ''
    runHook preInstall

    mkdir -p $out/share/lanraragi
    cp -r lib public script templates package.json $out/share/lanraragi

    makeWrapper ${perlEnv}/bin/perl $out/bin/lanraragi \
      --prefix PATH : ${lib.makeBinPath [ ghostscript ]} \
      --add-flags "$out/share/lanraragi/script/launcher.pl -f $out/share/lanraragi/script/lanraragi"

    runHook postInstall
  '';

  passthru = {
    inherit perlEnv;
    tests = { inherit (nixosTests) lanraragi; };
  };

  meta = {
    changelog = "https://github.com/Difegue/LANraragi/releases/tag/${src.rev}";
    description = "Web application for archival and reading of manga/doujinshi";
    homepage = "https://github.com/Difegue/LANraragi";
    license = lib.licenses.mit;
    mainProgram = "lanraragi";
    maintainers = with lib.maintainers; [ tomasajt ];
    platforms = lib.platforms.unix;
  };
}