Browse Source

Finished login procedure.

master
Raphael Roberts 5 years ago
commit
3af78e0311
  1. 1
      .gitignore
  2. 0
      panera_sync/__init__.py
  3. 9
      panera_sync/fill_form.py
  4. 0
      panera_sync/ids.py
  5. 22
      panera_sync/login.py
  6. 19
      panera_sync/main_loop.py
  7. 25
      panera_sync/saml_check.py
  8. 0
      panera_sync/shifts.py
  9. 0
      panera_sync/user.py

1
.gitignore

@ -0,0 +1 @@
*.pyc

0
panera_sync/__init__.py

9
panera_sync/fill_form.py

@ -0,0 +1,9 @@
def get_form_fields(form):
form_action = form.action
data = dict()
inputs = form.xpath("//input")
for _input in inputs:
name = _input.name
if name is not None:
data[name] = _input.value
return form_action, data

0
panera_sync/ids.py

22
panera_sync/login.py

@ -0,0 +1,22 @@
from lxml.html import fromstring as lxml_from_string
from urllib.parse import urljoin
from panera_sync.saml_check import saml_check
from panera_sync.fill_form import get_form_fields
def login_user(session, response, username, password):
parsed = lxml_from_string(response.text)
form = parsed.xpath("//form")[0]
post_url, to_send = get_form_fields(form)
to_send["username"] = username
to_send["password"] = password
print(to_send)
post_url = urljoin(response.url, post_url)
print(post_url)
headers = {
"Host": "iso3.panerabread.com",
"Referer": "https://pantry.panerabread.com/",
}
r = session.post(post_url, data=to_send, headers=headers)
return saml_check(session, r)

19
panera_sync/main_loop.py

@ -0,0 +1,19 @@
import lxml
import requests
from panera_sync.saml_check import saml_check
from panera_sync.login import login_user
PANERA_URL = "https://pantry.panerabread.com"
def get_login_page(session: requests.Session):
landing = session.get(PANERA_URL)
return saml_check(session, landing)
def login(username, password):
session = requests.Session()
login_page = get_login_page(session)
login_user(session, login_page, username, password)
return session

25
panera_sync/saml_check.py

@ -0,0 +1,25 @@
from urllib.parse import urlparse
from lxml.html import fromstring as lxml_from_string
from panera_sync.fill_form import get_form_fields
def saml_submit(session, response):
origin_url = response.url
url_parse_result = urlparse(origin_url)
headers = {
"Origin": f"{url_parse_result.scheme}://{url_parse_result.netloc}",
"Referer": origin_url,
}
parsed = lxml_from_string(response.text)
form = parsed.xpath("//form")[0]
post_url, to_submit = get_form_fields(form)
return session.post(post_url, data=to_submit, headers=headers)
def saml_check(session, response, response_text=None):
parsed = lxml_from_string(response.text)
witness = parsed.xpath('//form//input[contains(@name,"SAML")]')
print(witness)
if len(witness) != 0:
return saml_submit(session, response)

0
panera_sync/shifts.py

0
panera_sync/user.py

Loading…
Cancel
Save