/*
* Copyright (C) 2024 Jonni Liljamo <jonni@liljamo.com>
*
* This file is licensed under GPL-3.0-or-later, see NOTICE and LICENSE for
* more information.
*/
package handlers
import (
"math/rand"
"net/http"
"git.src.quest/~liljamo/emerwen-web/internal/auth"
"github.com/alexedwards/scs/v2"
"github.com/gin-gonic/gin"
)
// Login returns a gin handler for the login route.
func Login(a *auth.Auth, sm *scs.SessionManager) gin.HandlerFunc {
return func(c *gin.Context) {
state := generateState()
sm.Put(c.Request.Context(), "state", state)
c.Redirect(http.StatusTemporaryRedirect, a.Config.AuthCodeURL(state))
}
}
const chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
func generateState() string {
b := make([]byte, 32)
for i := range b {
b[i] = chars[rand.Intn(len(chars))]
}
return string(b)
}