Skip to content

Commit

Permalink
Try to work with token as a bearer
Browse files Browse the repository at this point in the history
  • Loading branch information
GuyKh committed Feb 12, 2024
1 parent fbc4553 commit 9d006b6
Show file tree
Hide file tree
Showing 6 changed files with 80 additions and 45 deletions.
2 changes: 2 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ license = "MIT"
[tool.poetry.dependencies]
python = "^3.11"
dynaconf = "3.2.4"
librecaptcha = "0.7.3"
mashumaro = "^3.12"

[tool.poetry.dev-dependencies]
pytest = "8.0.0"
Expand Down
21 changes: 21 additions & 0 deletions src/const.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@

HEADERS_NO_AUTH = {
"Content-Type": "application/json; charset=utf-8",
"X-Iec-Idt": "1",
"X-Iec-Webview": "1",
"accept": "application/json, text/plain, */*",
"origin": "https://www.iec.co.il",
"authority": "iecapi.iec.co.il",
"referer": "https://www.iec.co.il/",
"Dnt": "1",
"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36",
"Recaptchtoken": "03AFcWeA5xe43I00jSCrH-aX7wMuQb6WRW2xevCwVO11LLqPWBuwsn0FeIv_LcQ"
"-2lCIJuKckwJaLfMQ_JXyQR4jRLpS9ebXASA8l16w319BDh9HNUOZ50UC6dp7n9iaqZhNgfCJNu4qDWHGNQaLT5xF"
"-dNQRQyNbycDswmXa9-LnfMU5bMnXABM99S7-3"
"-1VsJXlXJPass7lvybsAzggAMpODUm5FqHjWDZhQxiG7Q6PpbA1RZaj_s6wfwaN5_n5lujhLbPy12giJSMC8FglinwLFtPIYYhvOb5lwrnNk_hpdCzitwLW8aNfSMcwV74ZQZsW4hbtFu7aVtEeDoZJ3Q4Wr9kj_XhW0X5HRYGqj5P7QbZlu1_LNDBkv4Yxk43WcA-rB9Ms4M0cpCDyPvagHRvtNXyPytqtPo8UP3OI64ztFLCG-EJ1LWSiErwAnSNrpiYuOGDAl9XBImp5JhZPfOTvhg4iA4UFd3MSFDF9ddlOWeWPJfmOuGOyMUnEyn67KY84GCWbQOZBJrGO5dTqaBqxojyKC7iVkX-5EivLhXQVmFRsoe6GxgI5nnLKfl_deRTfmoGxSrlWTUBsUzfEmGbqIqQAw_9kFakyNbS9xugsZPfy8S8hZ7o8"
}

HEADERS_WITH_AUTH = HEADERS_NO_AUTH.copy() # Make a copy of the original dictionary
HEADERS_WITH_AUTH["Authorization"] = "YourAuthorizationTokenHere"

GET_CONSUMER_URL = "https://iecapi.iec.co.il/api/Consumer"
22 changes: 22 additions & 0 deletions src/data.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import requests

from src.login import IECLoginError
from src.models.customer import Customer
from src.const import GET_CONSUMER_URL, HEADERS_WITH_AUTH
from src.models.response_descriptor import ErrorResponseDescriptor


def get_consumer() -> Customer:
"""Get consumer data response from IEC API."""
# sending get request and saving the response as response object
response = requests.get(url=GET_CONSUMER_URL, headers=HEADERS_WITH_AUTH, timeout=10)

if response.status_code != 200:
print(f"Failed Login: (Code {response.status_code}): {response.reason}")
if len(response.content) > 0:
login_error_response = ErrorResponseDescriptor.from_dict(response.json())
raise IECLoginError(login_error_response.code, login_error_response.error)
else:
raise IECLoginError(response.status_code, response.reason)

return Customer.from_dict(response.json())
12 changes: 3 additions & 9 deletions src/login.py
Original file line number Diff line number Diff line change
@@ -1,23 +1,17 @@
""" IEC Login Module. """
import requests
from librecaptcha import librecaptcha

from src.models.login_flow import LoginResponse, OTPRequest, OTPResponse
from src.models.response_descriptor import ErrorResponseDescriptor

_SMS_URL = "https://iecapi.iec.co.il//api/Authentication/{}/1/-1"
_LOGIN_URL = "https://iecapi.iec.co.il//api/Authentication/login/{}"
_HEADERS = {
"Content-Type": "application/json",
"accept": "application/json, text/plain, */*",
"origin": "https://www.iec.co.il",
"authority": "iecapi.iec.co.il",
"referer": "https://www.iec.co.il/",
"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/114.0.0.0 Safari/537.36",
}


def get_login_response(id_number: str) -> LoginResponse:

recaptcha_token = librecaptcha.get_token(api_key="", site_url="https://iecapi.iec.co.il//api/content/he-IL/login", )
"""Get first login response from IEC API."""
# sending get request and saving the response as response object
response = requests.get(url=_SMS_URL.format(id_number), headers=_HEADERS, timeout=10)
Expand Down
13 changes: 11 additions & 2 deletions src/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,24 @@

from logging import getLogger
from logging.config import fileConfig as logConfig
from src.const import HEADERS_WITH_AUTH
from src.data import get_consumer

from src.login import IECLoginError, get_authorization_token
from src.login import IECLoginError

logConfig("./logging.conf", disable_existing_loggers=False)
logger = getLogger(__name__)

if __name__ == "__main__": # pragma: no cover
try:
token = get_authorization_token()
# token = get_authorization_token()
token = input("Input bearer token:")
print(f"Token: {token}")
HEADERS_WITH_AUTH["Authorization"] = "Bearer " + token
print(HEADERS_WITH_AUTH)

consumer = get_consumer()
print(f"Consumer: {consumer}")

except IECLoginError as err:
logger.error("Failed Login: (Code %d): %s", err.code, err.error)
55 changes: 21 additions & 34 deletions src/models/customer.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,43 +33,30 @@
from dataclasses import dataclass, field

from mashumaro import DataClassDictMixin, field_options
from response_descriptor import ResponseDescriptor


@dataclass
class Contract(DataClassDictMixin):
address: str
contract_id: str = field(metadata=field_options(alias="contractId"))
due_date: str = field(metadata=field_options(alias="dueDate"))
total_debt: float = field(metadata=field_options(alias="totalDebt"))
frequency: int
status: int
from_pativte_producer: bool = field(
metadata=field_options(alias="fromPativteProducer")
)
city_code: str = field(metadata=field_options(alias="cityCode"))
city_name: str = field(metadata=field_options(alias="cityName"))
street_code: str = field(metadata=field_options(alias="streetCode"))
street_name: str = field(metadata=field_options(alias="streetName"))
house_number: str = field(metadata=field_options(alias="houseNumber"))
debt_for_invoices_due_date_not_passed: float = field(
metadata=field_options(alias="debtForInvoicesDueDateNotPassed")
)
is_touz: bool = field(metadata=field_options(alias="isTouz"))
smart_meter: bool = field(metadata=field_options(alias="smartMeter"))
producer_type: int = field(metadata=field_options(alias="producerType"))
class Account(DataClassDictMixin):
main_contract_id: str = field(metadata=field_options(alias="mainContractId"))
main_contract_id_type: int = field(metadata=field_options(alias="mainContractIdType"))
company_id: str = field(metadata=field_options(alias="companyId"))
name: str
last_name: str = field(metadata=field_options(alias="lastName"))
bp_number: str = field(metadata=field_options(alias="bpNumber"))
bp_type: int = field(metadata=field_options(alias="bpType"))
is_active_account: bool = field(metadata=field_options(alias="isActiveAccount"))
customer_role: int = field(metadata=field_options(alias="customerRole"))
account_type: int = field(metadata=field_options(alias="accountType"))


@dataclass
class Contracts(DataClassDictMixin):
contracts: list[Contract]
contract_amount: int
total_to_pay: float


@dataclass
class GetContractResponse(DataClassDictMixin):
data: Contracts
response_descriptor: ResponseDescriptor = field(
metadata=field_options(alias="responseDescriptor")
)
class Customer(DataClassDictMixin):
bp_number: str = field(metadata=field_options(alias="bpNumber"))
id_type: int = field(metadata=field_options(alias="idType"))
accounts: list[Account]
customer_status: int = field(metadata=field_options(alias="customerStatus"))
id_number: str = field(metadata=field_options(alias="idNumber"))
first_name: str = field(metadata=field_options(alias="firstname"))
last_name: str = field(metadata=field_options(alias="lastName"))
mobile_phone: str = field(metadata=field_options(alias="mobilePhone"))
email: str

0 comments on commit 9d006b6

Please sign in to comment.