DEVELOPMENT ENVIRONMENT

~liljamo/emerwen-web

ref: cb21a041ada3070c6dca5418e703cfd6af0ae3b8 emerwen-web/internal/handlers/login.go -rw-r--r-- 850 bytes
cb21a041Jonni Liljamo feat: initial 4 days ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
/*
 * 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)
}