Skip to content
Snippets Groups Projects
Select Git revision
  • c647c637a44a6568775cf4d455ba252979421a3e
  • master default protected
  • greenkeeper/webpack-4.10.1
  • greenkeeper/webpack-4.10.0
  • greenkeeper/webpack-4.9.2
  • greenkeeper/promise-polyfill-8.0.0
  • greenkeeper/webpack-4.9.1
  • greenkeeper/webpack-4.9.0
  • greenkeeper/webpack-manifest-plugin-2.0.3
  • greenkeeper/update-to-node-10
  • gh-pages
  • greenkeeper/webpack-4.8.3
  • greenkeeper/webpack-4.8.2
  • greenkeeper/webpack-4.7.0
  • greenkeeper/webpack-manifest-plugin-2.0.2
  • greenkeeper/webpack-manifest-plugin-2.0.1
  • greenkeeper/style-loader-0.21.0
  • greenkeeper/webpack-4.6.0
  • greenkeeper/sass-loader-7.0.1
  • greenkeeper/sass-loader-7.0.0
  • greenkeeper/webpack-manifest-plugin-2.0.0
  • 2.7.3
  • 2.7.2
  • 2.7.1
  • 2.7.0
  • 2.6.6
  • 2.6.5
  • 2.6.4
  • 2.6.3
  • 2.6.2
  • 2.6.1
  • 2.6.0
  • 2.5.5
  • 2.5.4
  • 2.5.3
  • 2.5.2
  • 2.5.1
  • 2.5.0
  • 2.4.0
  • 2.3.0
  • 2.2.6
41 results

setup.py

Blame
  • templating.go 1.43 KiB
    package config
    
    import (
    	_ "embed"
    	"encoding"
    	"fmt"
    	"git.kuschku.de/justjanne/terraform-provider-mullvad/api"
    	"net/netip"
    	"strings"
    	"text/template"
    )
    
    var (
    	//go:embed templates/wireguard_config.ini.tmpl
    	tmplData string
    	tmpl     = template.Must(
    		template.New("wireguard_config").Funcs(map[string]any{
    			"joinAddr":     joinStrings[netip.Addr],
    			"joinPrefix":   joinStrings[netip.Prefix],
    			"joinAddrPort": joinStrings[netip.AddrPort],
    		}).Parse(tmplData),
    	)
    )
    
    type configData struct {
    	InterfacePrivateKey api.WireguardKey
    	InterfaceAddress    []netip.Prefix
    	InterfaceGateways   []netip.Addr
    	PeerEndpoint        netip.AddrPort
    	PeerPublicKey       api.WireguardKey
    }
    
    func templateConfig(data configData) (string, error) {
    	buffer := strings.Builder{}
    	tmpl.Option()
    	if err := tmpl.Execute(&buffer, data); err != nil {
    		return "", err
    	}
    	return buffer.String(), nil
    }
    
    func toString(data any) string {
    	asString, ok := data.(string)
    	if ok {
    		return asString
    	}
    	asStringer, ok := data.(*fmt.Stringer)
    	if ok {
    		return (*asStringer).String()
    	}
    	asMarshaler, ok := data.(*encoding.TextMarshaler)
    	if ok {
    		marshalled, err := (*asMarshaler).MarshalText()
    		if err == nil {
    			return string(marshalled)
    		}
    	}
    	return fmt.Sprint(data)
    }
    
    func joinStrings[T any](delimiter string, data []T) string {
    	var entries []string
    	for _, entry := range data {
    		entries = append(entries, toString(entry))
    	}
    	return strings.Join(entries, delimiter)
    }