From ec1685a0bfb1ad471eaea78329d2c7ed02044221 Mon Sep 17 00:00:00 2001 From: Marek Marecki Date: Sun, 23 Apr 2017 16:18:15 +0200 Subject: [PATCH] Fetch token from different locations --- diaspy/connection.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/diaspy/connection.py b/diaspy/connection.py index 003314c..e6f1124 100644 --- a/diaspy/connection.py +++ b/diaspy/connection.py @@ -43,6 +43,7 @@ class Connection(): self._token = '' self._diaspora_session = '' self._cookies = self._fetchcookies() + self._fetch_token_from = 'stream' try: #self._setlogin(username, password) self._login_data = {'user[username]': username, @@ -91,6 +92,18 @@ class Connection(): else: url = string return self._session.get(url, params=params, headers=headers, verify=self._verify_SSL, **kwargs) + def tokenFrom(self, location): + """Sets location for the *next* fetch of CSRF token. + Intended to be used for oneliners like this one: + + connection.tokenFrom('somewhere').delete(...) + + where the token comes from "somewhere" instead of the + default stream page. + """ + self._fetch_token_from = location + return self + def post(self, string, data, headers={}, params={}, **kwargs): """This method posts data to session. Performs additional checks if needed. @@ -184,12 +197,13 @@ class Connection(): :returns: token string """ - request = self.get('stream') + request = self.get(self._fetch_token_from) token = self._token_regex.search(request.text) if token is None: token = self._token_regex_2.search(request.text) if token is not None: token = token.group(1) else: raise errors.TokenError('could not find valid CSRF token') self._token = token + self._fetch_token_from = 'stream' return token def get_token(self, fetch=True): -- 2.25.1