mirror of https://github.com/h44z/wg-portal.git
				
				
				
			
		
			
				
	
	
		
			104 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			104 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Go
		
	
	
	
| package common
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 	"net"
 | |
| 	"strings"
 | |
| 	"time"
 | |
| )
 | |
| 
 | |
| // BroadcastAddr returns the last address in the given network, or the broadcast address.
 | |
| func BroadcastAddr(n *net.IPNet) net.IP {
 | |
| 	// The golang net package doesn't make it easy to calculate the broadcast address. :(
 | |
| 	var broadcast net.IP
 | |
| 	if len(n.IP) == 4 {
 | |
| 		broadcast = net.ParseIP("0.0.0.0").To4()
 | |
| 	} else {
 | |
| 		broadcast = net.ParseIP("::")
 | |
| 	}
 | |
| 	for i := 0; i < len(n.IP); i++ {
 | |
| 		broadcast[i] = n.IP[i] | ^n.Mask[i]
 | |
| 	}
 | |
| 	return broadcast
 | |
| }
 | |
| 
 | |
| // http://play.golang.org/p/m8TNTtygK0
 | |
| func IncreaseIP(ip net.IP) {
 | |
| 	for j := len(ip) - 1; j >= 0; j-- {
 | |
| 		ip[j]++
 | |
| 		if ip[j] > 0 {
 | |
| 			break
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // IsIPv6 check if given ip is IPv6
 | |
| func IsIPv6(address string) bool {
 | |
| 	ip := net.ParseIP(address)
 | |
| 	if ip == nil {
 | |
| 		return false
 | |
| 	}
 | |
| 	return ip.To4() == nil
 | |
| }
 | |
| 
 | |
| // ParseStringList converts a comma separated string into a list of strings.
 | |
| // It also trims spaces from each element of the list.
 | |
| func ParseStringList(lst string) []string {
 | |
| 	tokens := strings.Split(lst, ",")
 | |
| 	validatedTokens := make([]string, 0, len(tokens))
 | |
| 	for i := range tokens {
 | |
| 		tokens[i] = strings.TrimSpace(tokens[i])
 | |
| 		if tokens[i] != "" {
 | |
| 			validatedTokens = append(validatedTokens, tokens[i])
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	return validatedTokens
 | |
| }
 | |
| 
 | |
| // ListToString converts a list of strings into a comma separated string.
 | |
| func ListToString(lst []string) string {
 | |
| 	return strings.Join(lst, ", ")
 | |
| }
 | |
| 
 | |
| // ListContains checks if a needle exists in the given list.
 | |
| func ListContains(lst []string, needle string) bool {
 | |
| 	for _, entry := range lst {
 | |
| 		if entry == needle {
 | |
| 			return true
 | |
| 		}
 | |
| 	}
 | |
| 	return false
 | |
| }
 | |
| 
 | |
| // https://yourbasic.org/golang/formatting-byte-size-to-human-readable-format/
 | |
| func ByteCountSI(b int64) string {
 | |
| 	const unit = 1000
 | |
| 	if b < unit {
 | |
| 		return fmt.Sprintf("%d B", b)
 | |
| 	}
 | |
| 	div, exp := int64(unit), 0
 | |
| 	for n := b / unit; n >= unit; n /= unit {
 | |
| 		div *= unit
 | |
| 		exp++
 | |
| 	}
 | |
| 	return fmt.Sprintf("%.1f %cB",
 | |
| 		float64(b)/float64(div), "kMGTPE"[exp])
 | |
| }
 | |
| 
 | |
| func FormatDateHTML(t *time.Time) string {
 | |
| 	if t == nil {
 | |
| 		return ""
 | |
| 	}
 | |
| 
 | |
| 	return t.Format("2006-01-02")
 | |
| }
 | |
| 
 | |
| func FormatToUnixTime(t *time.Time) string {
 | |
| 	if t == nil {
 | |
| 		return ""
 | |
| 	}
 | |
| 
 | |
| 	return t.Format(time.UnixDate)
 | |
| }
 |