Files
honoka-chan/internal/handler/ghome/basic/handshake.go
T
YumeMichi 150ce674ad Implement more endpoints & overhaul [2/n]
Drop LevelDB and move all the things to SQLite.

Implemented endpoints:
/api <unit, accessoryMaterialAll>
/api <unit, accessoryTab>
/live/continue
/live/partyList
/unit/favoriteAccessory (WIP)
/unit/sale

Signed-off-by: Sean Du <do4suki@gmail.com>
2026-04-28 11:44:56 +08:00

55 lines
1.1 KiB
Go

package basic
import (
"encoding/base64"
"fmt"
"honoka-chan/internal/router"
ghomeschema "honoka-chan/internal/schema/ghome"
"honoka-chan/internal/session"
"honoka-chan/pkg/encrypt"
honokautils "honoka-chan/pkg/utils"
"net/url"
"strings"
"github.com/gin-gonic/gin"
"github.com/go-think/openssl"
)
func handshake(ctx *gin.Context) {
ss := session.New(ctx)
defer ss.Finalize()
data, err := ctx.GetRawData()
if ss.CheckErr(err) {
return
}
data, err = base64.StdEncoding.DecodeString(string(data))
if ss.CheckErr(err) {
return
}
decryptedData := encrypt.RSADecrypt(data)
params, _ := url.ParseQuery(string(decryptedData))
randKey := params.Get("randkey")
ss.SetRandKey(randKey)
token := fmt.Sprintf(`{"message":"ok","result":0,"token":"%s"}`, strings.ToUpper(honokautils.RandomStr(33)))
encryptedToken, err := openssl.Des3ECBEncrypt([]byte(token), []byte(randKey)[0:24], openssl.PKCS7_PADDING)
if ss.CheckErr(err) {
return
}
ss.Respond(ghomeschema.HandshakeResp{
Code: 0,
Msg: "ok",
Data: base64.StdEncoding.EncodeToString(encryptedToken),
})
}
func init() {
router.AddHandler("v1", "POST", "/basic/handshake", handshake)
}