Skip to content

Commit 4894c01

Browse files
committed
fix session login for non admin users
1 parent d5589e6 commit 4894c01

File tree

1 file changed

+30
-10
lines changed

1 file changed

+30
-10
lines changed

src/nextcloud/session.py

Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
import requests
44
from .compat import encode_requests_password
55

6+
import logging
7+
_logger = logging.getLogger(__name__)
8+
69

710
class NextCloudConnectionError(Exception):
811
""" A connection error occurred """
@@ -31,7 +34,7 @@ def __init__(self, url=None, user=None, password=None, auth=None, session_kwargs
3134
self.auth = None
3235
self.user = None
3336
self._set_credentials(user, password, auth)
34-
self.url = url
37+
self.url = url.rstrip('/')
3538
self._session_kwargs = session_kwargs or {}
3639

3740
def _set_credentials(self, user, password, auth):
@@ -75,18 +78,35 @@ def login(self, user=None, password=None, auth=None, client=None):
7578
self._set_credentials(user, password, auth)
7679
self.session.auth = self.auth
7780
if client:
78-
try:
79-
resp = client.with_attr(json_output=True).get_user()
80-
if not resp.is_ok:
81-
raise NextCloudLoginError(
82-
'Failed to login to NextCloud', self.url, resp)
83-
except requests.exceptions.SSLError as e:
84-
self.logout()
85-
raise e
86-
except Exception as e:
81+
self._check_session(client.with_attr(json_output=True), retry=3)
82+
83+
84+
def _check_session(self, client=None, retry=None):
85+
def _clear():
86+
if self.session:
8787
self.logout()
88+
89+
def _raise(e):
90+
if retry:
91+
_logger.warning('Retry session check (%s)', self.url)
92+
return self._check_session(client, retry=retry - 1)
93+
else:
94+
_clear()
8895
raise e
8996

97+
try:
98+
resp = client.get_user()
99+
if not resp.is_ok:
100+
_raise(NextCloudLoginError(
101+
'Failed to login to NextCloud', self.url, resp))
102+
except requests.exceptions.SSLError as e:
103+
_raise(e)
104+
except NextCloudConnectionError as e:
105+
_raise(e)
106+
except Exception as e:
107+
_clear()
108+
raise e
109+
90110
def logout(self):
91111
"""Log out the authenticated user and close the session.
92112

0 commit comments

Comments
 (0)