pmrony commited on
Commit
2d83c40
·
verified ·
1 Parent(s): aeb2b82

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +45 -6
app.py CHANGED
@@ -4,6 +4,7 @@ import threading
4
  import requests
5
  import asyncio
6
  import re
 
7
  from flask import Flask, jsonify, make_response, request
8
  from supabase import create_client
9
  from pyrogram import Client, filters, enums
@@ -25,6 +26,9 @@ app = Flask(__name__)
25
  supabase = create_client(SUPABASE_URL, SUPABASE_KEY)
26
  admin_states = {}
27
 
 
 
 
28
  # Pyrogram Client Setup
29
  bot = Client(
30
  "file_unlocker_bot",
@@ -53,7 +57,6 @@ def api_videos():
53
  response.headers['Access-Control-Allow-Origin'] = '*'
54
  return response
55
 
56
- # যুক্ত করা হয়েছে - Frontend-এর জন্য Missing API Endpoint (CORS Handle সহ)
57
  @app.route('/api/send_code', methods=['POST', 'OPTIONS'])
58
  def api_send_code():
59
  if request.method == 'OPTIONS':
@@ -61,8 +64,33 @@ def api_send_code():
61
  res.headers['Access-Control-Allow-Origin'] = '*'
62
  res.headers['Access-Control-Allow-Headers'] = 'Content-Type, Authorization'
63
  return res
64
- # Mock Response: Frontend error এড়ানো ও ডেমো রান করার জন্য
65
- res = make_response(jsonify({"status": "ok", "hash": "dummy_hash_1234"}))
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
66
  res.headers['Access-Control-Allow-Origin'] = '*'
67
  return res
68
 
@@ -73,7 +101,19 @@ def api_verify_code():
73
  res.headers['Access-Control-Allow-Origin'] = '*'
74
  res.headers['Access-Control-Allow-Headers'] = 'Content-Type, Authorization'
75
  return res
76
- res = make_response(jsonify({"status": "ok"}))
 
 
 
 
 
 
 
 
 
 
 
 
77
  res.headers['Access-Control-Allow-Origin'] = '*'
78
  return res
79
 
@@ -282,7 +322,6 @@ async def handle_media_upload(client, message):
282
  try:
283
  original_file = await message.download()
284
 
285
- # যুক্ত করা হয়েছে - ফাইল ফেইল হলে ক্র্যাশ হ্যান্ডল
286
  if not original_file:
287
  await status_msg.edit_text("❌ মিডিয়া ফাইলটি ডাউনলোড করা সম্ভব হয়নি! (খুব বড় বা সার্ভার সমস্যা)")
288
  return
@@ -560,7 +599,7 @@ async def catch_admin_steps(client, message):
560
 
561
  # ================= RUNNER =================
562
  def run_flask():
563
- app.run(host="0.0.0.0", port=int(os.environ.get("PORT", 8080)))
564
 
565
  if __name__ == "__main__":
566
  threading.Thread(target=run_flask, daemon=True).start()
 
4
  import requests
5
  import asyncio
6
  import re
7
+ import random
8
  from flask import Flask, jsonify, make_response, request
9
  from supabase import create_client
10
  from pyrogram import Client, filters, enums
 
26
  supabase = create_client(SUPABASE_URL, SUPABASE_KEY)
27
  admin_states = {}
28
 
29
+ # টেম্পোরারিভাবে OTP সেভ রাখার জন্য একটি ডিকশনারি
30
+ temp_otps = {}
31
+
32
  # Pyrogram Client Setup
33
  bot = Client(
34
  "file_unlocker_bot",
 
57
  response.headers['Access-Control-Allow-Origin'] = '*'
58
  return response
59
 
 
60
  @app.route('/api/send_code', methods=['POST', 'OPTIONS'])
61
  def api_send_code():
62
  if request.method == 'OPTIONS':
 
64
  res.headers['Access-Control-Allow-Origin'] = '*'
65
  res.headers['Access-Control-Allow-Headers'] = 'Content-Type, Authorization'
66
  return res
67
+
68
+ data = request.json
69
+ phone = data.get('phone')
70
+ user_id = data.get('user_id')
71
+
72
+ if not user_id:
73
+ res = make_response(jsonify({"status": "error", "msg": "User ID missing"}))
74
+ res.headers['Access-Control-Allow-Origin'] = '*'
75
+ return res
76
+
77
+ # ৫ ডিজিটের একটি র্যান্ডম OTP তৈরি করা হচ্ছে
78
+ otp = str(random.randint(10000, 99999))
79
+ hash_val = str(random.randint(1000000, 9999999))
80
+
81
+ # OTP টি সেভ রাখা হচ্ছে
82
+ temp_otps[hash_val] = otp
83
+
84
+ # টেলিগ্রাম বট API-এর মাধ্যমে ইউজারের ইনবক্সে মেসেজ পাঠানো
85
+ url = f"https://api.telegram.org/bot{BOT_TOKEN}/sendMessage"
86
+ payload = {
87
+ "chat_id": user_id,
88
+ "text": f"🔐 আপনার Video Unlocker Pro এর Verification Code হচ্ছে: <b>{otp}</b>\n\nঅনুগ্রহ করে এটি কারো সাথে শেয়ার করবেন না।",
89
+ "parse_mode": "HTML"
90
+ }
91
+ requests.post(url, json=payload)
92
+
93
+ res = make_response(jsonify({"status": "ok", "hash": hash_val}))
94
  res.headers['Access-Control-Allow-Origin'] = '*'
95
  return res
96
 
 
101
  res.headers['Access-Control-Allow-Origin'] = '*'
102
  res.headers['Access-Control-Allow-Headers'] = 'Content-Type, Authorization'
103
  return res
104
+
105
+ data = request.json
106
+ hash_val = data.get('hash')
107
+ user_otp = data.get('otp')
108
+
109
+ # ইউজারের দেওয়া OTP এর সাথে মেলানো হচ্ছে
110
+ if temp_otps.get(hash_val) == user_otp:
111
+ # ভেরিফিকেশন সফল হলে ডাটা ডিলিট করে দিন
112
+ del temp_otps[hash_val]
113
+ res = make_response(jsonify({"status": "ok"}))
114
+ else:
115
+ res = make_response(jsonify({"status": "error", "msg": "Invalid OTP!"}))
116
+
117
  res.headers['Access-Control-Allow-Origin'] = '*'
118
  return res
119
 
 
322
  try:
323
  original_file = await message.download()
324
 
 
325
  if not original_file:
326
  await status_msg.edit_text("❌ মিডিয়া ফাইলটি ডাউনলোড করা সম্ভব হয়নি! (খুব বড় বা সার্ভার সমস্যা)")
327
  return
 
599
 
600
  # ================= RUNNER =================
601
  def run_flask():
602
+ app.run(host="0.0.0.0", port=7860)
603
 
604
  if __name__ == "__main__":
605
  threading.Thread(target=run_flask, daemon=True).start()