Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Decouple openvpn #371

Merged
merged 12 commits into from
Sep 17, 2018
Merged
2 changes: 1 addition & 1 deletion communication/nats/discovery/bootstrap_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@ import (
"encoding/json"
"testing"

"github.com/mysteriumnetwork/node/openvpn"
dto_discovery "github.com/mysteriumnetwork/node/service_discovery/dto"
"github.com/mysteriumnetwork/node/services/openvpn"
"github.com/stretchr/testify/assert"
)

Expand Down
16 changes: 9 additions & 7 deletions core/connection/openvpn.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,12 @@ import (
"github.com/mysteriumnetwork/node/identity"
"github.com/mysteriumnetwork/node/openvpn"
"github.com/mysteriumnetwork/node/openvpn/middlewares/client/auth"
"github.com/mysteriumnetwork/node/openvpn/middlewares/client/bytescount"
openvpn_bytescount "github.com/mysteriumnetwork/node/openvpn/middlewares/client/bytescount"
"github.com/mysteriumnetwork/node/openvpn/middlewares/state"
"github.com/mysteriumnetwork/node/openvpn/session/credentials"
"github.com/mysteriumnetwork/node/server"
openvpn_node "github.com/mysteriumnetwork/node/services/openvpn"
"github.com/mysteriumnetwork/node/services/openvpn/middlewares/client/bytescount"
openvpn_session "github.com/mysteriumnetwork/node/services/openvpn/session"
"github.com/mysteriumnetwork/node/session"
)

Expand All @@ -42,13 +44,13 @@ func ConfigureVpnClientFactory(
originalLocationCache location.Cache,
) VpnClientCreator {
return func(vpnSession session.SessionDto, consumerID identity.Identity, providerID identity.Identity, stateCallback state.Callback, options ConnectOptions) (openvpn.Process, error) {
var receivedConfig openvpn.VPNConfig
var receivedConfig openvpn_node.VPNConfig
err := json.Unmarshal(vpnSession.Config, &receivedConfig)
if err != nil {
return nil, err
}

vpnClientConfig, err := openvpn.NewClientConfigFromSession(&receivedConfig, configDirectory, runtimeDirectory)
vpnClientConfig, err := openvpn_node.NewClientConfigFromSession(&receivedConfig, configDirectory, runtimeDirectory)
if err != nil {
return nil, err
}
Expand All @@ -67,13 +69,13 @@ func ConfigureVpnClientFactory(
time.Minute,
)

credentialsProvider := credentials.SignatureCredentialsProvider(vpnSession.ID, signer)
credentialsProvider := openvpn_session.SignatureCredentialsProvider(vpnSession.ID, signer)

return openvpn.NewClient(
return openvpn_node.NewClient(
openvpnBinary,
vpnClientConfig,
state.NewMiddleware(stateCallback, statsSender.StateHandler),
bytescount.NewMiddleware(statsSaver, 1*time.Second),
openvpn_bytescount.NewMiddleware(statsSaver, 1*time.Second),
auth.NewMiddleware(credentialsProvider),
), nil
}
Expand Down
2 changes: 1 addition & 1 deletion core/node/node.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,9 @@ import (
identity_registry "github.com/mysteriumnetwork/node/identity/registry"
"github.com/mysteriumnetwork/node/logconfig"
"github.com/mysteriumnetwork/node/metadata"
"github.com/mysteriumnetwork/node/openvpn"
"github.com/mysteriumnetwork/node/server"
"github.com/mysteriumnetwork/node/service_discovery/dto"
"github.com/mysteriumnetwork/node/services/openvpn"
"github.com/mysteriumnetwork/node/tequilapi"
tequilapi_endpoints "github.com/mysteriumnetwork/node/tequilapi/endpoints"
"github.com/mysteriumnetwork/node/utils"
Expand Down
15 changes: 9 additions & 6 deletions core/service/factory.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,9 @@ import (
"github.com/mysteriumnetwork/node/openvpn"
"github.com/mysteriumnetwork/node/openvpn/middlewares/server/auth"
"github.com/mysteriumnetwork/node/openvpn/middlewares/state"
openvpn_session "github.com/mysteriumnetwork/node/openvpn/session"
"github.com/mysteriumnetwork/node/openvpn/tls"
openvpn_node "github.com/mysteriumnetwork/node/services/openvpn"
openvpn_session "github.com/mysteriumnetwork/node/services/openvpn/session"
"github.com/mysteriumnetwork/node/session"
)

Expand Down Expand Up @@ -71,21 +72,23 @@ func NewManager(

sessionManagerFactory: func(primitives *tls.Primitives, vpnServerIP string) session.Manager {
// TODO: check nodeOptions for --openvpn-transport option
clientConfigGenerator := openvpn.NewClientConfigGenerator(
clientConfigGenerator := openvpn_node.NewClientConfigGenerator(
primitives,
vpnServerIP,
serviceOptions.OpenvpnPort,
serviceOptions.OpenvpnProtocol,
)

serviceConfigProvider := func() (session.ServiceConfiguration, error) {
return clientConfigGenerator(), nil
}
return session.NewManager(
session.ServiceConfigProvider(clientConfigGenerator),
serviceConfigProvider,
&session.UUIDGenerator{},
)
},
vpnServerFactory: func(manager session.Manager, primitives *tls.Primitives, callback state.Callback) openvpn.Process {
// TODO: check nodeOptions for --openvpn-transport option
serverConfigGenerator := openvpn.NewServerConfigGenerator(
serverConfigGenerator := openvpn_node.NewServerConfigGenerator(
nodeOptions.Directories.Runtime,
nodeOptions.Directories.Config,
primitives,
Expand All @@ -96,7 +99,7 @@ func NewManager(
ovpnSessionManager := openvpn_session.NewManager(manager)
sessionValidator := openvpn_session.NewValidator(ovpnSessionManager, identity.NewExtractor())

return openvpn.NewServer(
return openvpn_node.NewServer(
nodeOptions.Openvpn.BinaryPath,
serverConfigGenerator,
auth.NewMiddleware(sessionValidator.Validate, sessionValidator.Cleanup),
Expand Down
18 changes: 16 additions & 2 deletions core/service/manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@
package service

import (
"crypto/x509/pkix"

log "github.com/cihub/seelog"
"github.com/mysteriumnetwork/node/communication"
"github.com/mysteriumnetwork/node/core/ip"
Expand All @@ -28,10 +30,10 @@ import (
"github.com/mysteriumnetwork/node/metadata"
"github.com/mysteriumnetwork/node/nat"
"github.com/mysteriumnetwork/node/openvpn"
openvpn_discovery "github.com/mysteriumnetwork/node/openvpn/discovery"
"github.com/mysteriumnetwork/node/openvpn/middlewares/state"
"github.com/mysteriumnetwork/node/openvpn/tls"
dto_discovery "github.com/mysteriumnetwork/node/service_discovery/dto"
openvpn_discovery "github.com/mysteriumnetwork/node/services/openvpn/discovery"
"github.com/mysteriumnetwork/node/session"
)

Expand Down Expand Up @@ -103,7 +105,19 @@ func (manager *Manager) Start() (err error) {

proposal := openvpn_discovery.NewServiceProposalWithLocation(providerID, providerContact, serviceLocation, manager.protocol)

primitives, err := tls.NewTLSPrimitives(serviceLocation, providerID)
caSubject := pkix.Name{
Country: []string{serviceLocation.Country},
Organization: []string{"Mystermium.network"},
OrganizationalUnit: []string{"Mysterium Team"},
}
serverCertSubject := pkix.Name{
Country: []string{serviceLocation.Country},
Organization: []string{"Mysterium node operator company"},
OrganizationalUnit: []string{"Node operator team"},
CommonName: providerID.Address,
}

primitives, err := tls.NewTLSPrimitives(caSubject, serverCertSubject)
if err != nil {
return err
}
Expand Down
10 changes: 5 additions & 5 deletions openvpn/middlewares/client/bytescount/fake_stats_handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,13 @@

package bytescount

import "github.com/mysteriumnetwork/node/client/stats"

type fakeStatsRecorder struct {
LastSessionStats stats.SessionStats
BytesIn int
BytesOut int
}

func (sender *fakeStatsRecorder) record(sessionStats stats.SessionStats) error {
sender.LastSessionStats = sessionStats
func (sender *fakeStatsRecorder) record(bc Bytecount) error {
sender.BytesIn = bc.BytesIn
sender.BytesOut = bc.BytesOut
return nil
}
12 changes: 8 additions & 4 deletions openvpn/middlewares/client/bytescount/middleware.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,17 @@ import (
"strconv"
"time"

"github.com/mysteriumnetwork/node/client/stats"
"github.com/mysteriumnetwork/node/openvpn/management"
)

// SessionStatsHandler is invoked when middleware receives statistics
type SessionStatsHandler func(stats.SessionStats) error
type SessionStatsHandler func(Bytecount) error

// Bytecount represents the bytecount response
type Bytecount struct {
BytesIn int
BytesOut int
}

const byteCountCommandTemplate = "bytecount %d"

Expand Down Expand Up @@ -72,8 +77,7 @@ func (middleware *middleware) ConsumeLine(line string) (consumed bool, err error
return
}

stats := stats.SessionStats{BytesSent: bytesOut, BytesReceived: bytesIn}
err = middleware.sessionStatsHandler(stats)
err = middleware.sessionStatsHandler(Bytecount{BytesIn: bytesIn, BytesOut: bytesOut})

return
}
4 changes: 2 additions & 2 deletions openvpn/middlewares/client/bytescount/middleware_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ func Test_ConsumeLine(t *testing.T) {
assert.NoError(t, err, test.line)
}
assert.Equal(t, test.expectedConsumed, consumed, test.line)
assert.Equal(t, test.expectedBytesReceived, statsRecorder.LastSessionStats.BytesReceived)
assert.Equal(t, test.expectedBytesSent, statsRecorder.LastSessionStats.BytesSent)
assert.Equal(t, test.expectedBytesReceived, statsRecorder.BytesIn)
assert.Equal(t, test.expectedBytesSent, statsRecorder.BytesOut)
}
}
Loading