diff --git a/cmd/evening_detective_server/main.go b/cmd/evening_detective_server/main.go index e247a61..056ea42 100644 --- a/cmd/evening_detective_server/main.go +++ b/cmd/evening_detective_server/main.go @@ -8,6 +8,7 @@ import ( "evening_detective_server/internal/modules/cleaner" "evening_detective_server/internal/modules/email_sender" "evening_detective_server/internal/modules/file_storage" + "evening_detective_server/internal/modules/network_utils" "evening_detective_server/internal/modules/password_generator" "evening_detective_server/internal/modules/processor_jwt" "evening_detective_server/internal/modules/scenario_archive" @@ -335,9 +336,22 @@ func main() { log.Println("Serving gRPC-Gateway on http://0.0.0.0:8090") log.Println("Serving docs on http://0.0.0.0:8090/docs") + logLocalAddresses() log.Fatalln(gwServer.ListenAndServe()) } +func logLocalAddresses() { + addrs, err := network_utils.GetLocalIPv4Addresses() + if err != nil { + log.Printf("Unable to detect local network address: %v", err) + return + } + + for _, ip := range addrs { + log.Printf("Local network: http://%s:8090 (docs: http://%s:8090/docs/)", ip, ip) + } +} + func cors(h http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Access-Control-Allow-Origin", "*") diff --git a/internal/modules/network_utils/addresses.go b/internal/modules/network_utils/addresses.go new file mode 100644 index 0000000..9f99c18 --- /dev/null +++ b/internal/modules/network_utils/addresses.go @@ -0,0 +1,27 @@ +package network_utils + +import "net" + +// GetLocalIPv4Addresses returns non-loopback IPv4 addresses of the host. +func GetLocalIPv4Addresses() ([]string, error) { + addrs, err := net.InterfaceAddrs() + if err != nil { + return nil, err + } + + var result []string + for _, addr := range addrs { + var ip net.IP + switch addr := addr.(type) { + case *net.IPNet: + ip = addr.IP + case *net.IPAddr: + ip = addr.IP + } + if ip == nil || ip.IsLoopback() || ip.To4() == nil { + continue + } + result = append(result, ip.String()) + } + return result, nil +}