Files
nysoure/server/service/utils.go
2025-05-15 15:01:39 +08:00

58 lines
1.2 KiB
Go

package service
import (
"bytes"
"encoding/json"
"net/http"
"nysoure/server/config"
"nysoure/server/dao"
)
func checkUserCanUpload(uid uint) (bool, error) {
user, err := dao.GetUserByID(uid)
if err != nil {
return false, err
}
return user.IsAdmin || user.CanUpload, nil
}
func CheckUserIsAdmin(uid uint) (bool, error) {
user, err := dao.GetUserByID(uid)
if err != nil {
return false, err
}
return user.IsAdmin, nil
}
func verifyCfToken(cfToken string) (bool, error) {
if config.CloudflareTurnstileSecretKey() == "" {
return true, nil
}
client := &http.Client{}
data, _ := json.Marshal(map[string]string{
"secret": config.CloudflareTurnstileSecretKey(),
"response": cfToken,
})
reader := bytes.NewReader(data)
resp, err := client.Post("https://challenges.cloudflare.com/turnstile/v0/siteverify", "application/json", reader)
if err != nil {
return false, err
}
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK {
return false, nil
}
var result map[string]interface{}
if err := json.NewDecoder(resp.Body).Decode(&result); err != nil {
return false, err
}
if result["success"] == nil {
return false, nil
}
if result["success"].(bool) {
return true, nil
} else {
return false, nil
}
}