mirror of
https://github.com/pocket-id/pocket-id.git
synced 2026-07-17 16:29:55 +00:00
52 lines
1.2 KiB
Go
52 lines
1.2 KiB
Go
package bootstrap
|
|
|
|
import (
|
|
"fmt"
|
|
"net"
|
|
"os"
|
|
"strconv"
|
|
|
|
"github.com/pocket-id/pocket-id/backend/internal/common"
|
|
)
|
|
|
|
type socket struct {
|
|
addr string
|
|
listener net.Listener
|
|
}
|
|
|
|
func unixSocket() (*socket, error) {
|
|
addr := common.EnvConfig.UnixSocket
|
|
os.Remove(addr) // remove dangling the socket file to avoid file-exist error
|
|
|
|
listener, err := net.Listen("unix", addr) //nolint:noctx
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to create UNIX socket: %w", err)
|
|
}
|
|
|
|
if common.EnvConfig.UnixSocketMode != "" {
|
|
mode, err := strconv.ParseUint(common.EnvConfig.UnixSocketMode, 8, 32)
|
|
if err != nil {
|
|
listener.Close()
|
|
return nil, fmt.Errorf("failed to parse UNIX socket mode '%s': %w", common.EnvConfig.UnixSocketMode, err)
|
|
}
|
|
|
|
if err := os.Chmod(addr, os.FileMode(mode)); err != nil {
|
|
listener.Close()
|
|
return nil, fmt.Errorf("failed to set UNIX socket mode '%s': %w", common.EnvConfig.UnixSocketMode, err)
|
|
}
|
|
}
|
|
|
|
return &socket{addr, listener}, nil
|
|
}
|
|
|
|
func tcpSocket() (*socket, error) {
|
|
addr := net.JoinHostPort(common.EnvConfig.Host, common.EnvConfig.Port)
|
|
|
|
listener, err := net.Listen("tcp", addr) //nolint:noctx
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to create TCP socket: %w", err)
|
|
}
|
|
|
|
return &socket{addr, listener}, nil
|
|
}
|