From f2f2fe26947ae6260233836ab5beef0f289e32c6 Mon Sep 17 00:00:00 2001
From: Recolic Keghart <root@recolic.net>
Date: Tue, 23 Apr 2019 05:09:59 -0700
Subject: [PATCH] IMPORTANT BUG FIX: TEACHERMATE API UPDATE

---
 README.md               |  4 ++++
 impl/daemon-signin.fish | 15 +++++++++++----
 2 files changed, 15 insertions(+), 4 deletions(-)

diff --git a/README.md b/README.md
index 08eeeba..4c24eca 100644
--- a/README.md
+++ b/README.md
@@ -10,6 +10,10 @@
 
 https://tm.recolic.net/
 
+## WARNING
+
+**Update At 2019-04-23: 自动签到API发生了修改,请务必更新你的脚本,否则你可能失去生命。**
+
 ## Hard PreRequirements
 
 Non-Windows OS. curl. bash. fish. awk. grep. One mp3 player available on command line.
diff --git a/impl/daemon-signin.fish b/impl/daemon-signin.fish
index ce1b7ef..2c00780 100755
--- a/impl/daemon-signin.fish
+++ b/impl/daemon-signin.fish
@@ -41,11 +41,18 @@ function do_signin
     end
     echo "sleep for $_autosign_delay seconds..."
     sleep $_autosign_delay
-    set _courseid (curl "$_url" -v 2>&1 | grep '^< Location: ' | sed 's/^.*course_id=//')
-    set _wx_csrf (grep 'Set-Cookie' $cookiefl | sed 's/^.*wx_csrf_cookie=//' | sed 's/;.*$//')
-    curl "https://www.teachermate.com.cn/wechat-api/v1/class-attendance/student-sign-in" --data "openid=$_openid&course_id=$_courseid&lon=$_EastLongitude&lat=$_NorthLatitude&wx_csrf_name=$_wx_csrf" > $cookiefl
+    # set _courseid (curl "$_url" -v 2>&1 | grep '^< Location: ' | sed 's/^.*course_id=//')
+    set _courseid (cat "$tmpfl" | grep 'id="course-id' | sed 's/^.*value="//g' | sed 's/" .*$//g')
+    set _signid (cat "$tmpfl" | grep 'id="sign-id' | sed 's/^.*value="//g' | sed 's/" .*$//g')
+    # set _wx_csrf (grep 'Set-Cookie' $cookiefl | sed 's/^.*wx_csrf_cookie=//' | sed 's/;.*$//')
+    set _wx_csrf (cat "$tmpfl" | grep 'id="token-hash' | sed 's/^.*value="//g' | sed 's/" .*$//g')
+    # recolic: they changed `www.teachermate.com.cn` to `v18.teachermate.com.cn` but doesn't provide new certificate... I added -k here. (which indicates that their client (wechat and dingtalk) doesn't check certificate at all)
+    curl -k "https://v18.teachermate.com.cn/wechat-api/v1/class-attendance/student-sign-in" --data "openid=$_openid&courseId=$_courseid&lon=$_EastLongitude&lat=$_NorthLatitude&signId=$_signid&wx_csrf_name=$_wx_csrf" > $cookiefl
     grep -F 'repeat sign in' $cookiefl; and set signed_in true; and return
-    grep -F '":["OK",' $cookiefl; and set signed_in true; and on_signin_success; or on_signin_fail
+    grep -F 'signRank' $cookiefl; and set signed_in true; and on_signin_success; and return
+    # Fail
+    cat $cookiefl
+    on_signin_fail
 end
 
 while true
-- 
GitLab