You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

77 lines
1.7 KiB

package main
import (
"flag"
"fmt"
"log"
"net"
"os"
"git.chrishayward.xyz/x/users/proto"
"git.chrishayward.xyz/x/users/server"
"google.golang.org/grpc"
"gopkg.in/yaml.v3"
"gorm.io/driver/postgres"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
)
var configPath = flag.String("config", "./config/server.yaml", "--config=./config/server.yaml")
type config struct {
Port int `yaml:"port"`
Secret string `yaml:"secret"`
Database struct {
Type string `yaml:"type"`
File string `yaml:"file"`
Host string `yaml:"host"`
Port int `yaml:"port"`
Name string `yaml:"name"`
User string `yaml:"user"`
Password string `yaml:"password"`
} `yaml:"database"`
}
func main() {
// Parse the optional flags.
flag.Parse()
// Read the config file.
config := &config{}
file, err := os.Open(*configPath)
if err != nil {
log.Fatal(err)
}
defer file.Close()
if err := yaml.NewDecoder(file).Decode(&config); err != nil {
log.Fatal(err)
}
// Initialize the database.
var db *gorm.DB
switch config.Database.Type {
case "postgres":
db, _ = gorm.Open(postgres.Open(fmt.Sprintf(
"host=%s user=%s password=%s dbname=%s port=%d sslmode=disable",
config.Database.Host,
config.Database.User,
config.Database.Password,
config.Database.Name,
config.Database.Port)))
case "sqlite":
default:
db, _ = gorm.Open(sqlite.Open(config.Database.File), &gorm.Config{})
}
// Create the network listener.
lis, err := net.Listen("tcp", fmt.Sprintf(":%d", config.Port))
if err != nil {
log.Fatal(err)
}
// Start listening for requests.
srv := grpc.NewServer()
proto.RegisterUsersServer(srv, server.NewUsersServer(&config.Secret, db))
log.Printf("Listening on :%d", config.Port)
srv.Serve(lis)
}