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.logged_in = False
self.username = None self.username = None
def login(self, cookies=None) -> None: def login(self, cookies=None) -> bool:
""" """
Logs this instance into FurAffinity. Logs this instance into FurAffinity.
Beware that a Chrome instance is launched to bypass Cloudflare and log in. Specify valid cookies to bypass this. 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: if self.logged_in:
# No need to do anything if we're already logged in # No need to do anything if we're already logged in
return return True
if not cookies: if not cookies:
# Try sign in to FA # Try sign in to FA
@ -450,9 +451,6 @@ class FAAPI:
while not self._driver.find_elements_by_id('my-username'): while not self._driver.find_elements_by_id('my-username'):
pass 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 # Extract the cookies and stop the driver
self._cookies = self._driver.get_cookies() self._cookies = self._driver.get_cookies()
self._driver.close() self._driver.close()
@ -463,6 +461,19 @@ class FAAPI:
self._req = requests.session() self._req = requests.session()
[self._req.cookies.set(cookie['name'], cookie['value']) for cookie in self._cookies] [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: def get_user(self, username: str) -> User:
soup = self.get_soup('{}/user/{}/'.format(FA_BASE_URL, username)) soup = self.get_soup('{}/user/{}/'.format(FA_BASE_URL, username))

View File

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