diff --git a/README.md b/README.md index fb342cc..b58e450 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,8 @@ # stereo.cat backend written in Go, uses Gin. + +## database shit + +Instead of using Discord oAuth as a database, we instead use it as a login source, only using it to source a username/id, avatar data and a secure login/registration flow. +We store these attributes alongside stereo.cat specific attributes in our own database. There is a trade-off however: this means that avatar & username data is not updated in real-time, only when the oauth flow is executed. diff --git a/internal/api/routes/auth.go b/internal/api/routes/auth.go index a6a634f..53082dc 100644 --- a/internal/api/routes/auth.go +++ b/internal/api/routes/auth.go @@ -31,11 +31,21 @@ func RegisterAuthRoutes(cfg *types.StereoConfig, api *gin.RouterGroup) { panic(err) } - c.String(http.StatusOK, jwt) + res := cfg.Database.FirstOrCreate(&user) + + if res.Error != nil { + panic(res.Error) + } + + // TODO: redirect to dashboard + c.JSON(http.StatusOK, gin.H{ + "jwt": jwt, + "known": res.RowsAffected == 0, + }) }) api.GET("/auth/me", auth.JwtMiddleware(cfg.JWTSecret), func(c *gin.Context) { - claims, _ := c.Get("claims") + claims, _ := c.Get("claims") c.JSON(http.StatusOK, claims) }) }