Private GIT

Skip to content
Snippets Groups Projects
Select Git revision
  • ce7e90e0346307a7a8125d79d6d96b062d770816
  • master default protected
2 results

client.go

Blame
  • client.go 5.81 KiB
    package core
    
    import (
    	"errors"
    	uuid "github.com/satori/go.uuid"
    	log "github.com/sirupsen/logrus"
    	"github.com/skip2/go-qrcode"
    	"gitlab.127-0-0-1.fr/vx3r/wg-gen-web/model"
    	"gitlab.127-0-0-1.fr/vx3r/wg-gen-web/storage"
    	"gitlab.127-0-0-1.fr/vx3r/wg-gen-web/template"
    	"gitlab.127-0-0-1.fr/vx3r/wg-gen-web/util"
    	"golang.zx2c4.com/wireguard/wgctrl/wgtypes"
    	"gopkg.in/gomail.v2"
    	"io/ioutil"
    	"os"
    	"path/filepath"
    	"sort"
    	"strconv"
    	"time"
    )
    
    // CreateClient client with all necessary data
    func CreateClient(client *model.Client) (*model.Client, error) {
    	// check if client is valid
    	errs := client.IsValid()
    	if len(errs) != 0 {
    		for _, err := range errs {
    			log.WithFields(log.Fields{
    				"err": err,
    			}).Error("client validation error")
    		}
    		return nil, errors.New("failed to validate client")
    	}
    
    	u := uuid.NewV4()
    	client.Id = u.String()
    
    	key, err := wgtypes.GeneratePrivateKey()
    	if err != nil {
    		return nil, err
    	}
    	client.PrivateKey = key.String()
    	client.PublicKey = key.PublicKey().String()
    
    	presharedKey, err := wgtypes.GenerateKey()
    	if err != nil {
    		return nil, err
    	}
    	client.PresharedKey = presharedKey.String()
    
    	reserverIps, err := GetAllReservedIps()
    	if err != nil {
    		return nil, err
    	}
    
    	ips := make([]string, 0)
    	for _, network := range client.Address {
    		ip, err := util.GetAvailableIp(network, reserverIps)
    		if err != nil {
    			return nil, err
    		}
    		if util.IsIPv6(ip) {
    			ip = ip + "/128"
    		} else {
    			ip = ip + "/32"
    		}
    		ips = append(ips, ip)
    	}
    	client.Address = ips
    	client.Created = time.Now().UTC()