1
0
mirror of https://github.com/mgerb/go-discord-bot synced 2026-01-09 08:32:48 +00:00
Files
go-discord-bot/server/webserver/routes/oauth.go

71 lines
1.2 KiB
Go

package routes
import (
"github.com/gin-gonic/gin"
"github.com/mgerb/go-discord-bot/server/db"
"github.com/mgerb/go-discord-bot/server/webserver/discord"
"github.com/mgerb/go-discord-bot/server/webserver/middleware"
"github.com/mgerb/go-discord-bot/server/webserver/model"
log "github.com/sirupsen/logrus"
)
type oauthReq struct {
Code string `json:"code"`
}
// AddOauthRoutes -
func AddOauthRoutes(group *gin.RouterGroup) {
group.POST("/oauth", oauthHandler)
}
func oauthHandler(c *gin.Context) {
var json oauthReq
err := c.ShouldBindJSON(&json)
if err != nil {
log.Error(err)
c.JSON(500, err)
return
}
// get users oauth code
oauth, err := discord.Oauth(json.Code)
if err != nil {
log.Error(err)
c.JSON(500, err)
return
}
// verify and grab user information
user, err := discord.GetUserInfo(oauth.AccessToken)
if err != nil {
log.Error(err)
c.JSON(500, err)
return
}
// save/update user in database
err = model.UserSave(db.GetConn(), &user)
if err != nil {
log.Error(err)
c.JSON(500, err)
return
}
// generate json web token
token, err := middleware.GetJWT(user)
if err != nil {
log.Error(err)
c.JSON(500, err)
return
}
c.JSON(200, token)
}