sachin commited on
Commit
f73c392
·
1 Parent(s): d7ce853
Files changed (1) hide show
  1. src/server/main.py +39 -18
src/server/main.py CHANGED
@@ -619,67 +619,88 @@ async def translate(
619
  x_session_key: str = Header(..., alias="X-Session-Key")
620
  ):
621
  user_id = await get_current_user(credentials)
622
- session_key = base64.b64decode(x_session_key)
623
-
 
 
 
 
624
  # Decrypt sentences
625
  decrypted_sentences = []
626
  for sentence in request.sentences:
627
  try:
628
  encrypted_sentence = base64.b64decode(sentence)
629
  decrypted_sentence = decrypt_data(encrypted_sentence, session_key).decode("utf-8")
 
 
630
  decrypted_sentences.append(decrypted_sentence)
631
  except Exception as e:
632
  logger.error(f"Sentence decryption failed: {str(e)}")
633
- raise HTTPException(status_code=400, detail="Invalid encrypted sentence")
634
-
635
  # Decrypt source language
636
  try:
637
  encrypted_src_lang = base64.b64decode(request.src_lang)
638
  decrypted_src_lang = decrypt_data(encrypted_src_lang, session_key).decode("utf-8")
 
 
639
  except Exception as e:
640
  logger.error(f"Source language decryption failed: {str(e)}")
641
- raise HTTPException(status_code=400, detail="Invalid encrypted source language")
642
-
643
  # Decrypt target language
644
  try:
645
  encrypted_tgt_lang = base64.b64decode(request.tgt_lang)
646
  decrypted_tgt_lang = decrypt_data(encrypted_tgt_lang, session_key).decode("utf-8")
 
 
647
  except Exception as e:
648
  logger.error(f"Target language decryption failed: {str(e)}")
649
- raise HTTPException(status_code=400, detail="Invalid encrypted target language")
650
-
651
- logger.info(f"Received translation request: {decrypted_sentences}, src_lang: {decrypted_src_lang}, tgt_lang: {decrypted_tgt_lang}, user_id: {user_id}")
652
-
653
- external_url = f"https://slabstech-dhwani-internal-api-server.hf.space/translate?src_lang={decrypted_src_lang}&tgt_lang={decrypted_tgt_lang}"
654
-
 
 
 
 
 
 
 
 
 
 
655
  payload = {
656
  "sentences": decrypted_sentences,
657
  "src_lang": decrypted_src_lang,
658
  "tgt_lang": decrypted_tgt_lang
659
  }
660
-
661
  try:
662
  response = requests.post(
663
  external_url,
664
  json=payload,
665
  headers={
666
  "accept": "application/json",
667
- "Content-Type": "application/json"
 
668
  },
669
  timeout=60
670
  )
671
  response.raise_for_status()
672
-
673
  response_data = response.json()
674
  translations = response_data.get("translations", [])
675
-
676
  if not translations or len(translations) != len(decrypted_sentences):
677
  logger.warning(f"Unexpected response format: {response_data}")
678
  raise HTTPException(status_code=500, detail="Invalid response from translation service")
679
-
680
  logger.info(f"Translation successful: {translations}")
681
  return TranslationResponse(translations=translations)
682
-
683
  except requests.Timeout:
684
  logger.error("Translation request timed out")
685
  raise HTTPException(status_code=504, detail="Translation service timeout")
 
619
  x_session_key: str = Header(..., alias="X-Session-Key")
620
  ):
621
  user_id = await get_current_user(credentials)
622
+ try:
623
+ session_key = base64.b64decode(x_session_key)
624
+ except Exception as e:
625
+ logger.error(f"Invalid X-Session-Key: {str(e)}")
626
+ raise HTTPException(status_code=400, detail="Invalid session key")
627
+
628
  # Decrypt sentences
629
  decrypted_sentences = []
630
  for sentence in request.sentences:
631
  try:
632
  encrypted_sentence = base64.b64decode(sentence)
633
  decrypted_sentence = decrypt_data(encrypted_sentence, session_key).decode("utf-8")
634
+ if not decrypted_sentence.strip():
635
+ raise ValueError("Decrypted sentence is empty")
636
  decrypted_sentences.append(decrypted_sentence)
637
  except Exception as e:
638
  logger.error(f"Sentence decryption failed: {str(e)}")
639
+ raise HTTPException(status_code=400, detail=f"Invalid encrypted sentence: {str(e)}")
640
+
641
  # Decrypt source language
642
  try:
643
  encrypted_src_lang = base64.b64decode(request.src_lang)
644
  decrypted_src_lang = decrypt_data(encrypted_src_lang, session_key).decode("utf-8")
645
+ if not decrypted_src_lang.strip():
646
+ raise ValueError("Decrypted source language is empty")
647
  except Exception as e:
648
  logger.error(f"Source language decryption failed: {str(e)}")
649
+ raise HTTPException(status_code=400, detail=f"Invalid encrypted source language: {str(e)}")
650
+
651
  # Decrypt target language
652
  try:
653
  encrypted_tgt_lang = base64.b64decode(request.tgt_lang)
654
  decrypted_tgt_lang = decrypt_data(encrypted_tgt_lang, session_key).decode("utf-8")
655
+ if not decrypted_tgt_lang.strip():
656
+ raise ValueError("Decrypted target language is empty")
657
  except Exception as e:
658
  logger.error(f"Target language decryption failed: {str(e)}")
659
+ raise HTTPException(status_code=400, detail=f"Invalid encrypted target language: {str(e)}")
660
+
661
+ # Validate language codes
662
+ supported_languages = [
663
+ "eng_Latn", "hin_Deva", "kan_Knda", "tam_Taml", "mal_Mlym", "tel_Telu",
664
+ "deu_Latn", "fra_Latn", "nld_Latn", "spa_Latn", "ita_Latn", "por_Latn",
665
+ "rus_Cyrl", "pol_Latn"
666
+ ]
667
+ if decrypted_src_lang not in supported_languages or decrypted_tgt_lang not in supported_languages:
668
+ logger.error(f"Unsupported language codes: src={decrypted_src_lang}, tgt={decrypted_tgt_lang}")
669
+ raise HTTPException(status_code=400, detail=f"Unsupported language codes: src={decrypted_src_lang}, tgt={decrypted_tgt_lang}")
670
+
671
+ logger.info(f"Received translation request: {len(decrypted_sentences)} sentences, src_lang: {decrypted_src_lang}, tgt_lang: {decrypted_tgt_lang}, user_id: {user_id}")
672
+
673
+ external_url = "https://slabstech-dhwani-internal-api-server.hf.space/translate"
674
+
675
  payload = {
676
  "sentences": decrypted_sentences,
677
  "src_lang": decrypted_src_lang,
678
  "tgt_lang": decrypted_tgt_lang
679
  }
680
+
681
  try:
682
  response = requests.post(
683
  external_url,
684
  json=payload,
685
  headers={
686
  "accept": "application/json",
687
+ "Content-Type": "application/json",
688
+ "Authorization": f"Bearer {settings.external_api_token}" # Add external API token if required
689
  },
690
  timeout=60
691
  )
692
  response.raise_for_status()
693
+
694
  response_data = response.json()
695
  translations = response_data.get("translations", [])
696
+
697
  if not translations or len(translations) != len(decrypted_sentences):
698
  logger.warning(f"Unexpected response format: {response_data}")
699
  raise HTTPException(status_code=500, detail="Invalid response from translation service")
700
+
701
  logger.info(f"Translation successful: {translations}")
702
  return TranslationResponse(translations=translations)
703
+
704
  except requests.Timeout:
705
  logger.error("Translation request timed out")
706
  raise HTTPException(status_code=504, detail="Translation service timeout")