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.
78 lines
1.7 KiB
78 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":
|
|
fallthrough
|
|
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)
|
|
}
|