From 4820c7696db3c54959258b1a5b00c77e1246cbd7 Mon Sep 17 00:00:00 2001 From: Arda Serdar Pektezol <1669855+pektezol@users.noreply.github.com> Date: Fri, 6 Jan 2023 23:55:12 +0300 Subject: what the fuck is this mess (#21) --- backend/controllers/homeController.go | 77 +++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 backend/controllers/homeController.go (limited to 'backend/controllers/homeController.go') diff --git a/backend/controllers/homeController.go b/backend/controllers/homeController.go new file mode 100644 index 0000000..8d81eef --- /dev/null +++ b/backend/controllers/homeController.go @@ -0,0 +1,77 @@ +package controllers + +import ( + "net/http" + "os" + "time" + + "github.com/gin-gonic/gin" + "github.com/golang-jwt/jwt/v4" + "github.com/pektezol/leastportals/backend/database" + "github.com/pektezol/leastportals/backend/models" + "github.com/solovev/steam_go" +) + +func Home(c *gin.Context) { + user, exists := c.Get("user") + if !exists { + c.JSON(200, "no id, not auth") + } else { + c.JSON(200, gin.H{ + "output": user, + }) + } +} + +func Login(c *gin.Context) { + openID := steam_go.NewOpenId(c.Request) + switch openID.Mode() { + case "": + c.Redirect(http.StatusMovedPermanently, openID.AuthUrl()) + case "cancel": + c.Redirect(http.StatusMovedPermanently, "/") + default: + steamID, err := openID.ValidateAndGetId() + if err != nil { + c.JSON(http.StatusInternalServerError, models.ErrorResponse(err.Error())) + return + } + // Create user if new + var checkSteamID int64 + err = database.DB.QueryRow("SELECT steam_id FROM users WHERE steam_id = $1", steamID).Scan(&checkSteamID) + if err != nil { + c.JSON(http.StatusInternalServerError, models.ErrorResponse(err.Error())) + return + } + // User does not exist + if checkSteamID == 0 { + user, err := steam_go.GetPlayerSummaries(steamID, os.Getenv("API_KEY")) + if err != nil { + c.JSON(http.StatusInternalServerError, models.ErrorResponse(err.Error())) + return + } + // Insert new user to database + database.DB.Exec(`INSERT INTO users (steam_id, username, avatar_link, country_code) + VALUES ($1, $2, $3, $4)`, steamID, user.PersonaName, user.AvatarFull, user.LocCountryCode) + } + // Generate JWT token + token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{ + "sub": steamID, + "exp": time.Now().Add(time.Hour * 24 * 365).Unix(), + }) + // Sign and get the complete encoded token as a string using the secret + tokenString, err := token.SignedString([]byte(os.Getenv("SECRET_KEY"))) + if err != nil { + c.JSON(http.StatusBadRequest, models.ErrorResponse("Failed to generate token.")) + return + } + c.JSON(http.StatusOK, models.Response{ + Success: true, + Message: "Successfully generated token.", + Data: models.LoginResponse{ + Token: tokenString, + }, + }) + return + } +} -- cgit v1.2.3