113 lines
2.6 KiB
Go
113 lines
2.6 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"log"
|
|
"net"
|
|
|
|
"github.com/ilyakaznacheev/cleanenv"
|
|
"github.com/royalcat/konfa-server/pkg/uuid"
|
|
"github.com/royalcat/konfa-server/src/auth"
|
|
"github.com/royalcat/konfa-server/src/konfa"
|
|
"github.com/royalcat/konfa-server/src/proto"
|
|
chatv1 "github.com/royalcat/konfa-server/src/proto/konfa/chat/v1"
|
|
serverv1 "github.com/royalcat/konfa-server/src/proto/konfa/server/v1"
|
|
"github.com/royalcat/konfa-server/src/store"
|
|
"google.golang.org/grpc"
|
|
)
|
|
|
|
type Config struct {
|
|
DB string `env:"DB"`
|
|
}
|
|
|
|
func main() {
|
|
ctx := context.Background()
|
|
|
|
var cfg Config
|
|
err := cleanenv.ReadEnv(&cfg)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
db, dbpool, err := store.ConnectPostgres(ctx, cfg.DB)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
srv := konfa.NewService(db, dbpool)
|
|
|
|
authen, err := auth.NewAuthenticator(ctx, db, auth.AuthenticatorConfig{
|
|
Issuer: "https://sso.konfach.ru/realms/konfach",
|
|
ClientID: "konfa",
|
|
ClientSecret: "UqeaMowRXcGULkAepr0EAEUfE82OjY72",
|
|
})
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
grpcServer := grpc.NewServer(
|
|
grpc.UnaryInterceptor(authen.UnaryAuthenticate),
|
|
grpc.StreamInterceptor(authen.StreamAuthenticate),
|
|
)
|
|
chatv1.RegisterChatServiceServer(grpcServer, proto.NewChatService(srv))
|
|
serverv1.RegisterServerServiceServer(grpcServer, proto.NewServerService(srv))
|
|
|
|
serverID, chanID, err := createKonfach(ctx, srv)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
println(serverID.String())
|
|
println(chanID.String())
|
|
|
|
port := 38100
|
|
|
|
lis, err := net.Listen("tcp", fmt.Sprintf("0.0.0.0:%d", port))
|
|
if err != nil {
|
|
log.Fatalf("failed to listen: %v", err)
|
|
}
|
|
|
|
println("Server is running on port", port)
|
|
panic(grpcServer.Serve(lis))
|
|
}
|
|
|
|
func createKonfach(ctx context.Context, srv *konfa.Service) (uuid.UUID, uuid.UUID, error) {
|
|
var serverID uuid.UUID
|
|
|
|
servers, err := srv.ListServers(ctx)
|
|
if err != nil {
|
|
return uuid.Nil, uuid.Nil, fmt.Errorf("failed to list servers: %w", err)
|
|
}
|
|
for _, serv := range servers {
|
|
if serv.Name == "konfach" {
|
|
serverID = serv.ID
|
|
}
|
|
}
|
|
if serverID == uuid.Nil {
|
|
serverID, err = srv.CreateServer(ctx, "konfach")
|
|
if err != nil {
|
|
return uuid.Nil, uuid.Nil, fmt.Errorf("failed to create server: %w", err)
|
|
}
|
|
}
|
|
|
|
var chanID uuid.UUID
|
|
|
|
channels, err := srv.ListTextChannelsOnServer(ctx, serverID)
|
|
if err != nil {
|
|
return uuid.Nil, uuid.Nil, err
|
|
}
|
|
for _, channel := range channels {
|
|
if channel.Name == "general" {
|
|
chanID = channel.ID
|
|
}
|
|
}
|
|
if chanID == uuid.Nil {
|
|
chanID, err = srv.CreateTextChannel(ctx, serverID, "general")
|
|
if err != nil {
|
|
return uuid.Nil, uuid.Nil, fmt.Errorf("failed to create channel: %w", err)
|
|
}
|
|
}
|
|
|
|
return serverID, chanID, nil
|
|
}
|