about summary refs log tree commit diff
path: root/pkgs/applications/networking/powerdns-admin/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/applications/networking/powerdns-admin/default.nix')
-rw-r--r--pkgs/applications/networking/powerdns-admin/default.nix46
1 files changed, 27 insertions, 19 deletions
diff --git a/pkgs/applications/networking/powerdns-admin/default.nix b/pkgs/applications/networking/powerdns-admin/default.nix
index fe0112a4aaef0..33ba132b4daa5 100644
--- a/pkgs/applications/networking/powerdns-admin/default.nix
+++ b/pkgs/applications/networking/powerdns-admin/default.nix
@@ -1,53 +1,55 @@
 { lib, stdenv, fetchFromGitHub, mkYarnPackage, nixosTests, writeText, python3 }:
 
 let
-  version = "0.3.0";
+  version = "0.4.1";
   src = fetchFromGitHub {
-    owner = "ngoduykhanh";
+    owner = "PowerDNS-Admin";
     repo = "PowerDNS-Admin";
     rev = "v${version}";
-    hash = "sha256-e11u0jdJr+2TDXvBAPlDfnuuDwSfBq+JtvnDUTNKp/c=";
+    hash = "sha256-AwqEcAPD1SF1Ma3wtH03mXlTywM0Q19hciCmTtlr3gk=";
   };
 
   python = python3;
 
   pythonDeps = with python.pkgs; [
-    flask flask_assets flask-login flask-sqlalchemy flask_migrate flask-seasurf flask_mail flask-session flask-sslify
+    flask flask_assets flask-login flask-sqlalchemy flask_migrate flask-seasurf flask_mail flask-session flask-session-captcha flask-sslify
     mysqlclient psycopg2 sqlalchemy
-    cffi configobj cryptography bcrypt requests python-ldap pyotp qrcode dnspython
-    gunicorn python3-saml pytz cssmin rjsmin authlib bravado-core
-    lima pytimeparse pyyaml jinja2 itsdangerous werkzeug
+    certifi cffi configobj cryptography bcrypt requests python-ldap pyotp qrcode dnspython
+    gunicorn itsdangerous python3-saml pytz rcssmin rjsmin authlib bravado-core
+    lima lxml passlib pyasn1 pytimeparse pyyaml jinja2 itsdangerous webcolors werkzeug zipp zxcvbn
   ];
 
   assets = mkYarnPackage {
     inherit src version;
     packageJSON = ./package.json;
     yarnNix = ./yarndeps.nix;
+    # Copied from package.json, see also
+    # https://github.com/NixOS/nixpkgs/pull/214952
+    packageResolutions = {
+      "@fortawesome/fontawesome-free" = "6.3.0";
+    };
 
     nativeBuildInputs = pythonDeps;
     patchPhase = ''
-      sed -i -r -e "s|'cssmin',\s?'cssrewrite'|'cssmin'|g" powerdnsadmin/assets.py
+      sed -i -r -e "s|'rcssmin',\s?'cssrewrite'|'rcssmin'|g" powerdnsadmin/assets.py
     '';
     buildPhase = ''
       # The build process expects the directory to be writable
       # with node_modules at a specific path
-      # https://github.com/ngoduykhanh/PowerDNS-Admin/blob/master/.yarnrc
+      # https://github.com/PowerDNS-Admin/PowerDNS-Admin/blob/master/.yarnrc
 
       approot=deps/powerdns-admin-assets
 
       ln -s $node_modules $approot/powerdnsadmin/static/node_modules
-      FLASK_APP=$approot/powerdnsadmin/__init__.py flask assets build
+      SESSION_TYPE=filesystem FLASK_APP=$approot/powerdnsadmin/__init__.py flask assets build
     '';
     installPhase = ''
-      # https://github.com/ngoduykhanh/PowerDNS-Admin/blob/54b257768f600c5548a1c7e50eac49c40df49f92/docker/Dockerfile#L43
+      # https://github.com/PowerDNS-Admin/PowerDNS-Admin/blob/54b257768f600c5548a1c7e50eac49c40df49f92/docker/Dockerfile#L43
       mkdir $out
       cp -r $approot/powerdnsadmin/static/{generated,assets,img} $out
+      find $node_modules -name webfonts -exec cp -r {} $out \;
+      find $node_modules -name fonts -exec cp -r {} $out \;
       find $node_modules/icheck/skins/square -name '*.png' -exec cp {} $out/generated \;
-
-      mkdir $out/fonts
-      cp $node_modules/ionicons/dist/fonts/* $out/fonts
-      cp $node_modules/bootstrap/dist/fonts/* $out/fonts
-      cp $node_modules/font-awesome/fonts/* $out/fonts
     '';
     distPhase = "true";
   };
@@ -61,7 +63,7 @@ let
     assets.register('js_main', 'generated/main.js')
     assets.register('css_main', 'generated/main.css')
   '';
-in stdenv.mkDerivation rec {
+in stdenv.mkDerivation {
   pname = "powerdns-admin";
 
   inherit src version;
@@ -81,7 +83,13 @@ in stdenv.mkDerivation rec {
 
   postPatch = ''
     rm -r powerdnsadmin/static powerdnsadmin/assets.py
-    sed -i "s/id:/'id':/" migrations/versions/787bdba9e147_init_db.py
+    # flask-migrate 4.0 compatibility: https://github.com/PowerDNS-Admin/PowerDNS-Admin/issues/1376
+    substituteInPlace migrations/env.py --replace "render_as_batch=config.get_main_option('sqlalchemy.url').startswith('sqlite:')," ""
+    # flask-session and powerdns-admin both try to add sqlalchemy to flask.
+    # Reuse the database for flask-session
+    substituteInPlace powerdnsadmin/__init__.py --replace "sess = Session(app)" "app.config['SESSION_SQLALCHEMY'] = models.base.db; sess = Session(app)"
+    # Routes creates session database tables, so it needs a context
+    substituteInPlace powerdnsadmin/__init__.py --replace "routes.init_app(app)" "with app.app_context(): routes.init_app(app)"
   '';
 
   installPhase = ''
@@ -113,7 +121,7 @@ in stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "A PowerDNS web interface with advanced features";
-    homepage = "https://github.com/ngoduykhanh/PowerDNS-Admin";
+    homepage = "https://github.com/PowerDNS-Admin/PowerDNS-Admin";
     license = licenses.mit;
     maintainers = with maintainers; [ Flakebi zhaofengli ];
   };