feat: 哔哩哔哩cookie过期告警
This commit is contained in:
@@ -36,6 +36,8 @@
|
|||||||
"owner": "",
|
"owner": "",
|
||||||
"repos": [""],
|
"repos": [""],
|
||||||
"token": "ghp_xxxx"
|
"token": "ghp_xxxx"
|
||||||
}
|
},
|
||||||
|
"bili_msg": "xxx", // 哔哩哔哩动态的附加消息
|
||||||
|
"bili_warn_address": "" // 哔哩哔哩cookie过期发送告警的邮件地址
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|||||||
+3
-1
@@ -19,5 +19,7 @@
|
|||||||
"owner": "",
|
"owner": "",
|
||||||
"repos": [""],
|
"repos": [""],
|
||||||
"token": "ghp_xxxx"
|
"token": "ghp_xxxx"
|
||||||
}
|
},
|
||||||
|
"bili_msg": "摇篮系统测试",
|
||||||
|
"bili_warn_address": ""
|
||||||
}
|
}
|
||||||
@@ -19,6 +19,7 @@ type Config struct {
|
|||||||
MailContent string `json:"mail_content"`
|
MailContent string `json:"mail_content"`
|
||||||
GithubConfig GithubConfig `json:"github_config"`
|
GithubConfig GithubConfig `json:"github_config"`
|
||||||
BiliMsg string `json:"bili_msg"`
|
BiliMsg string `json:"bili_msg"`
|
||||||
|
BiliWarnAddress string `json:"bili_warn_address"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type SMTPConfig struct {
|
type SMTPConfig struct {
|
||||||
|
|||||||
@@ -144,3 +144,98 @@ func SendBili(biliClient *bilibili.Client) {
|
|||||||
|
|
||||||
log.Println("动态发送最终失败,已达到最大重试次数")
|
log.Println("动态发送最终失败,已达到最大重试次数")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 检查cookie有效性
|
||||||
|
func CheckCookieValidity(biliClient *bilibili.Client) {
|
||||||
|
// 读取存储的cookie文件
|
||||||
|
if _, err := os.Stat("cookies.txt"); os.IsNotExist(err) {
|
||||||
|
log.Println("cookie文件不存在,需要重新登录")
|
||||||
|
triggerLoginRequest(biliClient)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
cookiesBytes, err := os.ReadFile("cookies.txt")
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("读取cookie文件失败: %v", err)
|
||||||
|
triggerLoginRequest(biliClient)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
cookiesString := string(cookiesBytes)
|
||||||
|
|
||||||
|
// 检查cookie是否即将过期(提前1天提醒)
|
||||||
|
if isCookiesExpiringSoon(cookiesString) {
|
||||||
|
log.Println("cookie即将过期,需要重新登录")
|
||||||
|
triggerLoginRequest(biliClient)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 检查cookie是否即将过期(提前1天)
|
||||||
|
func isCookiesExpiringSoon(cookiesString string) bool {
|
||||||
|
lines := strings.Split(cookiesString, "\n")
|
||||||
|
for _, line := range lines {
|
||||||
|
if strings.Contains(line, "Expires=") {
|
||||||
|
// 提取过期时间字符串
|
||||||
|
expireStr := ""
|
||||||
|
parts := strings.Split(line, ";")
|
||||||
|
for _, part := range parts {
|
||||||
|
part = strings.TrimSpace(part)
|
||||||
|
if strings.HasPrefix(part, "Expires=") {
|
||||||
|
expireStr = strings.TrimPrefix(part, "Expires=")
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if expireStr != "" {
|
||||||
|
// 解析过期时间
|
||||||
|
expireTime, err := http.ParseTime(expireStr)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("解析过期时间失败: %v", err)
|
||||||
|
return true // 如果解析失败,认为需要重新登录
|
||||||
|
}
|
||||||
|
|
||||||
|
// 检查是否即将过期(提前1天)
|
||||||
|
if time.Now().Add(24 * time.Hour).After(expireTime) {
|
||||||
|
return true // 即将过期
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// 触发登录请求
|
||||||
|
func triggerLoginRequest(biliClient *bilibili.Client) {
|
||||||
|
// 获取配置
|
||||||
|
config, err := configs.GetConfig()
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("获取配置文件失败: %v", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 生成新的二维码
|
||||||
|
qrCode, err := biliClient.GetQRCode()
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("获取二维码失败: %v", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 在命令行打印二维码
|
||||||
|
log.Println("需要重新登录哔哩哔哩")
|
||||||
|
qrCode.Print()
|
||||||
|
|
||||||
|
// 通过邮件发送登录请求
|
||||||
|
emailTitle := "B站登录请求 - Cookie即将过期"
|
||||||
|
emailMsg := "您的B站cookie即将过期,请尽快重启摇篮系统进行登陆,请尽快完成登录操作。"
|
||||||
|
|
||||||
|
// 发送邮件通知
|
||||||
|
if config.BiliWarnAddress != "" {
|
||||||
|
err = sendMailMsg(config.BiliWarnAddress, emailMsg, emailTitle)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("发送登录邮件失败: %v", err)
|
||||||
|
} else {
|
||||||
|
log.Println("登录请求邮件已发送")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import (
|
|||||||
var timer *time.Timer
|
var timer *time.Timer
|
||||||
var duration time.Duration
|
var duration time.Duration
|
||||||
var biliClient *bilibili.Client
|
var biliClient *bilibili.Client
|
||||||
|
var cookieCheckTimer *time.Ticker
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
config, err := configs.GetConfig()
|
config, err := configs.GetConfig()
|
||||||
@@ -35,6 +36,7 @@ func init() {
|
|||||||
// 初始化bilibili客户端
|
// 初始化bilibili客户端
|
||||||
biliClient = bilibili.New()
|
biliClient = bilibili.New()
|
||||||
initBilibili()
|
initBilibili()
|
||||||
|
startCookieChecker() // 启动定期检查cookie有效性
|
||||||
}
|
}
|
||||||
|
|
||||||
func trigger() {
|
func trigger() {
|
||||||
@@ -78,4 +80,17 @@ func initBilibili() {
|
|||||||
} else {
|
} else {
|
||||||
log.Println("使用已存储的有效cookie登录")
|
log.Println("使用已存储的有效cookie登录")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// 启动cookie定期检查
|
||||||
|
func startCookieChecker() {
|
||||||
|
// 每小时检查一次cookie有效性
|
||||||
|
cookieCheckTimer = time.NewTicker(1 * time.Hour)
|
||||||
|
go func() {
|
||||||
|
for {
|
||||||
|
<-cookieCheckTimer.C
|
||||||
|
internal.CheckCookieValidity(biliClient)
|
||||||
|
}
|
||||||
|
}()
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user