公开完整前后端的代码

This commit is contained in:
Linus Torvalds
2026-02-26 19:22:38 +08:00
commit 193de8a34f
161 changed files with 17373 additions and 0 deletions

View File

@@ -0,0 +1,82 @@
package main
import (
"fmt"
"os"
"strconv"
"strings"
"zsxyww.com/wts/config"
hutil "zsxyww.com/wts/handler/handlerUtilities"
"zsxyww.com/wts/model/sqlc"
)
var usage string = `
Usage: wtstool -a [action] -c [configure file path] \
`
func main() {
cfg := config.Load()
action := strings.Split(cfg.Actions, " ")
var err error
switch action[0] {
case "set_wx_menu":
// wtstool -a "set_wx_menu default menu.json" -c config.yaml
err = setWXMenu(cfg, action[1], action[2])
case "set_wx_tags":
// wtstool -a "set_wx_tags [tagname]" -c config.yaml
err = setWXTags(cfg, action[1])
case "get_wx_tags":
// wtstool -a "get_wx_tags" -c config.yaml
err = getWXTags(cfg)
case "get_wx_menu":
case "gen_jwt_key":
// wtstool -a "gen_jwt_key [OpenID] [sid] [access] [username] [avatar] [name] [expire]" -c config.yaml
err = genJWTKey(cfg, action[1], action[2], action[3], action[4], action[5], action[6], action[7])
case "change_wx_tag":
// wtstool -a "change_wx_tag [OpenID] [tag]" -c config.yaml
err = changeWXTag(cfg, action[1], action[2])
default:
fmt.Println("未知的指令,本程序用法见下:")
fmt.Println(usage)
os.Exit(1)
}
if err != nil {
fmt.Println("执行", action[0], "时出现错误:", err)
os.Exit(1)
}
fmt.Println("ok")
}
func genJWTKey(cfg *config.Config, openID, sid string, accessString string, username string, avatar string, name string, expireString string) error {
expire, err := strconv.Atoi(expireString)
if err != nil {
return err
}
if !isValidAccess(accessString) {
return fmt.Errorf("无效的访问权限: %s", accessString)
}
access := sqlc.WtsAccess(accessString)
hutil.InitJWTKey(cfg.JWTKey)
token, err := hutil.NewWtsJWT(openID, sid, access, username, avatar, name, expire)
if err != nil {
return err
}
fmt.Printf("生成的JWT令牌为\n%s\n", token)
return nil
}
func isValidAccess(access string) bool {
return access == "dev" ||
access == "chief" ||
access == "api" ||
access == "user" ||
access == "unregistered" ||
access == "formal-member" ||
access == "informal-member" ||
access == "pre-member" ||
access == "group-leader"
}

107
back/src/cmd/wtstool/wx.go Normal file
View File

@@ -0,0 +1,107 @@
package main
import (
"errors"
"os"
"zsxyww.com/wts/config"
"zsxyww.com/wts/handler/logic"
"zsxyww.com/wts/wechat"
)
func setDefaultWXMenu(cfg *config.Config, file string) error {
wx := wechat.Setup(cfg)
menu := wx.GetMenu()
if file == "" {
err := errors.New("no menu file selected")
return err
}
content, err := os.ReadFile(file)
if err != nil {
return err
}
err = menu.SetMenuByJSON(string(content))
if err != nil {
return err
}
return nil
}
func setWXTags(cfg *config.Config, newTag string) error {
wx := wechat.Setup(cfg)
u := wx.GetUser()
if newTag == "" {
err := errors.New("no tag selected")
return err
}
tag, err := u.CreateTag(newTag)
if err != nil {
return err
}
println(tag, " Created tag with ID:", tag.ID)
return nil
}
func getWXTags(cfg *config.Config) error {
wx := wechat.Setup(cfg)
u := wx.GetUser()
tags, err := u.GetTag()
if err != nil {
return err
}
for _, tag := range tags {
println("Tag ID:", tag.ID, "Name:", tag.Name, "Count:", tag.Count)
}
return nil
}
func setConditionalMenu(cfg *config.Config, file string) error {
wx := wechat.Setup(cfg)
menu := wx.GetMenu()
if file == "" {
err := errors.New("no menu file selected")
return err
}
content, err := os.ReadFile(file)
if err != nil {
return err
}
err = menu.AddConditionalByJSON(string(content))
if err != nil {
return err
}
return nil
}
func setWXMenu(cfg *config.Config, group string, file string) error {
switch group {
case "default":
return setDefaultWXMenu(cfg, file)
case "operator":
return setConditionalMenu(cfg, file)
case "admin":
return setConditionalMenu(cfg, file)
default:
return errors.New("unknown menu group: " + group)
}
}
func changeWXTag(cfg *config.Config, openID string, tag string) error {
if tag != "default" && tag != "operator" && tag != "admin" {
return errors.New("unknown tag: " + tag)
}
ctx := logic.Ctx{
WX: wechat.Setup(cfg),
}
return ctx.ChangeUserTag(openID, tag)
}