Turing311 commited on
Commit
7e0621e
1 Parent(s): ffeee86

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +70 -46
app.py CHANGED
@@ -9,20 +9,26 @@ app = Flask(__name__, static_folder='static')
9
  app.secret_key = b'_5#y2L"F4Q8z\n\xec]/' # Change this key for secure deployment
10
 
11
  csrf = CSRFProtect(app)
12
- app.config['WTF_CSRF_CHECK_DEFAULT'] = False
 
13
  app.config['SESSION_COOKIE_SECURE'] = True
14
  app.config['SESSION_COOKIE_SAMESITE'] = "None"
15
 
16
  SESSION_DICT = {}
17
 
 
 
 
 
 
 
18
  def add_to_session(key, value):
 
19
  uid = uuid.uuid4()
20
  SESSION_DICT[uid] = value
21
  session[key] = uid
22
- print('ADD SESSION', key, uid)
23
 
24
  def get_session_data(key):
25
- print('GET FROM SESSION', session, SESSION_DICT)
26
  if key not in session or session[key] not in SESSION_DICT:
27
  return None
28
  return SESSION_DICT[session[key]]
@@ -32,6 +38,7 @@ def send_rapidapi(url, payload):
32
  "content-type": "application/json",
33
  "X-RapidAPI-Key": os.environ.get("API_KEY")
34
  }
 
35
  response = requests.post(url, json=payload, headers=headers)
36
  return response.json()
37
 
@@ -49,20 +56,23 @@ def face_recognition(face_payload):
49
  url = 'https://face-recognition26.p.rapidapi.com/api/face_compare_base64'
50
  resp = send_rapidapi(url, face_payload)
51
  return resp
52
-
53
  @app.route("/")
54
  def index():
55
  return redirect(url_for('id_type'))
56
 
57
  @app.route("/id_type/", methods=['GET'])
58
  def id_type():
 
 
 
 
 
59
  return render_template('id_type.html')
60
 
61
  @app.route("/id_type/", methods=['POST'])
62
  def id_type_done():
63
- print("Request Come here", request.values['ocr_type'])
64
  add_to_session('id_type', request.values['ocr_type'])
65
- print("All OK")
66
  return redirect(url_for('id_file'))
67
 
68
  @app.route("/id_file/", methods=['GET'])
@@ -71,14 +81,18 @@ def id_file():
71
  if id_type is None:
72
  return redirect(url_for('id_type'))
73
 
74
- id_file = get_session_data('id_file')
 
 
 
 
75
  if id_type == 'ic':
76
  if id_file is not None and id_file['image2'] == "":
77
- return render_template('id_file.html', id_type = 'ic_back')
78
  else:
79
- return render_template('id_file.html', id_type = 'ic_front')
80
  else:
81
- return render_template('id_file.html', id_type = 'passport')
82
 
83
  @app.route("/id_file/", methods=['POST'])
84
  def id_file_done():
@@ -90,38 +104,35 @@ def id_file_done():
90
  if id_file is not None and id_file['image2'] == "":
91
  id_file['image2'] = id_base64
92
  add_to_session('id_file', id_file)
93
- return redirect(url_for('id_detail'))
94
  else:
95
  add_to_session('id_file', {
96
  "image": id_base64,
97
  "image2": ""
98
  })
99
- return redirect(url_for('id_file'))
100
  else:
101
- add_to_session('id_file', {
102
  "image": id_base64,
103
  "image2": ""
104
- })
105
- return redirect(url_for('id_detail'))
 
 
 
 
 
 
 
 
 
 
 
106
 
107
  @app.route("/id_detail/", methods=['GET'])
108
  def id_detail():
109
- sess_id_file = get_session_data('id_file')
110
- if sess_id_file is not None:
111
- res = id_recognition(sess_id_file)
112
- if 'data' in res and 'ocr' in res['data'] and 'name' in res['data']['ocr']:
113
- add_to_session('id_name', res['data']['ocr']['name'])
114
-
115
- if 'data' in res and 'image' in res['data']:
116
- if 'portrait' in res['data']['image']:
117
- add_to_session('id_face', res['data']['image']['portrait'])
118
- if 'documentFrontSide' in res['data']['image']:
119
- add_to_session('id_front', res['data']['image']['documentFrontSide'])
120
-
121
- add_to_session('id_liveness', res['authenticity_liveness'])
122
- add_to_session('id_forge', res['authenticity_meta'])
123
-
124
- return render_template('id_detail.html', ocr_result = json.dumps(res))
125
  else:
126
  return redirect(url_for('id_type'))
127
 
@@ -131,31 +142,44 @@ def id_detail_done():
131
 
132
  @app.route("/fr_file/", methods=['GET'])
133
  def fr_file():
134
- return render_template('fr_file.html')
 
 
135
 
136
  @app.route("/fr_file/", methods=['POST'])
137
  def fr_file_done():
138
  fr_base64 = request.values['fr_file']
139
  add_to_session('fr_selfie', fr_base64)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
140
  return redirect(url_for('fr_detail'))
141
 
142
  @app.route("/fr_detail/", methods=['GET'])
143
  def fr_detail():
144
- sess_id_front = get_session_data('id_front')
145
- if sess_id_front is None:
146
  return redirect(url_for('id_type'))
147
 
148
  sess_fr_selfie = get_session_data('fr_selfie')
149
  if sess_fr_selfie is not None:
150
- liveness_api_resp = face_liveness({
151
- "image": sess_fr_selfie
152
- })
153
-
154
- if 'data' in liveness_api_resp and 'result' in liveness_api_resp['data']:
155
- liveness_res = liveness_api_resp['data']['result']
156
 
157
- print("Liveness Result:", liveness_api_resp)
158
- sess_id_face = get_session_data('id_face')
 
159
  if sess_id_face is not None:
160
  payload = {
161
  "image1": sess_id_face,
@@ -169,10 +193,10 @@ def fr_detail():
169
 
170
  print("Matching Result", recog_api_resp)
171
  return render_template('fr_detail.html',
172
- id_name = get_session_data('id_name'),
173
- id_liveness = get_session_data('id_liveness').upper(),
174
- id_forge = get_session_data('id_forge').upper(),
175
- id_front = 'data:image/png;base64,' + sess_id_front,
176
  id_face = 'data:image/png;base64,' + sess_id_face,
177
  selfie = 'data:image/png;base64,' + sess_fr_selfie,
178
  liveness_res = liveness_res.upper(),
 
9
  app.secret_key = b'_5#y2L"F4Q8z\n\xec]/' # Change this key for secure deployment
10
 
11
  csrf = CSRFProtect(app)
12
+
13
+ # Following config necessary for iFrame (For ex, HuggingFace App)
14
  app.config['SESSION_COOKIE_SECURE'] = True
15
  app.config['SESSION_COOKIE_SAMESITE'] = "None"
16
 
17
  SESSION_DICT = {}
18
 
19
+ def delete_session(key):
20
+ if key in session:
21
+ if session[key] in SESSION_DICT:
22
+ del SESSION_DICT[session[key]]
23
+ session.pop(key, None)
24
+
25
  def add_to_session(key, value):
26
+ delete_session(key)
27
  uid = uuid.uuid4()
28
  SESSION_DICT[uid] = value
29
  session[key] = uid
 
30
 
31
  def get_session_data(key):
 
32
  if key not in session or session[key] not in SESSION_DICT:
33
  return None
34
  return SESSION_DICT[session[key]]
 
38
  "content-type": "application/json",
39
  "X-RapidAPI-Key": os.environ.get("API_KEY")
40
  }
41
+
42
  response = requests.post(url, json=payload, headers=headers)
43
  return response.json()
44
 
 
56
  url = 'https://face-recognition26.p.rapidapi.com/api/face_compare_base64'
57
  resp = send_rapidapi(url, face_payload)
58
  return resp
59
+
60
  @app.route("/")
61
  def index():
62
  return redirect(url_for('id_type'))
63
 
64
  @app.route("/id_type/", methods=['GET'])
65
  def id_type():
66
+ delete_session('id_type')
67
+ delete_session('id_file')
68
+ delete_session('id_res')
69
+ delete_session('fr_selfie')
70
+ delete_session('liveness_res')
71
  return render_template('id_type.html')
72
 
73
  @app.route("/id_type/", methods=['POST'])
74
  def id_type_done():
 
75
  add_to_session('id_type', request.values['ocr_type'])
 
76
  return redirect(url_for('id_file'))
77
 
78
  @app.route("/id_file/", methods=['GET'])
 
81
  if id_type is None:
82
  return redirect(url_for('id_type'))
83
 
84
+ if request.headers.get("Referer").endswith("/id_detail"):
85
+ delete_session('id_file')
86
+
87
+ id_file = get_session_data('id_file')
88
+
89
  if id_type == 'ic':
90
  if id_file is not None and id_file['image2'] == "":
91
+ return render_template('id_file.html', id_type = 'ic_back', error_model = False)
92
  else:
93
+ return render_template('id_file.html', id_type = 'ic_front', error_model = False)
94
  else:
95
+ return render_template('id_file.html', id_type = 'passport', error_model = False)
96
 
97
  @app.route("/id_file/", methods=['POST'])
98
  def id_file_done():
 
104
  if id_file is not None and id_file['image2'] == "":
105
  id_file['image2'] = id_base64
106
  add_to_session('id_file', id_file)
 
107
  else:
108
  add_to_session('id_file', {
109
  "image": id_base64,
110
  "image2": ""
111
  })
112
+ return render_template('id_file.html', id_type = 'ic_back', error_model = False)
113
  else:
114
+ id_file = {
115
  "image": id_base64,
116
  "image2": ""
117
+ }
118
+ add_to_session('id_file', id_file)
119
+
120
+ res = id_recognition(id_file)
121
+ if not ('data' in res and 'ocr' in res['data'] and 'name' in res['data']['ocr'] and 'data' in res and 'image' in res['data'] and 'portrait' in res['data']['image'] and 'documentFrontSide' in res['data']['image']):
122
+ delete_session('id_file')
123
+ if id_type == 'ic':
124
+ return render_template('id_file.html', id_type = 'ic_front', error_model = True)
125
+ else:
126
+ return render_template('id_file.html', id_type = 'passport', error_model = True)
127
+
128
+ add_to_session('id_res', res)
129
+ return redirect(url_for('id_detail'))
130
 
131
  @app.route("/id_detail/", methods=['GET'])
132
  def id_detail():
133
+ sess_id_res = get_session_data('id_res')
134
+ if sess_id_res is not None:
135
+ return render_template('id_detail.html', ocr_result = json.dumps(sess_id_res))
 
 
 
 
 
 
 
 
 
 
 
 
 
136
  else:
137
  return redirect(url_for('id_type'))
138
 
 
142
 
143
  @app.route("/fr_file/", methods=['GET'])
144
  def fr_file():
145
+ delete_session('fr_selfie')
146
+ delete_session('liveness_res')
147
+ return render_template('fr_file.html', error_model = False)
148
 
149
  @app.route("/fr_file/", methods=['POST'])
150
  def fr_file_done():
151
  fr_base64 = request.values['fr_file']
152
  add_to_session('fr_selfie', fr_base64)
153
+
154
+ liveness_api_resp = face_liveness({
155
+ "image": fr_base64
156
+ })
157
+
158
+ print("Liveness Result:", liveness_api_resp)
159
+
160
+ if 'data' in liveness_api_resp and 'result' in liveness_api_resp['data']:
161
+ liveness_res = liveness_api_resp['data']['result']
162
+ if liveness_res not in ["genuine", "spoof"]:
163
+ return render_template('fr_file.html', error_model = True)
164
+
165
+ add_to_session('liveness_res', liveness_res)
166
+ else:
167
+ return render_template('fr_file.html', error_model = True)
168
+
169
  return redirect(url_for('fr_detail'))
170
 
171
  @app.route("/fr_detail/", methods=['GET'])
172
  def fr_detail():
173
+ sess_id_res = get_session_data('id_res')
174
+ if sess_id_res is None:
175
  return redirect(url_for('id_type'))
176
 
177
  sess_fr_selfie = get_session_data('fr_selfie')
178
  if sess_fr_selfie is not None:
 
 
 
 
 
 
179
 
180
+ liveness_res = get_session_data('liveness_res')
181
+
182
+ sess_id_face = sess_id_res['data']['image']['portrait']
183
  if sess_id_face is not None:
184
  payload = {
185
  "image1": sess_id_face,
 
193
 
194
  print("Matching Result", recog_api_resp)
195
  return render_template('fr_detail.html',
196
+ id_name = sess_id_res['data']['ocr']['name'],
197
+ id_liveness = sess_id_res['authenticity_liveness'].upper(),
198
+ id_forge = sess_id_res['authenticity_meta'].upper(),
199
+ id_front = 'data:image/png;base64,' + sess_id_res['data']['image']['documentFrontSide'],
200
  id_face = 'data:image/png;base64,' + sess_id_face,
201
  selfie = 'data:image/png;base64,' + sess_fr_selfie,
202
  liveness_res = liveness_res.upper(),