mirror of
https://github.com/samsonjs/vdirsyncer.git
synced 2026-04-27 14:57:41 +00:00
Untangle auth handling
This was a bit entangled and messed up due to recent changes.
This commit is contained in:
parent
b7201013bc
commit
60352f84fe
4 changed files with 16 additions and 17 deletions
|
|
@ -1,4 +1,5 @@
|
||||||
import pytest
|
import pytest
|
||||||
|
from aiohttp import BasicAuth
|
||||||
from aioresponses import CallbackResult
|
from aioresponses import CallbackResult
|
||||||
from aioresponses import aioresponses
|
from aioresponses import aioresponses
|
||||||
|
|
||||||
|
|
@ -88,8 +89,8 @@ def test_readonly_param(aio_connector):
|
||||||
def test_prepare_auth():
|
def test_prepare_auth():
|
||||||
assert prepare_auth(None, "", "") is None
|
assert prepare_auth(None, "", "") is None
|
||||||
|
|
||||||
assert prepare_auth(None, "user", "pwd") == ("user", "pwd")
|
assert prepare_auth(None, "user", "pwd") == BasicAuth("user", "pwd")
|
||||||
assert prepare_auth("basic", "user", "pwd") == ("user", "pwd")
|
assert prepare_auth("basic", "user", "pwd") == BasicAuth("user", "pwd")
|
||||||
|
|
||||||
with pytest.raises(ValueError) as excinfo:
|
with pytest.raises(ValueError) as excinfo:
|
||||||
assert prepare_auth("basic", "", "pwd")
|
assert prepare_auth("basic", "", "pwd")
|
||||||
|
|
@ -109,7 +110,8 @@ def test_prepare_auth_guess(monkeypatch):
|
||||||
import requests_toolbelt.auth.guess
|
import requests_toolbelt.auth.guess
|
||||||
|
|
||||||
assert isinstance(
|
assert isinstance(
|
||||||
prepare_auth("guess", "user", "pwd"), requests_toolbelt.auth.guess.GuessAuth
|
prepare_auth("guess", "user", "pwd"),
|
||||||
|
requests_toolbelt.auth.guess.GuessAuth,
|
||||||
)
|
)
|
||||||
|
|
||||||
monkeypatch.delattr(requests_toolbelt.auth.guess, "GuessAuth")
|
monkeypatch.delattr(requests_toolbelt.auth.guess, "GuessAuth")
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,7 @@ del _detect_faulty_requests
|
||||||
def prepare_auth(auth, username, password):
|
def prepare_auth(auth, username, password):
|
||||||
if username and password:
|
if username and password:
|
||||||
if auth == "basic" or auth is None:
|
if auth == "basic" or auth is None:
|
||||||
return (username, password)
|
return aiohttp.BasicAuth(username, password)
|
||||||
elif auth == "digest":
|
elif auth == "digest":
|
||||||
from requests.auth import HTTPDigestAuth
|
from requests.auth import HTTPDigestAuth
|
||||||
|
|
||||||
|
|
@ -59,8 +59,8 @@ def prepare_auth(auth, username, password):
|
||||||
"You need to specify username and password "
|
"You need to specify username and password "
|
||||||
"for {} authentication.".format(auth)
|
"for {} authentication.".format(auth)
|
||||||
)
|
)
|
||||||
else:
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
def prepare_verify(verify, verify_fingerprint):
|
def prepare_verify(verify, verify_fingerprint):
|
||||||
|
|
@ -126,8 +126,6 @@ async def request(
|
||||||
|
|
||||||
session.hooks = {"response": _fix_redirects}
|
session.hooks = {"response": _fix_redirects}
|
||||||
|
|
||||||
func = session.request
|
|
||||||
|
|
||||||
# TODO: rewrite using
|
# TODO: rewrite using
|
||||||
# https://docs.aiohttp.org/en/stable/client_advanced.html#client-tracing
|
# https://docs.aiohttp.org/en/stable/client_advanced.html#client-tracing
|
||||||
logger.debug("=" * 20)
|
logger.debug("=" * 20)
|
||||||
|
|
@ -140,12 +138,7 @@ async def request(
|
||||||
|
|
||||||
kwargs.pop("cert", None) # TODO XXX FIXME!
|
kwargs.pop("cert", None) # TODO XXX FIXME!
|
||||||
|
|
||||||
auth = kwargs.pop("auth", None)
|
r = await session.request(method, url, ssl=ssl, **kwargs)
|
||||||
if auth:
|
|
||||||
kwargs["auth"] = aiohttp.BasicAuth(*auth)
|
|
||||||
|
|
||||||
r = func(method, url, ssl=ssl, **kwargs)
|
|
||||||
r = await r
|
|
||||||
|
|
||||||
# See https://github.com/kennethreitz/requests/issues/2042
|
# See https://github.com/kennethreitz/requests/issues/2042
|
||||||
content_type = r.headers.get("Content-Type", "")
|
content_type = r.headers.get("Content-Type", "")
|
||||||
|
|
|
||||||
|
|
@ -385,8 +385,10 @@ class DAVSession:
|
||||||
):
|
):
|
||||||
self._settings = {
|
self._settings = {
|
||||||
"cert": prepare_client_cert(auth_cert),
|
"cert": prepare_client_cert(auth_cert),
|
||||||
"auth": prepare_auth(auth, username, password),
|
|
||||||
}
|
}
|
||||||
|
auth = prepare_auth(auth, username, password)
|
||||||
|
if auth:
|
||||||
|
self._settings["auth"] = auth
|
||||||
self._settings.update(prepare_verify(verify, verify_fingerprint))
|
self._settings.update(prepare_verify(verify, verify_fingerprint))
|
||||||
|
|
||||||
self.useragent = useragent
|
self.useragent = useragent
|
||||||
|
|
|
||||||
|
|
@ -35,14 +35,16 @@ class HttpStorage(Storage):
|
||||||
*,
|
*,
|
||||||
connector,
|
connector,
|
||||||
**kwargs
|
**kwargs
|
||||||
):
|
) -> None:
|
||||||
super().__init__(**kwargs)
|
super().__init__(**kwargs)
|
||||||
|
|
||||||
self._settings = {
|
self._settings = {
|
||||||
"auth": prepare_auth(auth, username, password),
|
|
||||||
"cert": prepare_client_cert(auth_cert),
|
"cert": prepare_client_cert(auth_cert),
|
||||||
"latin1_fallback": False,
|
"latin1_fallback": False,
|
||||||
}
|
}
|
||||||
|
auth = prepare_auth(auth, username, password)
|
||||||
|
if auth:
|
||||||
|
self._settings["auth"] = auth
|
||||||
self._settings.update(prepare_verify(verify, verify_fingerprint))
|
self._settings.update(prepare_verify(verify, verify_fingerprint))
|
||||||
|
|
||||||
self.username, self.password = username, password
|
self.username, self.password = username, password
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue