kubenetworks/kubevpn

View on GitHub
pkg/core/node.go

Summary

Maintainability
A
0 mins
Test Coverage
package core

import (
    "errors"
    "net/url"
    "strconv"
    "strings"
)

var ErrorInvalidNode = errors.New("invalid node")

type Node struct {
    Addr     string
    Protocol string
    Remote   string // remote address, used by tcp/udp port forwarding
    Values   url.Values
    Client   *Client
}

// ParseNode pattern is [scheme://][user:pass@host]:port.
func ParseNode(s string) (*Node, error) {
    s = strings.TrimSpace(s)
    if len(s) == 0 {
        return nil, ErrorInvalidNode
    }
    u, err := url.Parse(s)
    if err != nil {
        return nil, err
    }
    node := &Node{
        Addr:     u.Host,
        Remote:   strings.Trim(u.EscapedPath(), "/"),
        Values:   u.Query(),
        Protocol: u.Scheme,
    }
    return node, nil
}

// Get returns node parameter specified by key.
func (node *Node) Get(key string) string {
    values := node.Values[key]
    for _, value := range values {
        if value != "" {
            return value
        }
    }
    return node.Values.Get(key)
}

// GetInt converts node parameter value to int.
func (node *Node) GetInt(key string) int {
    n, _ := strconv.Atoi(node.Get(key))
    return n
}