source $stdenv/setup # Curl flags to increase reliability a bit. # # Can't use fetchurl, for several reasons. One is that we definitely # don't want --insecure for the login, though we need it for the # download as their download cert isn't in the standard linux bundle. curl="curl \ --max-redirs 20 \ --retry 3 \ --cacert $cacert/etc/ssl/certs/ca-bundle.crt \ -b cookies \ -c cookies \ $curlOpts \ $NIX_CURL_FLAGS" # We don't want the password to be on any program's argv, as it may be # visible in /proc. Writing it to file with echo should be safe, since # it's a shell builtin. echo -n "$password" > password # Might as well hide the username as well. echo -n "$username" > username # Get a CSRF token. csrf=$($curl $loginUrl | xidel - -e '//input[@id="csrf_token"]/@value') # Log in. We don't especially care about the result, but let's check if login failed. $curl --data-urlencode csrf_token="$csrf" \ --data-urlencode username_or_email@username \ --data-urlencode password@password \ -d action=Login \ $loginUrl -D headers > /dev/null if grep -q 'Location: https://' headers; then # Now download. We need --insecure for this, but the sha256 should cover us. $curl --insecure --location --fail $url > $out || { echo "Login succeeded, but subsequent fetch failed."; exit 1; } set +x else set +x echo 'Login failed' echo 'Please set username and password with config.nix,' echo 'or /etc/nix/nixpkgs-config.nix if on NixOS.' echo echo 'Example:' echo '{' echo ' packageOverrides = pkgs: rec {' echo ' factorio = pkgs.factorio.override {' echo ' username = "";' echo ' password = "";' echo ' };' echo ' };' echo '}' exit 1 fi