From b217e0a74ab55a318b4de3f8ef6b9e913a567b86 Mon Sep 17 00:00:00 2001 From: Shihaam Abdul Rahman Date: Sun, 15 Feb 2026 13:35:20 +0500 Subject: [PATCH] add getaccount route --- api.py | 108 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 107 insertions(+), 1 deletion(-) diff --git a/api.py b/api.py index 896fe21..d796b76 100755 --- a/api.py +++ b/api.py @@ -6,13 +6,61 @@ from dotenv import load_dotenv from flask import Flask, request, jsonify import subprocess import json +import requests from datetime import datetime, timedelta load_dotenv() # This will load environment variables from a .env file if it exists TIME_DIFF_LIMIT = int(os.getenv('TIME_DIFF_LIMIT', 2)) # Default to 2mins if not set +COOKIE_SERVER = os.getenv('COOKIE_SERVER', 'http://localhost:5000') + +# Bank BIC to name mapping +BANK_BIC_NAMES = { + "MADVMVMV": "Maldives Islamic Bank PLC", + "MALBMVMV": "Bank of Maldives", +} + +BANK_BIC_SHORT = { + "MADVMVMV": "MIB", + "MALBMVMV": "BML", +} + +# Shared headers (same as getcookie.py) +BASE_HEADERS = { + "User-Agent": "Mozilla/5.0 (ismath-said-will) give-real-api/so-i-wont-have-to-do-this AppleWebKit/537.36 (KHTML, like Gecko) Safari/537.36", +} app = Flask(__name__) +def get_cookies(): + """Fetch authentication cookies from the cookie server.""" + try: + response = requests.get(f"{COOKIE_SERVER}/getcookie", timeout=30) + if response.status_code == 200: + return response.json() + except requests.RequestException as e: + app.logger.error(f"Error fetching cookies: {str(e)}") + return None + +def get_ips_account(account_number): + """Look up account details via MIB IPS API.""" + cookies = get_cookies() + if not cookies: + return None, "Failed to get authentication cookies" + + try: + response = requests.post( + 'https://faisanet.mib.com.mv/AjaxAlias/getIPSAccount', + headers=BASE_HEADERS, + cookies=cookies, + data={'benefAccount': account_number}, + timeout=30 + ) + return response.json(), None + except requests.RequestException as e: + return None, f"Request failed: {str(e)}" + except json.JSONDecodeError as e: + return None, f"Invalid JSON response: {str(e)}" + def fetch_account_name(account_no): try: result = subprocess.run(['./fetchname.sh', account_no], capture_output=True, text=True, check=True) @@ -145,11 +193,69 @@ def verify_payment(): # If both verifications fail return jsonify({"success": False, "message": "Transaction not found, contact support"}) - + except Exception as e: app.logger.error(f"Unexpected error: {str(e)}") return jsonify({"success": False, "message": "Internal server error"}), 500 +@app.route('/getaccount/', methods=['GET']) +def get_account(accountnumber): + try: + result, error = get_ips_account(accountnumber) + + if error: + return jsonify({ + "success": False, + "message": error, + "accountName": None, + "bankSwift": None, + "currency": None, + "bankName": None, + "bankNameShort": None + }), 500 + + if not result.get('success'): + reason_text = result.get('reasonText', '') + if reason_text == "Transaction forbidden on this type of account.": + message = "Invalid currency" + elif reason_text == "Account number is invalid or missing.": + message = "Invalid account" + else: + message = reason_text or "Account not found" + + return jsonify({ + "success": False, + "message": message, + "accountName": None, + "bankSwift": None, + "currency": None, + "bankName": None, + "bankNameShort": None + }), 404 + + bank_bic = result.get('bankBic', '') + return jsonify({ + "success": True, + "message": "Success", + "accountName": result.get('accountName'), + "bankSwift": bank_bic, + "currency": "MVR", + "bankName": BANK_BIC_NAMES.get(bank_bic, ""), + "bankNameShort": BANK_BIC_SHORT.get(bank_bic, "") + }) + + except Exception as e: + app.logger.error(f"Error in get_account: {str(e)}") + return jsonify({ + "success": False, + "message": "Internal server error", + "accountName": None, + "bankSwift": None, + "currency": None, + "bankName": None, + "bankNameShort": None + }), 500 + if __name__ == '__main__': debug_mode = os.getenv('APP_DEBUG', 'False').lower() in ('true', '1', 't') port = int(os.getenv('PORT', 5000))