-
Notifications
You must be signed in to change notification settings - Fork 311
/
factory.go
93 lines (81 loc) · 2.81 KB
/
factory.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
/*
* Copyright (C) 2017 The "MysteriumNetwork/node" Authors.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package service
import (
"crypto/x509/pkix"
"github.com/rs/zerolog/log"
"github.com/mysteriumnetwork/go-openvpn/openvpn/tls"
"github.com/mysteriumnetwork/node/core/ip"
"github.com/mysteriumnetwork/node/core/node"
"github.com/mysteriumnetwork/node/core/port"
"github.com/mysteriumnetwork/node/eventbus"
"github.com/mysteriumnetwork/node/firewall"
"github.com/mysteriumnetwork/node/nat"
)
// NewManager creates new instance of Openvpn service
func NewManager(nodeOptions node.Options,
serviceOptions Options,
country string,
ipResolver ip.Resolver,
sessionMap SessionMap,
natService nat.NATService,
portPool port.ServicePortSupplier,
bus eventbus.EventBus,
trafficFirewall firewall.IncomingTrafficFirewall,
) *Manager {
return &Manager{
nodeOptions: nodeOptions,
serviceOptions: serviceOptions,
natService: natService,
ports: portPool,
bus: bus,
trafficFirewall: trafficFirewall,
country: country,
ipResolver: ipResolver,
openvpnClients: NewClientMap(sessionMap),
}
}
func vpnServerIP(outboundIP, publicIP string, isLocalnet bool) string {
if publicIP == outboundIP {
return publicIP
}
if isLocalnet {
log.Warn().Msgf(
`WARNING: It seems that publicly visible ip: [%s] does not match your local machines ip: [%s].
Since it's localnet, will use %v for openvpn service`, publicIP,
outboundIP,
outboundIP)
return outboundIP
}
return publicIP
}
// primitiveFactory takes in the country and providerID and forms the tls primitives out of it
func primitiveFactory(currentCountry, providerID string) (*tls.Primitives, error) {
log.Info().Msg("Country detected: " + currentCountry)
caSubject := pkix.Name{
Country: []string{currentCountry},
Organization: []string{"Mysterium Network"},
OrganizationalUnit: []string{"Mysterium Team"},
}
serverCertSubject := pkix.Name{
Country: []string{currentCountry},
Organization: []string{"Mysterium node operator company"},
OrganizationalUnit: []string{"Node operator team"},
CommonName: providerID,
}
return tls.NewTLSPrimitives(caSubject, serverCertSubject)
}