From 686bd35257eb3dff1d8c163f88fddc6b968c434e Mon Sep 17 00:00:00 2001 From: Yuan Si Date: Mon, 3 Apr 2023 09:32:57 +0800 Subject: [PATCH] Add notice apis Signed-off-by: Yuan Si --- handler/notice.go | 218 ++++++++++++++++++++++++++++++++++++++++++++++ main.go | 3 + 2 files changed, 221 insertions(+) create mode 100644 handler/notice.go diff --git a/handler/notice.go b/handler/notice.go new file mode 100644 index 0000000..5d1fdc2 --- /dev/null +++ b/handler/notice.go @@ -0,0 +1,218 @@ +package handler + +import ( + "encoding/base64" + "encoding/json" + "fmt" + "honoka-chan/config" + "honoka-chan/database" + "honoka-chan/encrypt" + "honoka-chan/utils" + "net/http" + "time" + + "github.com/gin-gonic/gin" +) + +type NoticeFriendVarietyResp struct { + ResponseData NoticeFriendVarietyData `json:"response_data"` + ReleaseInfo []interface{} `json:"release_info"` + StatusCode int `json:"status_code"` +} + +type NoticeFriendVarietyData struct { + ItemCount int `json:"item_count"` + NoticeList []interface{} `json:"notice_list"` + ServerTimestamp int64 `json:"server_timestamp"` +} + +type NoticeFriendGreetingResp struct { + ResponseData NoticeFriendGreetingData `json:"response_data"` + ReleaseInfo []interface{} `json:"release_info"` + StatusCode int `json:"status_code"` +} + +type NoticeFriendGreetingData struct { + NextId int `json:"next_id"` + NoticeList []interface{} `json:"notice_list"` + ServerTimestamp int64 `json:"server_timestamp"` +} + +type NoticeUserGreetingResp struct { + ResponseData NoticeUserGreetingData `json:"response_data"` + ReleaseInfo []interface{} `json:"release_info"` + StatusCode int `json:"status_code"` +} + +type NoticeUserGreetingData struct { + ItemCount int `json:"item_count"` + HasNext bool `json:"has_next"` + NoticeList []interface{} `json:"notice_list"` + ServerTimestamp int64 `json:"server_timestamp"` +} + +func NoticeFriendVarietyHandler(ctx *gin.Context) { + reqTime := time.Now().Unix() + + authorizeStr := ctx.Request.Header["Authorize"] + authToken, err := utils.GetAuthorizeToken(authorizeStr) + if err != nil { + ctx.String(http.StatusForbidden, "Fuck you!") + return + } + userId := ctx.Request.Header[http.CanonicalHeaderKey("User-ID")] + if len(userId) == 0 { + ctx.String(http.StatusForbidden, "Fuck you!") + return + } + + if !database.MatchTokenUid(authToken, userId[0]) { + ctx.String(http.StatusForbidden, "Fuck you!") + return + } + + nonce, err := utils.GetAuthorizeNonce(authorizeStr) + if err != nil { + fmt.Println(err) + ctx.String(http.StatusForbidden, "Fuck you!") + return + } + nonce++ + + respTime := time.Now().Unix() + newAuthorizeStr := fmt.Sprintf("consumerKey=lovelive_test&timeStamp=%d&version=1.1&token=%s&nonce=%d&user_id=%s&requestTimeStamp=%d", respTime, authToken, nonce, userId[0], reqTime) + // fmt.Println(newAuthorizeStr) + + noticeResp := NoticeFriendVarietyResp{ + ResponseData: NoticeFriendVarietyData{ + ItemCount: 1, + NoticeList: []interface{}{}, + ServerTimestamp: time.Now().Unix(), + }, + ReleaseInfo: []interface{}{}, + StatusCode: 200, + } + resp, err := json.Marshal(noticeResp) + if err != nil { + panic(err) + } + xms := encrypt.RSA_Sign_SHA1(resp, "privatekey.pem") + xms64 := base64.RawStdEncoding.EncodeToString(xms) + + ctx.Header("Server-Version", config.Conf.Server.VersionNumber) + ctx.Header("user_id", userId[0]) + ctx.Header("authorize", newAuthorizeStr) + ctx.Header("X-Message-Sign", xms64) + ctx.String(http.StatusOK, string(resp)) +} + +func NoticeFriendGreetingHandler(ctx *gin.Context) { + reqTime := time.Now().Unix() + + authorizeStr := ctx.Request.Header["Authorize"] + authToken, err := utils.GetAuthorizeToken(authorizeStr) + if err != nil { + ctx.String(http.StatusForbidden, "Fuck you!") + return + } + userId := ctx.Request.Header[http.CanonicalHeaderKey("User-ID")] + if len(userId) == 0 { + ctx.String(http.StatusForbidden, "Fuck you!") + return + } + + if !database.MatchTokenUid(authToken, userId[0]) { + ctx.String(http.StatusForbidden, "Fuck you!") + return + } + + nonce, err := utils.GetAuthorizeNonce(authorizeStr) + if err != nil { + fmt.Println(err) + ctx.String(http.StatusForbidden, "Fuck you!") + return + } + nonce++ + + respTime := time.Now().Unix() + newAuthorizeStr := fmt.Sprintf("consumerKey=lovelive_test&timeStamp=%d&version=1.1&token=%s&nonce=%d&user_id=%s&requestTimeStamp=%d", respTime, authToken, nonce, userId[0], reqTime) + // fmt.Println(newAuthorizeStr) + + noticeResp := NoticeFriendGreetingResp{ + ResponseData: NoticeFriendGreetingData{ + NextId: 0, + NoticeList: []interface{}{}, + ServerTimestamp: time.Now().Unix(), + }, + ReleaseInfo: []interface{}{}, + StatusCode: 200, + } + resp, err := json.Marshal(noticeResp) + if err != nil { + panic(err) + } + xms := encrypt.RSA_Sign_SHA1(resp, "privatekey.pem") + xms64 := base64.RawStdEncoding.EncodeToString(xms) + + ctx.Header("Server-Version", config.Conf.Server.VersionNumber) + ctx.Header("user_id", userId[0]) + ctx.Header("authorize", newAuthorizeStr) + ctx.Header("X-Message-Sign", xms64) + ctx.String(http.StatusOK, string(resp)) +} + +func NoticeUserGreetingHandler(ctx *gin.Context) { + reqTime := time.Now().Unix() + + authorizeStr := ctx.Request.Header["Authorize"] + authToken, err := utils.GetAuthorizeToken(authorizeStr) + if err != nil { + ctx.String(http.StatusForbidden, "Fuck you!") + return + } + userId := ctx.Request.Header[http.CanonicalHeaderKey("User-ID")] + if len(userId) == 0 { + ctx.String(http.StatusForbidden, "Fuck you!") + return + } + + if !database.MatchTokenUid(authToken, userId[0]) { + ctx.String(http.StatusForbidden, "Fuck you!") + return + } + + nonce, err := utils.GetAuthorizeNonce(authorizeStr) + if err != nil { + fmt.Println(err) + ctx.String(http.StatusForbidden, "Fuck you!") + return + } + nonce++ + + respTime := time.Now().Unix() + newAuthorizeStr := fmt.Sprintf("consumerKey=lovelive_test&timeStamp=%d&version=1.1&token=%s&nonce=%d&user_id=%s&requestTimeStamp=%d", respTime, authToken, nonce, userId[0], reqTime) + // fmt.Println(newAuthorizeStr) + + noticeResp := NoticeUserGreetingResp{ + ResponseData: NoticeUserGreetingData{ + ItemCount: 0, + HasNext: false, + NoticeList: []interface{}{}, + ServerTimestamp: time.Now().Unix(), + }, + ReleaseInfo: []interface{}{}, + StatusCode: 200, + } + resp, err := json.Marshal(noticeResp) + if err != nil { + panic(err) + } + xms := encrypt.RSA_Sign_SHA1(resp, "privatekey.pem") + xms64 := base64.RawStdEncoding.EncodeToString(xms) + + ctx.Header("Server-Version", config.Conf.Server.VersionNumber) + ctx.Header("user_id", userId[0]) + ctx.Header("authorize", newAuthorizeStr) + ctx.Header("X-Message-Sign", xms64) + ctx.String(http.StatusOK, string(resp)) +} diff --git a/main.go b/main.go index e420ab6..1ca8117 100644 --- a/main.go +++ b/main.go @@ -79,6 +79,9 @@ func main() { m.POST("/subscenario/startup", handler.SubScenarioStartupHandler) m.POST("/subscenario/reward", handler.SubScenarioStartupHandler) m.POST("/album/seriesAll", handler.AlbumSeriesAllHandler) + m.POST("/notice/noticeFriendVariety", handler.NoticeFriendVarietyHandler) + m.POST("/notice/noticeFriendGreeting", handler.NoticeFriendGreetingHandler) + m.POST("/notice/noticeUserGreetingHistory", handler.NoticeUserGreetingHandler) } r.GET("/webview.php/announce/index", handler.AnnounceIndexHandler)