Basic login.

This commit is contained in:
2023-08-01 23:19:14 +02:00
parent 79af3538bc
commit 8261a31679
12 changed files with 567 additions and 110 deletions

View File

@@ -2,11 +2,7 @@ package main
import (
"context"
"crypto/rand"
"crypto/rsa"
"crypto/x509"
"embed"
"encoding/pem"
"github.com/Kugelschieber/migo/api"
"github.com/Kugelschieber/migo/db"
"github.com/go-chi/chi/v5"
@@ -30,106 +26,21 @@ var (
//go:embed admin/dist/assets
assets embed.FS
jwtAuth *jwtauth.JWTAuth
)
func init() {
generateRSAKeys()
/*jwtAuth = jwtauth.New("RS256", loadRSAPrivateKey(), loadRSAPublicKey())
_, tokenString, err := jwtAuth.Encode(map[string]interface{}{"test": 42})*/
}
func generateRSAKeys() {
err := os.Mkdir("secrets", 0755)
if os.IsExist(err) {
return
} else if err != nil {
log.Fatalf("Error creating secrets directory: %v", err)
}
key, err := rsa.GenerateKey(rand.Reader, 4096)
if err != nil {
log.Fatalf("Error generating RSA key: %v", err)
}
pub := key.Public()
keyPEM := pem.EncodeToMemory(
&pem.Block{
Type: "RSA PRIVATE KEY",
Bytes: x509.MarshalPKCS1PrivateKey(key),
},
)
pubPEM := pem.EncodeToMemory(
&pem.Block{
Type: "RSA PUBLIC KEY",
Bytes: x509.MarshalPKCS1PublicKey(pub.(*rsa.PublicKey)),
},
)
if err := os.WriteFile("secrets/jwt.rsa", keyPEM, 0700); err != nil {
log.Fatalf("Error writing private RSA key: %v", err)
}
if err := os.WriteFile("secrets/jwt.rsa.pub", pubPEM, 0755); err != nil {
log.Fatalf("Error writing public RSA key: %v", err)
}
}
func loadRSAPublicKey() *rsa.PublicKey {
data, err := os.ReadFile("secrets/jwt.rsa.pub")
if err != nil {
log.Fatalf("Error loading RSA key: %v", err)
}
block, _ := pem.Decode(data)
if block == nil {
log.Fatalf("Error decoding RSA key: %v", err)
}
key, err := x509.ParsePKCS1PublicKey(block.Bytes)
if err != nil {
log.Fatalf("Error parsing RSA key: %v", err)
}
return key
}
func loadRSAPrivateKey() *rsa.PrivateKey {
data, err := os.ReadFile("secrets/jwt.rsa")
if err != nil {
log.Fatalf("Error loading RSA key: %v", err)
}
block, _ := pem.Decode(data)
if block == nil {
log.Fatalf("Error decoding RSA key: %v", err)
}
key, err := x509.ParsePKCS1PrivateKey(block.Bytes)
if err != nil {
log.Fatalf("Error parsing RSA key: %v", err)
}
return key
}
func main() {
if err := db.Init(); err != nil {
log.Fatalf("Error initializing database: %v", err)
}
defer db.Close()
api.InitJWT()
dev := os.Getenv("MIGO_DEV") != ""
if dev {
log.Println("Running in development mode")
}
router := chi.NewRouter()
router.Use(middleware.Recoverer)
router.Use(middleware.Compress(5))
@@ -140,11 +51,12 @@ func main() {
AllowCredentials: true,
MaxAge: 86400,
}))
router.Post("/api/v1/login", api.Login)
router.Group(func(r chi.Router) {
r.Use(jwtauth.Verifier(jwtAuth))
r.Use(jwtauth.Verifier(api.GetJWTAuth()))
r.Use(jwtauth.Authenticator)
r.Route("/api/v1", func(r chi.Router) {
r.Get("/debug", api.DebugHandler)
r.Get("/debug", api.Debug)
})
})
router.Handle("/admin", http.RedirectHandler("/admin/", http.StatusFound))