forked from DigiFi/digifi-BankToProductCore
[add]: bank call auth endpoint
This commit is contained in:
@@ -8,6 +8,45 @@ import logging
|
||||
class SimbrellaIntegration:
|
||||
BASE_URL = settings.SIMBRELLA_BASE_URL
|
||||
ENDPOINT_RAC_CHECKS = settings.SIMBRELLA_ENDPOINT_RAC_CHECKS
|
||||
HEALTH_ENDPOINT = settings.SIMBRELLA_HEALTH
|
||||
AUTH_ENDPOINT = settings.BANK_CALL_AUTH_ENDPOINT
|
||||
|
||||
_access_token = None # cache token in memory
|
||||
|
||||
@staticmethod
|
||||
def generate_token():
|
||||
"""
|
||||
Generate a new access token using the username and password from settings.
|
||||
"""
|
||||
url = f"{SimbrellaIntegration.BASE_URL}{SimbrellaIntegration.AUTH_ENDPOINT}"
|
||||
|
||||
payload = {
|
||||
"username": settings.BANK_CALL_USERNAME,
|
||||
"password": settings.BANK_CALL_PASSWORD,
|
||||
"grant_type": "password"
|
||||
}
|
||||
|
||||
headers = {"Content-Type": "application/json"}
|
||||
|
||||
try:
|
||||
logger.info(f"Requesting token from {url}")
|
||||
|
||||
response = httpx.post(url, json=payload, headers=headers, timeout=10.0)
|
||||
response.raise_for_status()
|
||||
|
||||
data = response.json()
|
||||
SimbrellaIntegration._access_token = data.get("access_token")
|
||||
|
||||
if not SimbrellaIntegration._access_token:
|
||||
raise Exception("Access token not found in response")
|
||||
|
||||
logger.info("Successfully retrieved access token")
|
||||
return SimbrellaIntegration._access_token
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Token generation failed: {str(e)}", exc_info=True)
|
||||
raise Exception(f"Token generation failed: {str(e)}")
|
||||
|
||||
|
||||
@staticmethod
|
||||
def rac_check(customer_id, account_id, transaction_id):
|
||||
@@ -28,8 +67,7 @@ class SimbrellaIntegration:
|
||||
|
||||
headers = {
|
||||
"Content-Type": "application/json",
|
||||
"x-api-key": f"{settings.VALID_API_KEY}",
|
||||
"App-Id": f"{settings.VALID_APP_ID}",
|
||||
"Authorization": f"Bearer {SimbrellaIntegration._access_token}"
|
||||
}
|
||||
|
||||
try:
|
||||
@@ -42,4 +80,26 @@ class SimbrellaIntegration:
|
||||
except Exception as e:
|
||||
logger.error(f"RACCheck API call failed: {str(e)}", exc_info=True)
|
||||
raise Exception(f"RACCheck API call failed: {str(e)}")
|
||||
|
||||
@staticmethod
|
||||
def health_check():
|
||||
"""
|
||||
Health check for Simbrella Service
|
||||
"""
|
||||
|
||||
url = f"{SimbrellaIntegration.BASE_URL}/{SimbrellaIntegration.HEALTH_ENDPOINT}"
|
||||
logger.info(f"Simbrella Health Check URL: {url}")
|
||||
|
||||
try:
|
||||
headers = {
|
||||
"Content-Type": "application/json",
|
||||
"Authorization": f"Bearer {SimbrellaIntegration._access_token}"
|
||||
}
|
||||
|
||||
response = httpx.get(url, headers=headers, timeout=10.0)
|
||||
logger.info(f"Simbrella Health Check Response: {response.text}")
|
||||
return response
|
||||
except Exception as e:
|
||||
logger.error(f"Simbrella Health Check API call failed: {str(e)}", exc_info=True)
|
||||
raise Exception(f"Simbrella Health Check API call failed: {str(e)}")
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
from sqlite3 import DatabaseError
|
||||
from app.api.integrations.events_service import EventServiceIntegration
|
||||
from app.api.integrations.simbrella import SimbrellaIntegration
|
||||
from flask import Blueprint, request, jsonify, send_from_directory
|
||||
from app.api.services import (
|
||||
EligibilityCheckService,
|
||||
@@ -125,6 +125,7 @@ def health_check():
|
||||
response = {}
|
||||
db_status = "Connection Successful"
|
||||
events_service_status = "Connection Successful"
|
||||
bank_status = "Connection Successful"
|
||||
errors = []
|
||||
status = "ok"
|
||||
|
||||
@@ -162,11 +163,26 @@ def health_check():
|
||||
status = "failed"
|
||||
errors.append(f"Events Service connection failed: {str(e)}")
|
||||
|
||||
# Check Emulator health
|
||||
try:
|
||||
emulator_response = SimbrellaIntegration.health_check()
|
||||
|
||||
if emulator_response.status_code != 200:
|
||||
bank_status = "Connection Failed"
|
||||
status = "failed"
|
||||
errors.append(f"Emulator response: {emulator_response.text}")
|
||||
|
||||
except Exception as e:
|
||||
bank_status = "Connection Failed"
|
||||
status = "failed"
|
||||
errors.append(f"Emulator connection failed: {str(e)}")
|
||||
|
||||
|
||||
response = {
|
||||
"status": status,
|
||||
"db_status": db_status,
|
||||
"events_service_status": events_service_status,
|
||||
"bank_status": bank_status,
|
||||
"db_uri": db_uri,
|
||||
"errors": errors or None
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user