Unverified Commit 0e662e66 authored by Ryan Lahfa's avatar Ryan Lahfa Committed by GitHub
Browse files

Merge pull request #227642 from Flakebi/powerdns-admin2

powerdns-admin: 0.3.0 -> 0.4.1
parents 6826212c 1a13b4c0
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -78,7 +78,8 @@ in
      environment.PYTHONPATH = pkgs.powerdns-admin.pythonPath;
      serviceConfig = {
        ExecStart = "${pkgs.powerdns-admin}/bin/powerdns-admin --pid /run/powerdns-admin/pid ${escapeShellArgs cfg.extraArgs}";
        ExecStartPre = "${pkgs.coreutils}/bin/env FLASK_APP=${pkgs.powerdns-admin}/share/powerdnsadmin/__init__.py ${pkgs.python3Packages.flask}/bin/flask db upgrade -d ${pkgs.powerdns-admin}/share/migrations";
        # Set environment variables only for starting flask database upgrade
        ExecStartPre = "${pkgs.coreutils}/bin/env FLASK_APP=${pkgs.powerdns-admin}/share/powerdnsadmin/__init__.py SESSION_TYPE= ${pkgs.python3Packages.flask}/bin/flask db upgrade -d ${pkgs.powerdns-admin}/share/migrations";
        ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID";
        ExecStop = "${pkgs.coreutils}/bin/kill -TERM $MAINPID";
        PIDFile = "/run/powerdns-admin/pid";
+24 −0
Original line number Diff line number Diff line
@@ -10,6 +10,7 @@ let
  defaultConfig = ''
    BIND_ADDRESS = '127.0.0.1'
    PORT = 8000
    CAPTCHA_ENABLE = False
  '';

  makeAppTest = name: configs: makeTest {
@@ -98,7 +99,30 @@ let
      tcp = {
        services.powerdns-admin.extraArgs = [ "-b" "127.0.0.1:8000" ];
        system.build.testScript = ''
          set -euxo pipefail
          curl -sSf http://127.0.0.1:8000/

          # Create account to check that the database migrations ran
          csrf_token="$(curl -sSfc session http://127.0.0.1:8000/register | grep _csrf_token | cut -d\" -f6)"
          # Outputs 'Redirecting' if successful
          curl -sSfb session http://127.0.0.1:8000/register \
            -F "_csrf_token=$csrf_token" \
            -F "firstname=first" \
            -F "lastname=last" \
            -F "email=a@example.com" \
            -F "username=user" \
            -F "password=password" \
            -F "rpassword=password" | grep Redirecting

          # Login
          # Outputs 'Redirecting' if successful
          curl -sSfb session http://127.0.0.1:8000/login \
            -F "_csrf_token=$csrf_token" \
            -F "username=user" \
            -F "password=password" | grep Redirecting

          # Check that we are logged in, this redirects to /admin/setting/pdns if we are
          curl -sSfb session http://127.0.0.1:8000/dashboard/ | grep /admin/setting
        '';
      };
      unix = {
+27 −19
Original line number Diff line number Diff line
{ 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 ];
  };
+14 −7
Original line number Diff line number Diff line
{
  "dependencies": {
    "admin-lte": "2.4.9",
    "bootstrap": "^3.4.1",
    "bootstrap-datepicker": "^1.8.0",
    "@fortawesome/fontawesome-free": "6.3.0",
    "admin-lte": "3.2.0",
    "bootstrap": "4.6.2",
    "bootstrap-datepicker": "^1.9.0",
    "bootstrap-validator": "^0.11.9",
    "datatables.net-plugins": "^1.10.19",
    "datatables.net-plugins": "^1.13.1",
    "icheck": "^1.0.2",
    "jquery-slimscroll": "^1.3.8",
    "jquery-ui-dist": "^1.12.1",
    "jquery-sparkline": "^2.4.0",
    "jquery-ui-dist": "^1.13.2",
    "jquery.quicksearch": "^2.4.0",
    "jtimeout": "^3.1.0",
    "jquery-validation": "^1.19.5",
    "jtimeout": "^3.2.0",
    "knockout": "^3.5.1",
    "multiselect": "^0.9.12"
  },
  "resolutions": {
    "admin-lte/@fortawesome/fontawesome-free": "6.3.0"
  },
  "name": "powerdns-admin-assets",
  "version": "0.3.0"
  "version": "0.4.1"
}
+970 −690

File changed.

Preview size limit exceeded, changes collapsed.

Loading