nopoh22 commited on
Commit
0fd0e5c
·
verified ·
1 Parent(s): 5cc76be

Update renewer.py

Browse files
Files changed (1) hide show
  1. renewer.py +46 -19
renewer.py CHANGED
@@ -51,9 +51,10 @@ def extend_webapp(username, password, host="www.pythonanywhere.com"):
51
  results = []
52
 
53
  try:
54
- # الخطوة 1: فتح صفحة تسجيل الدخول وجلب CSRF
55
  login_url = f"https://{host}/login/"
56
  login_page = session.get(login_url, timeout=15)
 
57
 
58
  soup = BeautifulSoup(login_page.text, "html.parser")
59
  csrf_input = soup.find("input", {"name": "csrfmiddlewaretoken"})
@@ -61,42 +62,63 @@ def extend_webapp(username, password, host="www.pythonanywhere.com"):
61
  logger.error(f"[{username}] لم يتم العثور على CSRF في صفحة تسجيل الدخول")
62
  return []
63
  csrf = csrf_input["value"]
 
64
 
65
- # الخطوة 2: تسجيل الدخول
66
  login_data = {
67
  "auth-username": username,
68
  "auth-password": password,
69
  "csrfmiddlewaretoken": csrf,
70
  "next": "/"
71
  }
72
- session.post(
73
  login_url,
74
  data=login_data,
75
- headers={"Referer": login_url},
 
 
 
76
  timeout=15,
77
  allow_redirects=True
78
  )
 
79
 
80
- # التحقق من نجاح تسجيل الدخول
81
- check = session.get(f"https://{host}/dashboard/", timeout=10)
82
- if username.lower() not in check.text.lower():
83
- logger.error(f"[{username}] فشل تسجيل الدخول — تحقق من كلمة المرور")
 
84
  return []
85
 
86
- logger.info(f"[{username}] تم تسجيل الدخول بنجاح على {host}")
 
 
 
 
 
 
 
87
 
88
- # الخطوة 3: فتح صفحة الويب آب وجلب CSRF جديد
89
  webapps_url = f"https://{host}/user/{username}/webapps/"
90
  page = session.get(webapps_url, timeout=15)
91
- soup = BeautifulSoup(page.text, "html.parser")
92
 
 
93
  csrf_input = soup.find("input", {"name": "csrfmiddlewaretoken"})
94
  if not csrf_input:
95
- logger.error(f"[{username}] لم يتم العثور على CSRF في صفحة الويب آب")
96
- return []
97
- csrf = csrf_input["value"]
 
 
 
 
 
 
 
98
 
99
- # الخطوة 4: اكتشاف النطاقات المتاحة
100
  domains = []
101
  for link in soup.find_all("a", href=True):
102
  href = link["href"]
@@ -105,26 +127,31 @@ def extend_webapp(username, password, host="www.pythonanywhere.com"):
105
  if part and "." in part and part not in domains:
106
  domains.append(part)
107
 
108
- # إذا لم يجد نطاقات، يجرب النطاق الافتراضي
109
  if not domains:
110
  domains = [f"{username}.pythonanywhere.com"]
111
  logger.warning(f"[{username}] لم يتم اكتشاف نطاقات، سيجرب: {domains[0]}")
 
 
112
 
113
- # الخطوة 5: إرسال طلب التمديد لكل نطاق
114
  for domain in domains:
115
  extend_url = f"https://{host}/user/{username}/webapps/{domain}/extend"
116
  resp = session.post(
117
  extend_url,
118
  data={"csrfmiddlewaretoken": csrf},
119
- headers={"Referer": webapps_url},
 
 
 
120
  timeout=15
121
  )
 
 
122
  if resp.status_code in (200, 302):
123
  status = "✅ تم التمديد"
124
  else:
125
  status = f"❌ فشل ({resp.status_code})"
126
 
127
- logger.info(f"[{username}] Extend {domain}: {status}")
128
  results.append({"domain": domain, "status": status})
129
 
130
  except Exception as e:
 
51
  results = []
52
 
53
  try:
54
+ # ── الخطوة 1: فتح صفحة تسجيل الدخول وجلب CSRF ──
55
  login_url = f"https://{host}/login/"
56
  login_page = session.get(login_url, timeout=15)
57
+ logger.info(f"[{username}] صفحة الدخول: {login_page.status_code}")
58
 
59
  soup = BeautifulSoup(login_page.text, "html.parser")
60
  csrf_input = soup.find("input", {"name": "csrfmiddlewaretoken"})
 
62
  logger.error(f"[{username}] لم يتم العثور على CSRF في صفحة تسجيل الدخول")
63
  return []
64
  csrf = csrf_input["value"]
65
+ logger.info(f"[{username}] CSRF الأول: {csrf[:10]}...")
66
 
67
+ # ── الخطوة 2: تسجيل الدخول ──
68
  login_data = {
69
  "auth-username": username,
70
  "auth-password": password,
71
  "csrfmiddlewaretoken": csrf,
72
  "next": "/"
73
  }
74
+ login_resp = session.post(
75
  login_url,
76
  data=login_data,
77
+ headers={
78
+ "Referer": login_url,
79
+ "Content-Type": "application/x-www-form-urlencoded"
80
+ },
81
  timeout=15,
82
  allow_redirects=True
83
  )
84
+ logger.info(f"[{username}] نتيجة تسجيل الدخول: {login_resp.status_code} | URL: {login_resp.url}")
85
 
86
+ # ── التحقق من نجاح تسجيل الدخول ──
87
+ # الطريقة الصحيحة: نتحقق أن URL النهائي ليس صفحة login
88
+ final_url = login_resp.url
89
+ if "login" in final_url.lower():
90
+ logger.error(f"[{username}] فشل تسجيل الدخول — ما زال على صفحة login")
91
  return []
92
 
93
+ # تحقق إضافي: هل يوجد sessionid في الـ cookies؟
94
+ cookies = session.cookies.get_dict()
95
+ logger.info(f"[{username}] الكوكيز: {list(cookies.keys())}")
96
+ if "sessionid" not in cookies:
97
+ logger.error(f"[{username}] لم يتم إنشاء session — فشل تسجيل الدخول")
98
+ return []
99
+
100
+ logger.info(f"[{username}] ✅ تم تسجيل الدخول بنجاح على {host}")
101
 
102
+ # ── الخطوة 3: فتح صفحة الويب آب وجلب CSRF جديد ──
103
  webapps_url = f"https://{host}/user/{username}/webapps/"
104
  page = session.get(webapps_url, timeout=15)
105
+ logger.info(f"[{username}] صفحة الويب آب: {page.status_code}")
106
 
107
+ soup = BeautifulSoup(page.text, "html.parser")
108
  csrf_input = soup.find("input", {"name": "csrfmiddlewaretoken"})
109
  if not csrf_input:
110
+ # محاولة بديلة من الـ meta tag
111
+ meta = soup.find("meta", {"name": "csrf-token"})
112
+ if meta:
113
+ csrf = meta.get("content", "")
114
+ else:
115
+ logger.error(f"[{username}] لم يتم العثور على CSRF في صفحة الويب آب")
116
+ return []
117
+ else:
118
+ csrf = csrf_input["value"]
119
+ logger.info(f"[{username}] CSRF الثاني: {csrf[:10]}...")
120
 
121
+ # ── الخطوة 4: اكتشاف النطاقات المتاحة ──
122
  domains = []
123
  for link in soup.find_all("a", href=True):
124
  href = link["href"]
 
127
  if part and "." in part and part not in domains:
128
  domains.append(part)
129
 
 
130
  if not domains:
131
  domains = [f"{username}.pythonanywhere.com"]
132
  logger.warning(f"[{username}] لم يتم اكتشاف نطاقات، سيجرب: {domains[0]}")
133
+ else:
134
+ logger.info(f"[{username}] النطاقات المكتشفة: {domains}")
135
 
136
+ # ── الخطوة 5: إرسال طلب التمديد لكل نطاق ──
137
  for domain in domains:
138
  extend_url = f"https://{host}/user/{username}/webapps/{domain}/extend"
139
  resp = session.post(
140
  extend_url,
141
  data={"csrfmiddlewaretoken": csrf},
142
+ headers={
143
+ "Referer": webapps_url,
144
+ "Content-Type": "application/x-www-form-urlencoded"
145
+ },
146
  timeout=15
147
  )
148
+ logger.info(f"[{username}] Extend {domain}: HTTP {resp.status_code}")
149
+
150
  if resp.status_code in (200, 302):
151
  status = "✅ تم التمديد"
152
  else:
153
  status = f"❌ فشل ({resp.status_code})"
154
 
 
155
  results.append({"domain": domain, "status": status})
156
 
157
  except Exception as e: