From 3b9c77b42255400196f6d7a075ebb025ad4ca4b3 Mon Sep 17 00:00:00 2001 From: Fedorov Vladimir Date: Mon, 2 Mar 2026 01:43:46 +0700 Subject: [PATCH] clear --- cmd/evening_detective/main.go | 6 +++-- internal/config/config.go | 43 ++++++++++++++++++++++++++++++ internal/modules/link/interface.go | 2 +- internal/modules/link/service.go | 41 ++-------------------------- internal/services/services.go | 13 ++++----- 5 files changed, 55 insertions(+), 50 deletions(-) diff --git a/cmd/evening_detective/main.go b/cmd/evening_detective/main.go index 0299b46..fb34e42 100644 --- a/cmd/evening_detective/main.go +++ b/cmd/evening_detective/main.go @@ -50,6 +50,7 @@ func main() { linkService := link.NewLinkService() + clientHost := config.GetHost() proto.RegisterEveningDetectiveServer( s, app.NewServer( @@ -57,6 +58,7 @@ func main() { repository, storyService, linkService, + clientHost, ), ), ) @@ -112,9 +114,9 @@ func main() { muxUser.Handle("/", fileServerUser) // Serve user web server - log.Println("Serving user web on http://0.0.0.0:8100") + log.Println("Serving user web on http://0.0.0.0" + config.ClientPort) go func() { - log.Fatalln(http.ListenAndServe(":8100", muxUser)) + log.Fatalln(http.ListenAndServe(config.ClientPort, muxUser)) }() muxAdmin := http.NewServeMux() diff --git a/internal/config/config.go b/internal/config/config.go index fe8c788..f4d771f 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -1,10 +1,15 @@ package config import ( + "net" "os" "path/filepath" ) +const ( + ClientPort = ":8100" +) + func GetStoryFilepath() string { return getFilepath("STORY_FILENAME", "data/story/story.json") } @@ -13,6 +18,18 @@ func GetDBFilepath() string { return getFilepath("DB_FILENAME", "data/db/store.db") } +func GetHost() string { + host := os.Getenv("HOST") + if host != "" { + return host + } + ips, err := getLocalIPs() + if err != nil || len(ips) == 0 { + return "127.0.0.1" + ClientPort + } + return ips[0] + ClientPort +} + func getFilepath(env string, defaultFilepath string) string { filepath := selectFilepath(env, defaultFilepath) ensureDirExists(filepath) @@ -34,3 +51,29 @@ func ensureDirExists(filePath string) error { } return os.MkdirAll(dir, 0755) } + +func getLocalIPs() ([]string, error) { + var ips []string + addrs, err := net.InterfaceAddrs() + if err != nil { + return nil, err + } + + for _, addr := range addrs { + ipNet, ok := addr.(*net.IPNet) + if !ok { + continue + } + + ip := ipNet.IP + if ip.IsLoopback() || ip.IsLinkLocalMulticast() || ip.IsLinkLocalUnicast() { + continue + } + + if ipv4 := ip.To4(); ipv4 != nil { + ips = append(ips, ipv4.String()) + } + } + + return ips, nil +} diff --git a/internal/modules/link/interface.go b/internal/modules/link/interface.go index 7cb3fd1..f5185b7 100644 --- a/internal/modules/link/interface.go +++ b/internal/modules/link/interface.go @@ -1,5 +1,5 @@ package link type ILinkService interface { - GetTeamClientLink(name string, password string) (string, error) + GetTeamClientLink(host string, name string, password string) string } diff --git a/internal/modules/link/service.go b/internal/modules/link/service.go index 6f26fb7..38c8e99 100644 --- a/internal/modules/link/service.go +++ b/internal/modules/link/service.go @@ -2,7 +2,6 @@ package link import ( "fmt" - "net" "net/url" ) @@ -12,42 +11,6 @@ func NewLinkService() ILinkService { return &service{} } -func (s *service) GetTeamClientLink(name string, password string) (string, error) { - ip := selectIP() - u := fmt.Sprintf("http://%s:8100?name=%s&password=%s", ip, url.PathEscape(name), password) - return u, nil -} - -func selectIP() string { - ips, err := getLocalIPs() - if err != nil || len(ips) == 0 { - return "127.0.0.1" - } - return ips[0] -} - -func getLocalIPs() ([]string, error) { - var ips []string - addrs, err := net.InterfaceAddrs() - if err != nil { - return nil, err - } - - for _, addr := range addrs { - ipNet, ok := addr.(*net.IPNet) - if !ok { - continue - } - - ip := ipNet.IP - if ip.IsLoopback() || ip.IsLinkLocalMulticast() || ip.IsLinkLocalUnicast() { - continue - } - - if ipv4 := ip.To4(); ipv4 != nil { - ips = append(ips, ipv4.String()) - } - } - - return ips, nil +func (s *service) GetTeamClientLink(host string, name string, password string) string { + return fmt.Sprintf("http://%s?name=%s&password=%s", host, url.PathEscape(name), password) } diff --git a/internal/services/services.go b/internal/services/services.go index e097b56..20ca32b 100644 --- a/internal/services/services.go +++ b/internal/services/services.go @@ -22,17 +22,20 @@ type Services struct { repository *Repository storyService *story_service.StoryService linkService link.ILinkService + clientHost string } func NewServices( repository *Repository, storyService *story_service.StoryService, linkService link.ILinkService, + clientHost string, ) *Services { return &Services{ repository: repository, storyService: storyService, linkService: linkService, + clientHost: clientHost, } } @@ -157,10 +160,7 @@ func (s *Services) GetTeams(ctx context.Context, _ *proto.GetTeamsReq) (*proto.G if err != nil { return nil, err } - newTeam.Url, err = s.linkService.GetTeamClientLink(team.Name, team.Password) - if err != nil { - return nil, err - } + newTeam.Url = s.linkService.GetTeamClientLink(s.clientHost, team.Name, team.Password) newTeam.SpendTime = int64(len(actions)) currentApplications, err := s.repository.GetApplicationsByState(ctx, team.ID, "NEW") if err != nil { @@ -198,10 +198,7 @@ func (s *Services) DownloadTeamsQrCodesFile(ctx context.Context, req *proto.Down return nil, err } for _, team := range teams { - team.Link, err = s.linkService.GetTeamClientLink(team.Name, team.Password) - if err != nil { - return nil, err - } + team.Link = s.linkService.GetTeamClientLink(s.clientHost, team.Name, team.Password) } b, err := pdf_service.CreateTeamsPdf(teams) if err != nil {