This repository has been archived by the owner on Apr 28, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsrc.v
147 lines (134 loc) · 3.52 KB
/
src.v
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
//V 0.3.2 26d643f
import net.http
import os
import time
struct Info {
mut:
acc string
pwd string
ip string
isp struct {
mut:
name string
no string
}
}
fn main() {
println('本项目地址: https://github.com/carolyn-sun/i-nuist-keeper')
if scan()! != true {
mut info := Info {
acc: os.input('请键入用户名: ')
pwd: os.input('请键入密码: ')
isp: struct {
no: os.input('请键入运营商序号(移动/电信/联通对应2/3/4): ')
}
}
info.isp.name = no2name(info.isp.no)
if login(info)! {
println('登录成功, 用户信息已经保存')
}
}
println('连接成功, 程序将在此每6秒检测一次网络连接性, 你可以将其最小化但请勿关闭')
println('前往本项目地址了解设置为开机自启的办法')
for {
if check()! != true {
println('网络连接丢失, 正在尝试重新登录使你在线')
start_check()!
if check()! {
println('重连成功')
}
}
time.sleep(6000 * time.millisecond)
}
}
fn get_ip() !string {
res := http.get('http://10.255.255.46/api/v1/ip') or {
println('Error1: 无法连接到i-NUIST: 检查你的无线网络设置')
}.body
if res.all_after('\"code\":').all_before(',\"data\"').contains_any('200') {
return res.all_after('\"data\":\"').all_before('\"}')
}
return 'NULL'
}
fn login(info Info) !bool {
ip := get_ip()!
if ip != 'NULL' {
payload := '{\"username\":\"$info.acc\",\"password\":\"$info.pwd\",\"channel\":\"$info.isp.no\",'
+ '\"ifautologin\":\"1\",\"pagesign\":\"secondauth\",\"usripadd\":\"$ip\"}'
res := http.post('http://10.255.255.46/api/v1/login/', payload) or {
return false
}.body
if res.all_after('\"message\": ').all_before_last(',').contains_any('ok') && check()! {
raw := '{\"username\":\"$info.acc\",\"password\":\"$info.pwd\",\"channel\":\"$info.isp.no\",'
+ '\"ifautologin\":\"1\",\"pagesign\":\"secondauth\",\"usripadd\":\"'
write(raw) or {
println('Error3: 文件写入错误: 检查AppData目录的权限')
return false
}
return true
} else {
println('Error2: 暂时无法认证, 可能是因为故障, 或欠费/帐号信息有误')
}
}
return false
}
fn check() !bool {
resp := http.get('http://dns.alidns.com/resolve?name=taobao.com.&type=1')!
res := resp.body
if res.contains_any('\"Status\":0') && res.contains_any('TTL') {
return true
}
return false
}
fn write(raw string) !bool {
url := os.config_dir()! + '\\i-nuist-keeper-cache.dat'
os.write_file(url, raw) or {
println('Error3: 文件写入错误: 检查AppData目录的权限')
return false
}
println("帐号信息已经保存在本地, 位置为$url")
return true
}
fn read() !string {
url := os.config_dir()! + '\\i-nuist-keeper-cache.dat'
if os.exists(url) {
return os.read_file(url) or {
'NULL'
}
}
return 'NULL'
}
fn start_check() !bool {
raw := read()!
if raw != 'NULL' {
ip := get_ip()!
payload := raw + '\"$ip\"}'
for (check()! == false) {
simple_post(payload)
}
return true
}
return false
}
fn no2name(no string) string {
return match no {
'2' {'中国移动'}
'3' {'中国电信'}
'4' {'中国联通'}
else {'未定义'}
}
}
fn scan() !bool {
url := os.config_dir()! + '\\i-nuist-keeper-cache.dat'
if start_check()! {
println('检测到保存在本地的帐号, 正在尝试使你登录')
println('如果要使用别的帐号登录, 请在关闭程序后删除$url')
return true
}
return false
}
fn simple_post(payload string) http.Response {
return http.post('http://10.255.255.46/api/v1/login/', payload) or {
simple_post(payload)
}
}