RemiRigal / Plex-Auto-Languages

Automated language selection for Plex TV Shows !
MIT License
428 stars 16 forks source link

Plex Token as Docker secret #11

Closed dphildebrandt closed 2 years ago

dphildebrandt commented 2 years ago

Usually the standard is to provide a direct environment variable for the secret

secrets:
  plex_token:
    file: <docker_dir>/secrets/plex_token

plex-auto-languages:
    image: remirigal/plex-auto-languages:latest
    container_name: pal
    secrets:
      - plex_token
    environment:
      TZ: $TZ
      PLEX_URL: <plex_url>
      PLEX_TOKEN_FILE: /run/secrets/plex_token

This is minor, in my opinion, but would be better than assuming the filename/location.

More importantly I'm getting an error when using the token as described:

2022-04-25 07:28:40,124 [INFO] Setting value of parameter PLEX_URL from environment variable
2022-04-25 07:28:40,124 [INFO] Getting PLEX_TOKEN from Docker secret
2022-04-25 07:28:40,125 [INFO] The provided configuration has been successfully validated
Traceback (most recent call last):
  File "main.py", line 174, in <module>
    plex_auto_languages = PlexAutoLanguages(args.config_file)
  File "main.py", line 20, in __init__
    self.plex = PlexServer(self.config.get("plex.url"), self.config.get("plex.token"))
  File "/usr/local/lib/python3.8/site-packages/plexapi/server.py", line 117, in __init__
    data = self.query(self.key, timeout=self._timeout)
  File "/usr/local/lib/python3.8/site-packages/plexapi/server.py", line 672, in query
    response = method(url, headers=headers, timeout=timeout, **kwargs)
  File "/usr/local/lib/python3.8/site-packages/requests/sessions.py", line 542, in get
    return self.request('GET', url, **kwargs)
  File "/usr/local/lib/python3.8/site-packages/requests/sessions.py", line 529, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/local/lib/python3.8/site-packages/requests/sessions.py", line 645, in send
    r = adapter.send(request, **kwargs)
  File "/usr/local/lib/python3.8/site-packages/requests/adapters.py", line 440, in send
    resp = conn.urlopen(
  File "/usr/local/lib/python3.8/site-packages/urllib3/connectionpool.py", line 703, in urlopen
    httplib_response = self._make_request(
  File "/usr/local/lib/python3.8/site-packages/urllib3/connectionpool.py", line 398, in _make_request
    conn.request(method, url, **httplib_request_kw)
  File "/usr/local/lib/python3.8/site-packages/urllib3/connection.py", line 239, in request
    super(HTTPConnection, self).request(method, url, body=body, headers=headers)
  File "/usr/local/lib/python3.8/http/client.py", line 1256, in request
    self._send_request(method, url, body, headers, encode_chunked)
  File "/usr/local/lib/python3.8/http/client.py", line 1297, in _send_request
    self.putheader(hdr, value)
  File "/usr/local/lib/python3.8/site-packages/urllib3/connection.py", line 224, in putheader
    _HTTPConnection.putheader(self, header, *values)
  File "/usr/local/lib/python3.8/http/client.py", line 1234, in putheader
    raise ValueError('Invalid header value %r' % (values[i],))
ValueError: Invalid header value b'<plex_token_value>\n'

It seems it's perhaps not being parsed correctly from the file?

RemiRigal commented 2 years ago

Thank you for opening a separate issue and taking the time to explain all of this.

I introduced the environment variable PLEX_TOKEN_FILE as you suggested, this variable defaults to /run/secrets/plex_token if not specified. The parsing has been fixed, I forgot to strip the variable.

Let me know if it works for you, the changes are available in version v1.0.5. Thank you !

dphildebrandt commented 2 years ago

My pleasure! Secret works and reads correctly, thank you!