feat: node UUID
This commit is contained in:
parent
eb97d49d1f
commit
0c703465af
@ -44,15 +44,19 @@ func main() {
|
|||||||
} else if uid == 0 {
|
} else if uid == 0 {
|
||||||
slog.Warn("Running as root! avoid running as root by setting CAP_NET_ADMIN")
|
slog.Warn("Running as root! avoid running as root by setting CAP_NET_ADMIN")
|
||||||
}
|
}
|
||||||
|
uuid, err := hvpnnode3.InitNodeUUID()
|
||||||
|
if err != nil {
|
||||||
|
slog.Error(err.Error())
|
||||||
|
os.Exit(-1)
|
||||||
|
}
|
||||||
|
slog.Info("Node UUID: " + uuid.String())
|
||||||
|
|
||||||
app := createCliApp()
|
app := createCliApp()
|
||||||
err := app.Run(os.Args)
|
err = app.Run(os.Args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
slog.Error(err.Error())
|
slog.Error(err.Error())
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func run(ctx *cli.Context) {
|
func run(ctx *cli.Context) {
|
||||||
|
64
node.go
Normal file
64
node.go
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
package hvpnnode3
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"log/slog"
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"github.com/google/uuid"
|
||||||
|
)
|
||||||
|
|
||||||
|
const UUID_PATH = "/etc/hvpn/uuid"
|
||||||
|
const CONFIG_PATH = "/etc/hvpn"
|
||||||
|
const UUIDV4_LEN = 16
|
||||||
|
|
||||||
|
// Gets or creates a UUID for this node
|
||||||
|
func InitNodeUUID() (*uuid.UUID, error) {
|
||||||
|
|
||||||
|
// TODO: check and write to os.UserHomeDir() to avoid root
|
||||||
|
_, err := os.Stat(UUID_PATH)
|
||||||
|
if err != nil {
|
||||||
|
if errors.Is(err, os.ErrNotExist) {
|
||||||
|
slog.Info(UUID_PATH + " does not exist. Creating...")
|
||||||
|
return createNodeUUID()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
f, err := os.Open(UUID_PATH)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
buffer := make([]byte, UUIDV4_LEN)
|
||||||
|
n, err := f.Read(buffer)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
slog.Debug("UUID: Read " + fmt.Sprint(n) + "bytes" )
|
||||||
|
|
||||||
|
uuid, err := uuid.FromBytes(buffer)
|
||||||
|
return &uuid, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func createNodeUUID() (*uuid.UUID, error) {
|
||||||
|
err := os.MkdirAll(CONFIG_PATH, 0600)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
mode := os.O_RDWR | os.O_CREATE | os.O_EXCL
|
||||||
|
f, err := os.OpenFile(UUID_PATH, mode, 0600)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
uuid, err := uuid.NewRandom()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
n, err := f.Write(uuid[:])
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
slog.Debug("UUID: Wrote " + fmt.Sprint(n) + "bytes")
|
||||||
|
return &uuid, nil
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user