Actually verify whether the login was successful

This commit is contained in:
Thomas Wade 2020-04-22 03:40:45 +09:30
parent c0ed667f18
commit ebcc589841
2 changed files with 18 additions and 7 deletions

View File

@ -431,15 +431,16 @@ class FAAPI:
self.logged_in = False
self.username = None
def login(self, cookies=None) -> None:
def login(self, cookies=None) -> bool:
"""
Logs this instance into FurAffinity.
Beware that a Chrome instance is launched to bypass Cloudflare and log in. Specify valid cookies to bypass this.
@param cookies: Cookies to use for this session.
:param cookies: Cookies to use for this session.
:return: Whether the login attempt was successful.
"""
if self.logged_in:
# No need to do anything if we're already logged in
return
return True
if not cookies:
# Try sign in to FA
@ -450,9 +451,6 @@ class FAAPI:
while not self._driver.find_elements_by_id('my-username'):
pass
# Save the username of the account we've logged in as
self.username = self._driver.find_elements_by_css_selector('#my-username:not(.hideondesktop)')[0].text.strip()
# Extract the cookies and stop the driver
self._cookies = self._driver.get_cookies()
self._driver.close()
@ -463,6 +461,19 @@ class FAAPI:
self._req = requests.session()
[self._req.cookies.set(cookie['name'], cookie['value']) for cookie in self._cookies]
# Verify login by getting our username
soup = self.get_soup(FA_BASE_URL)
try:
self.username = soup.select('.loggedin_user_avatar')[0].get('alt').strip() # This is more reliable than the user menu heading, don't ask why
except IndexError:
# Not logged in
self.logged_in = False
return False
# Mark this instance as logged in
self.logged_in = True
return True
def get_user(self, username: str) -> User:
soup = self.get_soup('{}/user/{}/'.format(FA_BASE_URL, username))

View File

@ -2,7 +2,7 @@ from setuptools import setup, find_packages
setup(
name='FAAPI',
version='0.2.1',
version='0.3.1',
packages=find_packages(),
url='https://tem.party/gitea/tom/FAAPI',
license='WTFPL',