]> jfr.im git - yt-dlp.git/commitdiff
Add option `--netrc-location`
authorpukkandan <redacted>
Wed, 15 Sep 2021 19:21:40 +0000 (00:51 +0530)
committerpukkandan <redacted>
Wed, 15 Sep 2021 19:58:55 +0000 (01:28 +0530)
Closes #792, #963

.gitignore
README.md
yt_dlp/__init__.py
yt_dlp/extractor/common.py
yt_dlp/options.py

index 88a9605f7bf7544ced3216208e6cef842a65c328..bf06c81f061b7e4f466a6fcb42a7f94e0c49a337 100644 (file)
@@ -3,6 +3,7 @@
 *.spec
 cookies
 *cookies.txt
+.netrc
 
 # Downloaded
 *.srt
index 8ffb20a8c1f99c60525629eb56aafe5172ecdc2b..a2c1cbd82f686b04a8bd954802dc40e99f2f65d7 100644 (file)
--- a/README.md
+++ b/README.md
@@ -695,6 +695,9 @@ ## Authentication Options:
                                      out, yt-dlp will ask interactively
     -2, --twofactor TWOFACTOR        Two-factor authentication code
     -n, --netrc                      Use .netrc authentication data
+    --netrc-location PATH            Location of .netrc authentication data;
+                                     either the path or its containing
+                                     directory. Defaults to ~/.netrc
     --video-password PASSWORD        Video password (vimeo, youku)
     --ap-mso MSO                     Adobe Pass multiple-system operator (TV
                                      provider) identifier, use --ap-list-mso for
@@ -923,14 +926,14 @@ # Save all videos under YouTube directory in your home directory
 
 ### Authentication with `.netrc` file
 
-You may also want to configure automatic credentials storage for extractors that support authentication (by providing login and password with `--username` and `--password`) in order not to pass credentials as command line arguments on every yt-dlp execution and prevent tracking plain text passwords in the shell command history. You can achieve this using a [`.netrc` file](https://stackoverflow.com/tags/.netrc/info) on a per extractor basis. For that you will need to create a `.netrc` file in your `$HOME` and restrict permissions to read/write by only you:
+You may also want to configure automatic credentials storage for extractors that support authentication (by providing login and password with `--username` and `--password`) in order not to pass credentials as command line arguments on every yt-dlp execution and prevent tracking plain text passwords in the shell command history. You can achieve this using a [`.netrc` file](https://stackoverflow.com/tags/.netrc/info) on a per extractor basis. For that you will need to create a `.netrc` file in `--netrc-location` and restrict permissions to read/write by only you:
 ```
 touch $HOME/.netrc
 chmod a-rwx,u+rw $HOME/.netrc
 ```
 After that you can add credentials for an extractor in the following format, where *extractor* is the name of the extractor in lowercase:
 ```
-machine <extractor> login <login> password <password>
+machine <extractor> login <username> password <password>
 ```
 For example:
 ```
@@ -939,10 +942,7 @@ ### Authentication with `.netrc` file
 ```
 To activate authentication with the `.netrc` file you should pass `--netrc` to yt-dlp or place it in the [configuration file](#configuration).
 
-On Windows you may also need to setup the `%HOME%` environment variable manually. For example:
-```
-set HOME=%USERPROFILE%
-```
+The default location of the .netrc file is `$HOME` (`~`) in UNIX. On Windows, it is `%HOME%` if present, `%USERPROFILE%` (generally `C:\Users\<user name>`) or `%HOMEDRIVE%%HOMEPATH%`
 
 # OUTPUT TEMPLATE
 
index f9a7e2f1110d170e8ff846ad7c18ad568e3c180b..5168ed0f7ca4432a8da97f54d08643db30952c6c 100644 (file)
@@ -575,6 +575,7 @@ def report_args_compat(arg, name):
 
     ydl_opts = {
         'usenetrc': opts.usenetrc,
+        'netrc_location': opts.netrc_location,
         'username': opts.username,
         'password': opts.password,
         'twofactor': opts.twofactor,
index 54a9dc2631418327de0b33f22aa94bbffe254089..e796842312afd7fc7aaa087c181c470a35fb88d8 100644 (file)
@@ -18,6 +18,7 @@
     compat_cookies_SimpleCookie,
     compat_etree_Element,
     compat_etree_fromstring,
+    compat_expanduser,
     compat_getpass,
     compat_http_client,
     compat_os_name,
@@ -1166,7 +1167,10 @@ def _get_netrc_login_info(self, netrc_machine=None):
 
         if self.get_param('usenetrc', False):
             try:
-                info = netrc.netrc().authenticators(netrc_machine)
+                netrc_file = compat_expanduser(self.get_param('netrc_location') or '~')
+                if os.path.isdir(netrc_file):
+                    netrc_file = os.path.join(netrc_file, '.netrc')
+                info = netrc.netrc(file=netrc_file).authenticators(netrc_machine)
                 if info is not None:
                     username = info[0]
                     password = info[2]
index 2ff0fbfc11be06844ba4ee494cc7cf3fb61fdc31..099b151c65e987caef024321437355421b637c26 100644 (file)
@@ -478,6 +478,10 @@ def _dict_from_options_callback(
         '-n', '--netrc',
         action='store_true', dest='usenetrc', default=False,
         help='Use .netrc authentication data')
+    authentication.add_option(
+        '--netrc-location',
+        dest='netrc_location', metavar='PATH',
+        help='Location of .netrc authentication data; either the path or its containing directory. Defaults to ~/.netrc')
     authentication.add_option(
         '--video-password',
         dest='videopassword', metavar='PASSWORD',