Moibe commited on
Commit
11488bb
·
1 Parent(s): 0c671a5

Add security

Browse files
app.py CHANGED
@@ -3,6 +3,22 @@ from io import BytesIO
3
  from fastapi import FastAPI, Form
4
  from fastapi import FastAPI, File, UploadFile
5
  from fastapi.responses import StreamingResponse, JSONResponse
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6
 
7
  app = FastAPI()
8
 
@@ -23,7 +39,10 @@ async def health_check():
23
  description="Test endpoint que recibe y regresa la misma imagen, para probar envío, recepción y problemas con api o red.",
24
  summary="Summary"
25
  )
26
- async def echo_image(image: UploadFile = File(...)):
 
 
 
27
  if not image.content_type.startswith("image/"):
28
  return {"error": "El archivo no es una imagen"}
29
  contents = await image.read()
 
3
  from fastapi import FastAPI, Form
4
  from fastapi import FastAPI, File, UploadFile
5
  from fastapi.responses import StreamingResponse, JSONResponse
6
+ from fastapi import FastAPI, Depends, HTTPException, status
7
+ from fastapi.security.api_key import APIKeyHeader
8
+
9
+ API_KEY = "tu_super_secreta_clave_de_api"
10
+ api_key_header = APIKeyHeader(name="X-API-Key", auto_error=False)
11
+
12
+ async def get_api_key(api_key: str = Depends(api_key_header)):
13
+ if not api_key or api_key != API_KEY:
14
+ raise HTTPException(
15
+ status_code=status.HTTP_401_UNAUTHORIZED,
16
+ detail="Credenciales de autenticación inválidas",
17
+ )
18
+ return api_key
19
+
20
+ #Y manda ésto en los headers:
21
+ #"X-API-Key": apiKey
22
 
23
  app = FastAPI()
24
 
 
39
  description="Test endpoint que recibe y regresa la misma imagen, para probar envío, recepción y problemas con api o red.",
40
  summary="Summary"
41
  )
42
+ async def echo_image(
43
+ image: UploadFile = File(...),
44
+ #api_key: str = Depends(get_api_key)
45
+ ):
46
  if not image.content_type.startswith("image/"):
47
  return {"error": "El archivo no es una imagen"}
48
  contents = await image.read()
campos/ine_actual.py CHANGED
@@ -2,20 +2,23 @@ import herramientas
2
  import tools.ine_actual as ine_actual_tools
3
  import time
4
 
5
- def vigencia(textos_extraidos, textos_extraidos_limpios):
6
 
7
  conceptos_busqueda = [
8
  {'preferida': 'vigencia', 'alternativas': ['igencia']},
9
  ]
10
 
11
  indice, textos_extraidos_corregidos = herramientas.buscaIndexMultiplesPalabras(textos_extraidos_limpios, conceptos_busqueda)
12
-
13
  textos_extraidos_limpios = textos_extraidos_corregidos
14
- print("El índice de vigencia es: ", indice)
 
 
15
 
16
- texto_vigencia = textos_extraidos_limpios[indice]
17
- print("Y su correspondiente texto es: " , texto_vigencia)
18
 
19
  vigencia = ine_actual_tools.obtener_vigencia(indice, textos_extraidos_limpios)
20
-
21
- return vigencia
 
 
 
 
2
  import tools.ine_actual as ine_actual_tools
3
  import time
4
 
5
+ def vigencia(textos_extraidos_limpios):
6
 
7
  conceptos_busqueda = [
8
  {'preferida': 'vigencia', 'alternativas': ['igencia']},
9
  ]
10
 
11
  indice, textos_extraidos_corregidos = herramientas.buscaIndexMultiplesPalabras(textos_extraidos_limpios, conceptos_busqueda)
 
12
  textos_extraidos_limpios = textos_extraidos_corregidos
13
+
14
+ if indice is None:
15
+ return None
16
 
17
+ print("El índice de vigencia es: ", indice)
 
18
 
19
  vigencia = ine_actual_tools.obtener_vigencia(indice, textos_extraidos_limpios)
20
+
21
+ if vigencia is not None:
22
+ return vigencia
23
+ else:
24
+ return None
campos/ine_antes.py CHANGED
@@ -1,20 +1,24 @@
1
  import herramientas
2
  import tools.ine_antes as ine_antes_tools
3
 
4
- def vigencia(textos_extraidos, textos_extraidos_limpios):
5
 
6
  conceptos_busqueda = [
7
- {'preferida': 'vigencia', 'alternativas': ['igencia']},
8
  ]
9
 
10
  indice, textos_extraidos_corregidos = herramientas.buscaIndexMultiplesPalabras(textos_extraidos_limpios, conceptos_busqueda)
11
-
12
  textos_extraidos_limpios = textos_extraidos_corregidos
13
- print("El índice de genero es: ", indice)
14
 
15
- texto_genero = textos_extraidos_limpios[indice]
16
- print("Y su correspondiente texto es: " , texto_genero)
17
 
18
- vigencia = ine_antes_tools.obtener_vigencia(texto_genero)
 
 
 
19
 
20
- return vigencia
 
 
 
 
1
  import herramientas
2
  import tools.ine_antes as ine_antes_tools
3
 
4
+ def vigencia(textos_extraidos_limpios):
5
 
6
  conceptos_busqueda = [
7
+ {'preferida': 'vigencia', 'alternativas': ['igencia', 'vigenca']},
8
  ]
9
 
10
  indice, textos_extraidos_corregidos = herramientas.buscaIndexMultiplesPalabras(textos_extraidos_limpios, conceptos_busqueda)
 
11
  textos_extraidos_limpios = textos_extraidos_corregidos
 
12
 
13
+ if indice is None:
14
+ return None
15
 
16
+ print("El índice de genero es: ", indice)
17
+ texto = textos_extraidos_limpios[indice]
18
+
19
+ vigencia = ine_antes_tools.obtener_vigencia(texto)
20
 
21
+ if vigencia is not None:
22
+ return vigencia
23
+ else:
24
+ return None
conceptos_busqueda.py CHANGED
@@ -8,7 +8,10 @@ pasaporte = [
8
  #{'preferida': 'identidad', 'alternativas': []}
9
  ]
10
 
11
- ine = [
12
- {'preferida': 'Instituto Nacional Electoral', 'alternativas': ['']},
13
- {'preferida': 'MEXICO', 'alternativas': ['']}
14
- ]
 
 
 
 
8
  #{'preferida': 'identidad', 'alternativas': []}
9
  ]
10
 
11
+ ine = [{
12
+ 'preferida': 'Instituto Nacional Electoral',
13
+ #'alternativas': ['']
14
+ },
15
+ {'preferida': 'MEXICO',
16
+ #'alternativas': [''] #Cuando no hay altarnativas, tienen que ser comentadas.
17
+ }]
documentos.py CHANGED
@@ -27,17 +27,20 @@ async def pasaporte(textos_extraidos, textos_extraidos_simplificados):
27
  return nombre, apellido, identificacion
28
 
29
  #Funciones para Zurich México
30
-
31
- async def ine_actual(textos_extraidos, textos_extraidos_simplificados):
32
-
33
  #Campos Buscados
34
- vigencia = doc_ine_actual.vigencia(textos_extraidos, textos_extraidos_simplificados)
35
 
36
- return vigencia
 
 
 
37
 
38
- async def ine_antes(textos_extraidos, textos_extraidos_simplificados):
39
-
40
  #Campos Buscados
41
- vigencia = doc_ine_antes.vigencia(textos_extraidos, textos_extraidos_simplificados)
42
 
43
- return vigencia
 
 
 
 
27
  return nombre, apellido, identificacion
28
 
29
  #Funciones para Zurich México
30
+ async def ine_actual(textos_extraidos_simplificados):
 
 
31
  #Campos Buscados
32
+ vigencia = doc_ine_actual.vigencia(textos_extraidos_simplificados)
33
 
34
+ if vigencia is None:
35
+ return "Vigencia no localizada"
36
+ else:
37
+ return vigencia
38
 
39
+ async def ine_antes(textos_extraidos_simplificados):
 
40
  #Campos Buscados
41
+ vigencia = doc_ine_antes.vigencia(textos_extraidos_simplificados)
42
 
43
+ if vigencia is None:
44
+ return "Vigencia no localizada"
45
+ else:
46
+ return vigencia
funciones.py CHANGED
@@ -72,9 +72,13 @@ async def procesa_ine(image):
72
  tipo_ine = identificador.identifica_ine(textos_extraidos_simplificados)
73
  print("Tipo ine es : ", tipo_ine)
74
  if tipo_ine == 'ine_actual':
75
- vigencia = await documentos.ine_actual(textos_extraidos, textos_extraidos_simplificados)
76
  else:
77
- vigencia = await documentos.ine_antes(textos_extraidos, textos_extraidos_simplificados)
78
  return {
 
 
 
 
79
  "vigencia": vigencia,
80
  }
 
72
  tipo_ine = identificador.identifica_ine(textos_extraidos_simplificados)
73
  print("Tipo ine es : ", tipo_ine)
74
  if tipo_ine == 'ine_actual':
75
+ vigencia = await documentos.ine_actual(textos_extraidos_simplificados)
76
  else:
77
+ vigencia = await documentos.ine_antes(textos_extraidos_simplificados)
78
  return {
79
+ "nombre": "-----",
80
+ "domicilio": "-----",
81
+ "clave_elector": "-----",
82
+ "sexo": "-----",
83
  "vigencia": vigencia,
84
  }
herramientas.py CHANGED
@@ -118,7 +118,6 @@ def buscaIndexMultiplesPalabras(arreglo_textos, conceptos_requeridos):
118
  if forma in texto_linea_lower:
119
  print("Encontrado línea es True!")
120
  encontrado_en_esta_linea = True
121
- time.sleep(7)
122
 
123
  # Guardamos qué forma se encontró y cuál es la preferida
124
  palabras_encontradas_en_linea[forma] = concepto['preferida']
@@ -127,11 +126,9 @@ def buscaIndexMultiplesPalabras(arreglo_textos, conceptos_requeridos):
127
  # Hemos encontrado una forma para este concepto, pasamos al siguiente concepto
128
  break #Éste break entonces si se sale del for. De no hacerlo, volvería arriba.
129
 
130
- print("Paso if encontrado_en_esta_linea es True...")
131
  if encontrado_en_esta_linea:
132
  es_coincidencia_completa = True
133
  print(f"Línea {i}: Concepto '{concepto['preferida']}' : Encontrado.")
134
- print("Estoy por hacer break por que es_coincidencia_completa es True...")
135
  break # Se sale del for grande.
136
 
137
 
 
118
  if forma in texto_linea_lower:
119
  print("Encontrado línea es True!")
120
  encontrado_en_esta_linea = True
 
121
 
122
  # Guardamos qué forma se encontró y cuál es la preferida
123
  palabras_encontradas_en_linea[forma] = concepto['preferida']
 
126
  # Hemos encontrado una forma para este concepto, pasamos al siguiente concepto
127
  break #Éste break entonces si se sale del for. De no hacerlo, volvería arriba.
128
 
 
129
  if encontrado_en_esta_linea:
130
  es_coincidencia_completa = True
131
  print(f"Línea {i}: Concepto '{concepto['preferida']}' : Encontrado.")
 
132
  break # Se sale del for grande.
133
 
134
 
tools/ine_actual.py CHANGED
@@ -11,4 +11,7 @@ def obtener_vigencia(indice, textos_extraidos_libres):
11
  dato_vigencia = textos_extraidos_libres[indice+3]
12
  print("El dato numérico de la vigencia es: " , dato_vigencia)
13
 
14
- return dato_vigencia
 
 
 
 
11
  dato_vigencia = textos_extraidos_libres[indice+3]
12
  print("El dato numérico de la vigencia es: " , dato_vigencia)
13
 
14
+ if dato_vigencia is not None:
15
+ return dato_vigencia
16
+ else:
17
+ return None