mirror of
https://github.com/Kugelschieber/migo.git
synced 2026-01-18 14:50:29 +00:00
Basic login.
This commit is contained in:
106
cmd/main.go
106
cmd/main.go
@@ -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))
|
||||
|
||||
Reference in New Issue
Block a user