folder structure
This commit is contained in:
Executable
+146
@@ -0,0 +1,146 @@
|
||||
"""
|
||||
Functions for network related stuff.
|
||||
"""
|
||||
|
||||
import requests
|
||||
import hashlib
|
||||
from bs4 import BeautifulSoup
|
||||
import os
|
||||
|
||||
not_login = 0
|
||||
F_not_anymore = 0
|
||||
session = requests.Session()
|
||||
|
||||
def _read_shadow() -> str:
|
||||
"""
|
||||
Reads the shadow file and returns it in
|
||||
a suitable format for other functions.
|
||||
"""
|
||||
|
||||
result = ""
|
||||
try:
|
||||
with open(f"{os.environ['HOME']}/.local/lib/solendata/shadow", "r") as f:
|
||||
for row in f:
|
||||
result += row+";"
|
||||
except FileNotFoundError:
|
||||
os.system(f"touch {os.environ['HOME']}/.local/lib/solendata/shadow")
|
||||
with open(f"{os.environ['HOME']}/.local/lib/solendata/shadow", "r") as f:
|
||||
for row in f:
|
||||
result += row+";"
|
||||
|
||||
return result
|
||||
|
||||
def _save_creds(user: str, pwd: str):
|
||||
"""
|
||||
Saves credentials into the shadow file
|
||||
by appending them.
|
||||
"""
|
||||
|
||||
creds = ";" + _get_creds_hash(user, pwd)
|
||||
|
||||
try:
|
||||
with open(f"{os.environ['HOME']}/.local/lib/solendata/shadow", "a+") as f:
|
||||
if not creds in _read_shadow():
|
||||
f.write(creds)
|
||||
except FileNotFoundError:
|
||||
os.system(f"touch {os.environ['HOME']}/.local/lib/solendata/shadow")
|
||||
with open(f"{os.environ['HOME']}/.local/lib/solendata/shadow", "a+") as f:
|
||||
if not creds in _read_shadow():
|
||||
f.write(creds)
|
||||
|
||||
def _eval_creds(creds: str) -> bool:
|
||||
"""
|
||||
Evaluates the credentials for if
|
||||
they are in the shadow file or not.
|
||||
"""
|
||||
|
||||
shadow = _read_shadow()
|
||||
|
||||
if creds in shadow:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
def _get_creds_hash(user: str, pwd: str) -> str:
|
||||
"""
|
||||
Creates a sha512 hash from the username
|
||||
and password.
|
||||
"""
|
||||
|
||||
user_hash = hashlib.sha512(bytes(user, 'utf-8')).hexdigest()
|
||||
pwd_hash = hashlib.sha512(bytes(pwd, 'utf-8')).hexdigest()
|
||||
creds = user_hash+":"+pwd_hash
|
||||
|
||||
return creds
|
||||
|
||||
def get_user_hash(user: str) -> str:
|
||||
return str(hashlib.sha512(bytes(user, 'utf-8')).hexdigest())
|
||||
|
||||
def login(user: str, pwd: str) -> bool:
|
||||
"""
|
||||
Tries to send a request to the SOL
|
||||
servers in order to log in.
|
||||
"""
|
||||
|
||||
if is_connected():
|
||||
url: str = "https://aplikace.skolaonline.cz/SOL/Prihlaseni.aspx"
|
||||
data = {
|
||||
"__EVENTTARGET": "dnn$ctr994$SOLLogin$btnODeslat",
|
||||
"__EVENTARGUMENT": "",
|
||||
"__VIEWSTATE": "",
|
||||
"__VIEWSTATEGENERATOR": "",
|
||||
"__VIEWSTATEENCRYPTED": "",
|
||||
"__PREVIOUSPAGE": "",
|
||||
"__EVENTVALIDATION": "",
|
||||
"dnn$dnnSearch$txtSearch": "",
|
||||
"JmenoUzivatele": user, # username
|
||||
"HesloUzivatele": pwd, # password
|
||||
"ScrollTop": "",
|
||||
"__dnnVariable": "",
|
||||
"__RequestVerificationToken": ""
|
||||
}
|
||||
|
||||
post_login = session.post(url, data=data)
|
||||
if post_login.status_code != 200:
|
||||
return False
|
||||
else:
|
||||
return True
|
||||
else:
|
||||
if _eval_creds(_get_creds_hash(user, pwd)):
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
def is_connected() -> bool:
|
||||
"""
|
||||
Checks whether there is internet
|
||||
access present.
|
||||
"""
|
||||
|
||||
import socket
|
||||
|
||||
try:
|
||||
host = socket.gethostbyname("one.one.one.one")
|
||||
s = socket.create_connection((host, 80), 2)
|
||||
s.close()
|
||||
return True
|
||||
except:
|
||||
pass
|
||||
return False
|
||||
|
||||
def get_html_from(params=None) -> str:
|
||||
"""
|
||||
Fetches the HTML markup of
|
||||
a specified subsite of SOL.
|
||||
"""
|
||||
|
||||
base = "https://aplikace.skolaonline.cz"
|
||||
|
||||
if params is not None:
|
||||
base += params
|
||||
|
||||
response = session.get(base)
|
||||
if response.status_code == 200:
|
||||
return response
|
||||
else:
|
||||
return ""
|
||||
Reference in New Issue
Block a user