cookie api works, but need to select profile

This commit is contained in:
Shihaam Abdul Rahman 2025-01-10 06:35:58 +05:00
parent 03ee1dec32
commit 1264d92a04
Signed by: shihaam
GPG Key ID: 6DA2E87EBC227636

View File

@ -1,29 +1,42 @@
from flask import Flask, jsonify, request
import os import os
import pyotp import pyotp
import time
from urllib.parse import urlencode from urllib.parse import urlencode
from bs4 import BeautifulSoup from bs4 import BeautifulSoup
import requests import requests
from dotenv import load_dotenv from dotenv import load_dotenv
import json
class MIBLogin: class MIBLogin:
def __init__(self): def __init__(self):
self.session = requests.Session()
self.base_url = "https://faisanet.mib.com.mv" self.base_url = "https://faisanet.mib.com.mv"
self.headers = { self.headers = {
"User-Agent": "Mozilla/5.0 (give-api) ismath-owes-me-real-api/give-real-api AppleWebKit/537.36 (KHTML, like Gecko) Safari/537.36", "User-Agent": "Mozilla/5.0 (give-api) ismath-owes-me-real-api/give-real-api AppleWebKit/537.36 (KHTML, like Gecko) Safari/537.36",
"Accept": "*/*" "Accept": "*/*"
} }
self.last_cookie = None
self.last_renewal_time = 0
self.create_new_session()
def create_new_session(self):
self.session = requests.Session()
def get_login_page(self): def get_login_page(self):
response = self.session.get(f"{self.base_url}/auth", headers=self.headers) response = self.session.get(f"{self.base_url}/auth", headers=self.headers)
soup = BeautifulSoup(response.text, 'html.parser') soup = BeautifulSoup(response.text, 'html.parser')
return soup.find('input', {'name': 'rTag'})['value'] rtag_input = soup.find('input', {'name': 'rTag'})
if not rtag_input:
raise ValueError("Failed to find rTag input field in login page.")
return rtag_input['value']
def get_auth_type(self, rtag, username, retain=1): def get_auth_type(self, rtag, username, retain=1):
data = {'rTag': rtag, 'pgf01': username, 'retain': retain} data = {'rTag': rtag, 'pgf01': username, 'retain': retain}
headers = {**self.headers, 'Content-Type': 'application/x-www-form-urlencoded'} headers = {**self.headers, 'Content-Type': 'application/x-www-form-urlencoded'}
response = self.session.post(f"{self.base_url}/aAuth/getAuthType", headers=headers, data=urlencode(data)) response = self.session.post(
f"{self.base_url}/aAuth/getAuthType",
headers=headers,
data=urlencode(data)
)
return response.json() return response.json()
def login(self, username, password, retain=1): def login(self, username, password, retain=1):
@ -32,7 +45,11 @@ class MIBLogin:
data = {'rTag': rtag, 'pgf01': username, 'pgf02': password, 'retain': retain} data = {'rTag': rtag, 'pgf01': username, 'pgf02': password, 'retain': retain}
headers = {**self.headers, 'Content-Type': 'application/x-www-form-urlencoded'} headers = {**self.headers, 'Content-Type': 'application/x-www-form-urlencoded'}
self.session.post(f"{self.base_url}/aAuth", headers=headers, data=urlencode(data)) self.session.post(
f"{self.base_url}/aAuth",
headers=headers,
data=urlencode(data)
)
def auth_2fa(self, totp_seed): def auth_2fa(self, totp_seed):
self.session.get(f"{self.base_url}/auth2FA", headers=self.headers) self.session.get(f"{self.base_url}/auth2FA", headers=self.headers)
@ -40,18 +57,70 @@ class MIBLogin:
data = {'otpType': 3, 'otp': totp.now()} data = {'otpType': 3, 'otp': totp.now()}
headers = {**self.headers, 'Content-Type': 'application/x-www-form-urlencoded'} headers = {**self.headers, 'Content-Type': 'application/x-www-form-urlencoded'}
self.session.post(f"{self.base_url}/aAuth2FA/verifyOTP", headers=headers, data=urlencode(data)) self.session.post(
f"{self.base_url}/aAuth2FA/verifyOTP",
headers=headers,
data=urlencode(data)
)
return {cookie.name: cookie.value for cookie in self.session.cookies if cookie.name in ['IBSID', 'ql_0']} cookies = {
cookie.name: cookie.value
for cookie in self.session.cookies
if cookie.name in ['IBSID', 'ql_0']
}
self.last_cookie = cookies
self.last_renewal_time = time.time()
return cookies
def main(): def clear_cookie(self):
load_dotenv() self.last_cookie = None
mib = MIBLogin() self.create_new_session()
# Initialize Flask app
app = Flask(__name__)
mib = MIBLogin()
load_dotenv()
def renew_cookie_internal():
try:
print(f"Starting cookie renewal process...")
mib.clear_cookie()
mib.login(os.getenv('USERNAME'), os.getenv('PASSWORD')) mib.login(os.getenv('USERNAME'), os.getenv('PASSWORD'))
cookies = mib.auth_2fa(os.getenv('TOTP_SEED')) cookies = mib.auth_2fa(os.getenv('TOTP_SEED'))
print(f"Cookie renewal completed successfully")
return cookies
except Exception as e:
print(f"Error during cookie renewal: {str(e)}")
return {"error": str(e)}
# Print the cookies in JSON format @app.route('/getcookie', methods=['GET'])
print(json.dumps(cookies, indent=4)) def get_cookie():
client_ip = request.remote_addr
print(f"Providing cookie to: {client_ip}")
if __name__ == "__main__": if mib.last_cookie:
main() return jsonify(mib.last_cookie)
else:
cookies = renew_cookie_internal()
if "error" in cookies:
return jsonify(cookies), 500
return jsonify(cookies)
@app.route('/newcookie', methods=['GET'])
def new_cookie():
client_ip = request.remote_addr
current_time = time.time()
# Check if less than 60 seconds since last renewal
if current_time - mib.last_renewal_time < 60:
print(f"Providing existing cookie to {client_ip} (last renewal was {int(current_time - mib.last_renewal_time)} seconds ago)")
return jsonify(mib.last_cookie)
print(f"Renewing cookie as requested by: {client_ip}")
cookies = renew_cookie_internal()
if "error" in cookies:
return jsonify(cookies), 500
return jsonify(cookies)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)