You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
auth2/cmd/microauthsqld/main.go

130 lines
3.1 KiB
Go

package main
import (
"crypto/ed25519"
"encoding/base64"
"errors"
"fmt"
"log"
"os"
"os/exec"
"strings"
"github.com/urfave/cli/v2"
"go-micro.dev/v4"
"go-micro.dev/v4/logger"
"jochum.dev/jo-micro/auth2/cmd/microauthsqld/config"
iconfig "jochum.dev/jo-micro/auth2/internal/config"
iLogger "jochum.dev/jo-micro/auth2/internal/logger"
"jochum.dev/jo-micro/router"
"jochum.dev/jo-micro/auth2/internal/bun"
)
var (
ErrorNoKeys = errors.New("config AUTH_ACCESS_TOKEN_*_KEY or AUTH_REFRESH_TOKEN_*_KEY not given")
)
func main() {
if err := iconfig.Load(config.GetConfig()); err != nil {
logger.Fatal(err)
}
srv := micro.NewService()
flags := []cli.Flag{
&cli.BoolFlag{
Name: "generate-keys",
Usage: "Generate keys for the config and/or the environment",
Value: false,
},
}
flags = append(flags, bun.Flags()...)
flags = append(flags, iLogger.Flags()...)
opts := []micro.Option{
micro.Name(config.Name),
micro.Version(config.Version),
micro.Flags(flags...),
micro.Action(func(c *cli.Context) error {
if c.Bool("generate-keys") {
// Just generate keys and print them to the commandline
aPubKeyB, aPrivKeyB, err := ed25519.GenerateKey(nil)
if err != nil {
log.Fatal(err)
return err
}
rPubKeyB, rPrivKeyB, err := ed25519.GenerateKey(nil)
if err != nil {
log.Fatal(err)
return err
}
absPath, err := exec.LookPath(os.Args[0])
if err != nil {
// Don't fail here
absPath = os.Args[0]
}
fmt.Printf("# go.micro.auth ed25519 JWT keys - generated using '%s %s'\n", absPath, strings.Join(os.Args[1:len(os.Args)], " "))
fmt.Printf("AUTH_ACCESSTOKEN_PRIVKEY=\"%s\"\n", base64.StdEncoding.EncodeToString(aPrivKeyB))
fmt.Printf("AUTH_ACCESSTOKEN_PUBKEY=\"%s\"\n", base64.StdEncoding.EncodeToString(aPubKeyB))
fmt.Printf("AUTH_REFRESHTOKEN_PRIVKEY=\"%s\"\n", base64.StdEncoding.EncodeToString(rPrivKeyB))
fmt.Printf("AUTH_REFRESHTOKEN_PUBKEY=\"%s\"\n", base64.StdEncoding.EncodeToString(rPubKeyB))
os.Exit(0)
}
// Start the logger
if err := iLogger.Start(c); err != nil {
log.Fatal(err)
return err
}
// Connect to the database
if err := bun.Start(c); err != nil {
log.Fatal(err)
return err
}
// Check if we got keys
authConfig := config.GetAuthConfig()
if authConfig.AccessToken.PrivKey == "" || authConfig.AccessToken.PubKey == "" || authConfig.RefreshToken.PrivKey == "" || authConfig.RefreshToken.PubKey == "" {
log.Fatal(ErrorNoKeys)
return ErrorNoKeys
}
// Register with https://jochum.dev/jo-micro/router
r := router.NewHandler(
config.GetServerConfig().RouterURI,
router.NewRoute(
router.Method(router.MethodGet),
router.Path("/routes"),
router.Endpoint("routes"),
),
)
r.RegisterWithServer(srv.Server())
return nil
}),
}
srv.Init(opts...)
// Run server
if err := srv.Run(); err != nil {
logger.Fatal(err)
}
// Disconnect from the database
if err := bun.Stop(); err != nil {
logger.Fatal(err)
}
// Stop the logger
if err := iLogger.Stop(); err != nil {
logger.Fatal(err)
}
}