deprecated file:// and recommended the use of sqlite3://

pull/73/head
James Batt 4 years ago
parent db06042df2
commit d7cb4a0b86

1
.gitignore vendored

@ -63,3 +63,4 @@ website/yarn-debug.log*
website/yarn-error.log*
website/yarn.lock
__debug_bin

@ -27,7 +27,7 @@ require (
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223 // indirect
github.com/patrickmn/go-cache v2.1.0+incompatible
github.com/pkg/errors v0.9.1
github.com/place1/wg-embed v0.2.0
github.com/place1/wg-embed v0.3.0
github.com/pquerna/cachecontrol v0.0.0-20180517163645-1555304b9b35 // indirect
github.com/rs/cors v1.7.0 // indirect
github.com/sirupsen/logrus v1.6.0

@ -142,6 +142,8 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/place1/wg-embed v0.2.0 h1:JzdDeDDWqzY7w6/JJ/fW+q/Qc7AzI/i1GqyeFNf/HT0=
github.com/place1/wg-embed v0.2.0/go.mod h1:i09dm8AEkurC4oATFxjvyH0+e1pdmtZoNk2FfPupROI=
github.com/place1/wg-embed v0.3.0 h1:n7piTgnp3MgyceBEAD/A7ZiLA4kH8qkqCTVPLBHj6SE=
github.com/place1/wg-embed v0.3.0/go.mod h1:i09dm8AEkurC4oATFxjvyH0+e1pdmtZoNk2FfPupROI=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/pquerna/cachecontrol v0.0.0-20180517163645-1555304b9b35 h1:J9b7z+QKAmPf4YLrFg6oQUotqHQeUNWwkvo7jZp1GLU=
@ -159,6 +161,7 @@ github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1
github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s=
github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.1 h1:2vfRuCMp5sSVIDSqO8oNnWJq7mPa6KVP3iPIwFBuy8A=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=

@ -33,6 +33,7 @@ type AppConfig struct {
// Defaults to memory://
Storage string `yaml:"storage"`
WireGuard struct {
Enabled bool `yaml:"enabled"`
// The network interface name of the WireGuard
// network device.
// Defaults to wg0
@ -119,6 +120,7 @@ func Read() *AppConfig {
config.WireGuard.Port = *wireguardPort
config.VPN.CIDR = "10.44.0.0/24"
config.DisableMetadata = *disableMetadata
config.WireGuard.Enabled = true
config.WireGuard.PrivateKey = *privateKey
config.Storage = *storage
config.VPN.AllowedIPs = []string{"0.0.0.0/0"}

@ -15,13 +15,13 @@ import (
)
type DeviceManager struct {
iface string
wg wgembed.WireGuardInterface
storage storage.Storage
cidr string
}
func New(iface string, s storage.Storage, cidr string) *DeviceManager {
return &DeviceManager{iface, s, cidr}
func New(wg wgembed.WireGuardInterface, s storage.Storage, cidr string) *DeviceManager {
return &DeviceManager{wg, s, cidr}
}
func (d *DeviceManager) StartSync(disableMetadataCollection bool) error {
@ -31,7 +31,7 @@ func (d *DeviceManager) StartSync(disableMetadataCollection bool) error {
return errors.Wrap(err, "failed to list devices")
}
for _, device := range devices {
if err := wgembed.AddPeer(d.iface, device.PublicKey, device.Address); err != nil {
if err := d.wg.AddPeer(device.PublicKey, device.Address); err != nil {
logrus.Warn(errors.Wrapf(err, "failed to sync device '%s' (ignoring)", device.Name))
}
}
@ -69,7 +69,7 @@ func (d *DeviceManager) AddDevice(identity *authsession.Identity, name string, p
return nil, errors.Wrap(err, "failed to save the new device")
}
if err := wgembed.AddPeer(d.iface, publicKey, clientAddr); err != nil {
if err := d.wg.AddPeer(publicKey, clientAddr); err != nil {
return nil, errors.Wrap(err, "unable to provision peer")
}
@ -96,7 +96,7 @@ func (d *DeviceManager) DeleteDevice(user string, name string) error {
if err := d.storage.Delete(device); err != nil {
return err
}
if err := wgembed.RemovePeer(d.iface, device.PublicKey); err != nil {
if err := d.wg.RemovePeer(device.PublicKey); err != nil {
return errors.Wrap(err, "device was removed from storage but failed to be removed from the wireguard interface")
}
return nil

@ -4,7 +4,6 @@ import (
"time"
"github.com/pkg/errors"
"github.com/place1/wg-embed/pkg/wgembed"
"github.com/sirupsen/logrus"
)
@ -21,7 +20,7 @@ func syncMetrics(d *DeviceManager) {
logrus.Warn(errors.Wrap(err, "failed to list devices - metrics cannot be recorded"))
return
}
peers, err := wgembed.ListPeers(d.iface)
peers, err := d.wg.ListPeers()
if err != nil {
logrus.Warn(errors.Wrap(err, "failed to list peers - metrics cannot be recorded"))
return

@ -6,6 +6,8 @@ import (
"math"
"net/http"
"github.com/place1/wg-embed/pkg/wgembed"
grpc_logrus "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus"
"github.com/improbable-eng/grpc-web/go/grpcweb"
"github.com/place1/wg-access-server/internal/config"
@ -18,6 +20,7 @@ import (
type ApiServices struct {
Config *config.AppConfig
DeviceManager *devices.DeviceManager
Wg wgembed.WireGuardInterface
}
func ApiRouter(deps *ApiServices) http.Handler {
@ -32,6 +35,7 @@ func ApiRouter(deps *ApiServices) http.Handler {
// Register GRPC services
proto.RegisterServerServer(server, &ServerService{
Config: deps.Config,
Wg: deps.Wg,
})
proto.RegisterDevicesServer(server, &DeviceService{
DeviceManager: deps.DeviceManager,

@ -17,6 +17,7 @@ import (
type ServerService struct {
Config *config.AppConfig
Wg wgembed.WireGuardInterface
}
func (s *ServerService) Info(ctx context.Context, req *proto.InfoReq) (*proto.InfoRes, error) {
@ -25,7 +26,7 @@ func (s *ServerService) Info(ctx context.Context, req *proto.InfoReq) (*proto.In
return nil, status.Errorf(codes.PermissionDenied, "not authenticated")
}
publicKey, err := wgembed.PublicKey(s.Config.WireGuard.InterfaceName)
publicKey, err := s.Wg.PublicKey()
if err != nil {
ctxlogrus.Extract(ctx).Error(err)
return nil, status.Errorf(codes.Internal, "failed to get public key")

@ -52,6 +52,7 @@ func NewStorage(uri string) (Storage, error) {
logrus.Warn("storing data in memory - devices will not persist between restarts")
return NewMemoryStorage(), nil
case "file":
logrus.Warn("[DEPRECATION NOTICE] using file:// storage is deprecated and will be removed in an upcoming minor release. Please use sqlite3:// for filesystem based storage.")
logrus.Infof("storing data in %s", u.Path)
return NewFileStorage(u.Path), nil
case "postgres":

@ -51,6 +51,15 @@ func TestSqliteStorage(t *testing.T) {
require.IsType(&SQLStorage{}, s)
}
func TestSqliteStorageRelativePath(t *testing.T) {
require := require.New(t)
s, err := NewStorage("sqlite3://sqlite.db")
require.NoError(err)
require.IsType(&SQLStorage{}, s)
}
func TestUnknownStorage(t *testing.T) {
require := require.New(t)

@ -3,6 +3,7 @@ package storage
import (
"fmt"
"net/url"
"path/filepath"
"strings"
"github.com/jinzhu/gorm"
@ -94,7 +95,7 @@ func mysqlconn(u *url.URL) string {
}
func sqlite3conn(u *url.URL) string {
return u.Path
return filepath.Join(u.Host, u.Path)
}
func (s *SQLStorage) Open() error {

@ -27,30 +27,34 @@ func main() {
vpnip := network.ServerVPNIP(conf.VPN.CIDR)
// WireGuard Server
wg, err := wgembed.New(conf.WireGuard.InterfaceName)
if err != nil {
logrus.Fatal(errors.Wrap(err, "failed to create wireguard interface"))
}
defer wg.Close()
wg := wgembed.NewNoOpInterface()
if conf.WireGuard.Enabled {
wgimpl, err := wgembed.New(conf.WireGuard.InterfaceName)
if err != nil {
logrus.Fatal(errors.Wrap(err, "failed to create wireguard interface"))
}
defer wgimpl.Close()
wg = wgimpl
logrus.Infof("starting wireguard server on 0.0.0.0:%d", conf.WireGuard.Port)
logrus.Infof("starting wireguard server on 0.0.0.0:%d", conf.WireGuard.Port)
wgconfig := &wgembed.ConfigFile{
Interface: wgembed.IfaceConfig{
PrivateKey: conf.WireGuard.PrivateKey,
Address: vpnip.String(),
ListenPort: &conf.WireGuard.Port,
},
}
wgconfig := &wgembed.ConfigFile{
Interface: wgembed.IfaceConfig{
PrivateKey: conf.WireGuard.PrivateKey,
Address: vpnip.String(),
ListenPort: &conf.WireGuard.Port,
},
}
if err := wg.LoadConfig(wgconfig); err != nil {
logrus.Fatal(errors.Wrap(err, "failed to load wireguard config"))
}
if err := wg.LoadConfig(wgconfig); err != nil {
logrus.Fatal(errors.Wrap(err, "failed to load wireguard config"))
}
logrus.Infof("wireguard VPN network is %s", conf.VPN.CIDR)
logrus.Infof("wireguard VPN network is %s", conf.VPN.CIDR)
if err := network.ConfigureForwarding(conf.WireGuard.InterfaceName, conf.VPN.GatewayInterface, conf.VPN.CIDR, conf.VPN.AllowedIPs); err != nil {
logrus.Fatal(err)
if err := network.ConfigureForwarding(conf.WireGuard.InterfaceName, conf.VPN.GatewayInterface, conf.VPN.CIDR, conf.VPN.AllowedIPs); err != nil {
logrus.Fatal(err)
}
}
// DNS Server
@ -75,7 +79,7 @@ func main() {
defer storageBackend.Close()
// Services
deviceManager := devices.New(wg.Name(), storageBackend, conf.VPN.CIDR)
deviceManager := devices.New(wg, storageBackend, conf.VPN.CIDR)
if err := deviceManager.StartSync(conf.DisableMetadata); err != nil {
logrus.Fatal(errors.Wrap(err, "failed to sync"))
}
@ -91,7 +95,7 @@ func main() {
if conf.Auth.IsEnabled() {
router.Use(authnz.NewMiddleware(conf.Auth, claimsMiddleware(conf)))
} else {
logrus.Warn("[DEPRECATION NOTICE] using wg-access-server without an admin user is deprecated and will be removed in an upcoming minior release.")
logrus.Warn("[DEPRECATION NOTICE] using wg-access-server without an admin user is deprecated and will be removed in an upcoming minor release.")
router.Use(func(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
next.ServeHTTP(w, r.WithContext(authsession.SetIdentityCtx(r.Context(), &authsession.AuthSession{
@ -111,6 +115,7 @@ func main() {
site.PathPrefix("/api").Handler(services.ApiRouter(&services.ApiServices{
Config: conf,
DeviceManager: deviceManager,
Wg: wg,
}))
// Static website

File diff suppressed because it is too large Load Diff

@ -12,7 +12,7 @@
"@material-ui/icons": "^4.9.1",
"@material-ui/lab": "^4.0.0-alpha.56",
"common-tags": "^1.8.0",
"date-fns": "^2.15.0",
"date-fns": "^2.16.1",
"google-protobuf": "^4.0.0-rc.1",
"mobx": "^5.15.4",
"mobx-react": "^6.2.2",
@ -22,19 +22,19 @@
"react": "^16.13.1",
"react-dom": "^16.13.1",
"react-router-dom": "^5.2.0",
"react-scripts": "3.4.1",
"react-scripts": "3.4.3",
"tweetnacl-ts": "^1.0.3"
},
"devDependencies": {
"@types/common-tags": "^1.8.0",
"@types/numeral": "0.0.28",
"@types/qrcode": "^1.3.4",
"@types/react": "^16.9.43",
"@types/qrcode": "^1.3.5",
"@types/react": "^16.9.50",
"@types/react-dom": "^16.9.8",
"@types/react-router-dom": "^5.1.5",
"grpc-ts-web": "0.1.7",
"prettier": "^2.0.5",
"typescript": "^3.9.7"
"grpc-ts-web": "0.1.8",
"prettier": "^2.1.2",
"typescript": "^4.0.3"
},
"proxy": "http://localhost:8000/api",
"browserslist": {

@ -35,9 +35,7 @@ export class AddDevice extends React.Component<Props> {
error?: string;
@observable
formState = {
name: '',
};
deviceName = '';
@observable
configFile?: string;
@ -51,7 +49,7 @@ export class AddDevice extends React.Component<Props> {
try {
const device = await grpc.devices.addDevice({
name: this.formState.name,
name: this.deviceName,
publicKey,
});
this.props.onAdd();
@ -80,7 +78,7 @@ export class AddDevice extends React.Component<Props> {
};
reset = () => {
this.formState.name = '';
this.deviceName = '';
};
render() {
@ -94,8 +92,8 @@ export class AddDevice extends React.Component<Props> {
<InputLabel htmlFor="device-name">Device Name</InputLabel>
<Input
id="device-name"
value={this.formState.name}
onChange={(event) => (this.formState.name = event.currentTarget.value)}
value={this.deviceName}
onChange={(event) => (this.deviceName = event.currentTarget.value)}
aria-describedby="device-name-text"
/>
<FormHelperText id="device-name-text">{this.error}</FormHelperText>

File diff suppressed because it is too large Load Diff

@ -8,329 +8,353 @@ import * as grpcWeb from 'grpc-web';
import * as googleProtobufWrappers from 'google-protobuf/google/protobuf/wrappers_pb';
export class Server {
private client_ = new grpcWeb.GrpcWebClientBase({
format: 'text',
});
private methodInfoInfo = new grpcWeb.AbstractClientBase.MethodInfo(
InfoRes,
(req: InfoReq) => req.serializeBinary(),
InfoRes.deserializeBinary,
);
constructor(private hostname: string, private defaultMetadata?: () => grpcWeb.Metadata) {}
info(req: InfoReq.AsObject, metadata?: grpcWeb.Metadata): Promise<InfoRes.AsObject> {
return new Promise((resolve, reject) => {
const message = InfoReqFromObject(req);
this.client_.rpcCall(
this.hostname + '/proto.Server/Info',
message,
Object.assign({}, this.defaultMetadata ? this.defaultMetadata() : {}, metadata),
this.methodInfoInfo,
(err: grpcWeb.Error, res: InfoRes) => {
if (err) {
reject(err);
} else {
resolve(res.toObject());
}
},
);
});
}
private client_ = new grpcWeb.GrpcWebClientBase({
format: 'text',
});
private methodInfoInfo = new grpcWeb.MethodDescriptor<InfoReq, InfoRes>(
"Info",
null,
InfoReq,
InfoRes,
(req: InfoReq) => req.serializeBinary(),
InfoRes.deserializeBinary
);
constructor(
private hostname: string,
private defaultMetadata?: () => grpcWeb.Metadata,
) { }
info(req: InfoReq.AsObject, metadata?: grpcWeb.Metadata): Promise<InfoRes.AsObject> {
return new Promise((resolve, reject) => {
const message = InfoReqFromObject(req);
this.client_.rpcCall(
this.hostname + '/proto.Server/Info',
message,
Object.assign({}, this.defaultMetadata ? this.defaultMetadata() : {}, metadata),
this.methodInfoInfo,
(err: grpcWeb.Error, res: InfoRes) => {
if (err) {
reject(err);
} else {
resolve(res.toObject());
}
},
);
});
}
}
export declare namespace InfoReq {
export type AsObject = {};
export type AsObject = {
}
}
export class InfoReq extends jspb.Message {
private static repeatedFields_ = [];
constructor(data?: jspb.Message.MessageArray) {
super();
jspb.Message.initialize(this, data || [], 0, -1, InfoReq.repeatedFields_, null);
}
serializeBinary(): Uint8Array {
const writer = new jspb.BinaryWriter();
InfoReq.serializeBinaryToWriter(this, writer);
return writer.getResultBuffer();
}
toObject(): InfoReq.AsObject {
let f: any;
return {};
}
static serializeBinaryToWriter(message: InfoReq, writer: jspb.BinaryWriter): void {}
static deserializeBinary(bytes: Uint8Array): InfoReq {
var reader = new jspb.BinaryReader(bytes);
var message = new InfoReq();
return InfoReq.deserializeBinaryFromReader(message, reader);
}
static deserializeBinaryFromReader(message: InfoReq, reader: jspb.BinaryReader): InfoReq {
while (reader.nextField()) {
if (reader.isEndGroup()) {
break;
}
const field = reader.getFieldNumber();
switch (field) {
default:
reader.skipField();
break;
}
}
return message;
}
private static repeatedFields_ = [
];
constructor(data?: jspb.Message.MessageArray) {
super();
jspb.Message.initialize(this, data || [], 0, -1, InfoReq.repeatedFields_, null);
}
serializeBinary(): Uint8Array {
const writer = new jspb.BinaryWriter();
InfoReq.serializeBinaryToWriter(this, writer);
return writer.getResultBuffer();
}
toObject(): InfoReq.AsObject {
let f: any;
return {
};
}
static serializeBinaryToWriter(message: InfoReq, writer: jspb.BinaryWriter): void {
}
static deserializeBinary(bytes: Uint8Array): InfoReq {
var reader = new jspb.BinaryReader(bytes);
var message = new InfoReq();
return InfoReq.deserializeBinaryFromReader(message, reader);
}
static deserializeBinaryFromReader(message: InfoReq, reader: jspb.BinaryReader): InfoReq {
while (reader.nextField()) {
if (reader.isEndGroup()) {
break;
}
const field = reader.getFieldNumber();
switch (field) {
default:
reader.skipField();
break;
}
}
return message;
}
}
export declare namespace InfoRes {
export type AsObject = {
publicKey: string;
host?: googleProtobufWrappers.StringValue.AsObject;
port: number;
hostVpnIp: string;
metadataEnabled: boolean;
isAdmin: boolean;
allowedIps: string;
dnsEnabled: boolean;
dnsAddress: string;
};
export type AsObject = {
publicKey: string,
host?: googleProtobufWrappers.StringValue.AsObject,
port: number,
hostVpnIp: string,
metadataEnabled: boolean,
isAdmin: boolean,
allowedIps: string,
dnsEnabled: boolean,
dnsAddress: string,
}
}
export class InfoRes extends jspb.Message {
private static repeatedFields_ = [];
constructor(data?: jspb.Message.MessageArray) {
super();
jspb.Message.initialize(this, data || [], 0, -1, InfoRes.repeatedFields_, null);
}
getPublicKey(): string {
return jspb.Message.getFieldWithDefault(this, 1, '');
}
setPublicKey(value: string): void {
(jspb.Message as any).setProto3StringField(this, 1, value);
}
getHost(): googleProtobufWrappers.StringValue {
return jspb.Message.getWrapperField(this, googleProtobufWrappers.StringValue, 2);
}
setHost(value?: googleProtobufWrappers.StringValue): void {
(jspb.Message as any).setWrapperField(this, 2, value);
}
getPort(): number {
return jspb.Message.getFieldWithDefault(this, 3, 0);
}
setPort(value: number): void {
(jspb.Message as any).setProto3IntField(this, 3, value);
}
getHostVpnIp(): string {
return jspb.Message.getFieldWithDefault(this, 4, '');
}
setHostVpnIp(value: string): void {
(jspb.Message as any).setProto3StringField(this, 4, value);
}
getMetadataEnabled(): boolean {
return jspb.Message.getFieldWithDefault(this, 5, false);
}
setMetadataEnabled(value: boolean): void {
(jspb.Message as any).setProto3BooleanField(this, 5, value);
}
getIsAdmin(): boolean {
return jspb.Message.getFieldWithDefault(this, 6, false);
}
setIsAdmin(value: boolean): void {
(jspb.Message as any).setProto3BooleanField(this, 6, value);
}
getAllowedIps(): string {
return jspb.Message.getFieldWithDefault(this, 7, '');
}
setAllowedIps(value: string): void {
(jspb.Message as any).setProto3StringField(this, 7, value);
}
getDnsEnabled(): boolean {
return jspb.Message.getFieldWithDefault(this, 8, false);
}
setDnsEnabled(value: boolean): void {
(jspb.Message as any).setProto3BooleanField(this, 8, value);
}
getDnsAddress(): string {
return jspb.Message.getFieldWithDefault(this, 9, '');
}
setDnsAddress(value: string): void {
(jspb.Message as any).setProto3StringField(this, 9, value);
}
serializeBinary(): Uint8Array {
const writer = new jspb.BinaryWriter();
InfoRes.serializeBinaryToWriter(this, writer);
return writer.getResultBuffer();
}
toObject(): InfoRes.AsObject {
let f: any;
return {
publicKey: this.getPublicKey(),
host: (f = this.getHost()) && f.toObject(),
port: this.getPort(),
hostVpnIp: this.getHostVpnIp(),
metadataEnabled: this.getMetadataEnabled(),
isAdmin: this.getIsAdmin(),
allowedIps: this.getAllowedIps(),
dnsEnabled: this.getDnsEnabled(),
dnsAddress: this.getDnsAddress(),
};
}
static serializeBinaryToWriter(message: InfoRes, writer: jspb.BinaryWriter): void {
const field1 = message.getPublicKey();
if (field1.length > 0) {
writer.writeString(1, field1);
}
const field2 = message.getHost();
if (field2 != null) {
writer.writeMessage(2, field2, googleProtobufWrappers.StringValue.serializeBinaryToWriter);
}
const field3 = message.getPort();
if (field3 != 0) {
writer.writeInt32(3, field3);
}
const field4 = message.getHostVpnIp();
if (field4.length > 0) {
writer.writeString(4, field4);
}
const field5 = message.getMetadataEnabled();
if (field5 != false) {
writer.writeBool(5, field5);
}
const field6 = message.getIsAdmin();
if (field6 != false) {
writer.writeBool(6, field6);
}
const field7 = message.getAllowedIps();
if (field7.length > 0) {
writer.writeString(7, field7);
}
const field8 = message.getDnsEnabled();
if (field8 != false) {
writer.writeBool(8, field8);
}
const field9 = message.getDnsAddress();
if (field9.length > 0) {
writer.writeString(9, field9);
}
}
static deserializeBinary(bytes: Uint8Array): InfoRes {
var reader = new jspb.BinaryReader(bytes);
var message = new InfoRes();
return InfoRes.deserializeBinaryFromReader(message, reader);
}
static deserializeBinaryFromReader(message: InfoRes, reader: jspb.BinaryReader): InfoRes {
while (reader.nextField()) {
if (reader.isEndGroup()) {
break;
}
const field = reader.getFieldNumber();
switch (field) {
case 1:
const field1 = reader.readString();
message.setPublicKey(field1);
break;
case 2:
const field2 = new googleProtobufWrappers.StringValue();
reader.readMessage(field2, googleProtobufWrappers.StringValue.deserializeBinaryFromReader);
message.setHost(field2);
break;
case 3:
const field3 = reader.readInt32();
message.setPort(field3);
break;
case 4:
const field4 = reader.readString();
message.setHostVpnIp(field4);
break;
case 5:
const field5 = reader.readBool();
message.setMetadataEnabled(field5);
break;
case 6:
const field6 = reader.readBool();
message.setIsAdmin(field6);
break;
case 7:
const field7 = reader.readString();
message.setAllowedIps(field7);
break;
case 8:
const field8 = reader.readBool();
message.setDnsEnabled(field8);
break;
case 9:
const field9 = reader.readString();
message.setDnsAddress(field9);
break;
default:
reader.skipField();
break;
}
}
return message;
}
private static repeatedFields_ = [
];
constructor(data?: jspb.Message.MessageArray) {
super();
jspb.Message.initialize(this, data || [], 0, -1, InfoRes.repeatedFields_, null);
}
getPublicKey(): string {
return jspb.Message.getFieldWithDefault(this, 1, "");
}
setPublicKey(value: string): void {
(jspb.Message as any).setProto3StringField(this, 1, value);
}
getHost(): googleProtobufWrappers.StringValue {
return jspb.Message.getWrapperField(this, googleProtobufWrappers.StringValue, 2);
}
setHost(value?: googleProtobufWrappers.StringValue): void {
(jspb.Message as any).setWrapperField(this, 2, value);
}
getPort(): number {
return jspb.Message.getFieldWithDefault(this, 3, 0);
}
setPort(value: number): void {
(jspb.Message as any).setProto3IntField(this, 3, value);
}
getHostVpnIp(): string {
return jspb.Message.getFieldWithDefault(this, 4, "");
}
setHostVpnIp(value: string): void {
(jspb.Message as any).setProto3StringField(this, 4, value);
}
getMetadataEnabled(): boolean {
return jspb.Message.getFieldWithDefault(this, 5, false);
}
setMetadataEnabled(value: boolean): void {
(jspb.Message as any).setProto3BooleanField(this, 5, value);
}
getIsAdmin(): boolean {
return jspb.Message.getFieldWithDefault(this, 6, false);
}
setIsAdmin(value: boolean): void {
(jspb.Message as any).setProto3BooleanField(this, 6, value);
}
getAllowedIps(): string {
return jspb.Message.getFieldWithDefault(this, 7, "");
}
setAllowedIps(value: string): void {
(jspb.Message as any).setProto3StringField(this, 7, value);
}
getDnsEnabled(): boolean {
return jspb.Message.getFieldWithDefault(this, 8, false);
}
setDnsEnabled(value: boolean): void {
(jspb.Message as any).setProto3BooleanField(this, 8, value);
}
getDnsAddress(): string {
return jspb.Message.getFieldWithDefault(this, 9, "");
}
setDnsAddress(value: string): void {
(jspb.Message as any).setProto3StringField(this, 9, value);
}
serializeBinary(): Uint8Array {
const writer = new jspb.BinaryWriter();
InfoRes.serializeBinaryToWriter(this, writer);
return writer.getResultBuffer();
}
toObject(): InfoRes.AsObject {
let f: any;
return {publicKey: this.getPublicKey(),
host: (f = this.getHost()) && f.toObject(),
port: this.getPort(),
hostVpnIp: this.getHostVpnIp(),
metadataEnabled: this.getMetadataEnabled(),
isAdmin: this.getIsAdmin(),
allowedIps: this.getAllowedIps(),
dnsEnabled: this.getDnsEnabled(),
dnsAddress: this.getDnsAddress(),
};
}
static serializeBinaryToWriter(message: InfoRes, writer: jspb.BinaryWriter): void {
const field1 = message.getPublicKey();
if (field1.length > 0) {
writer.writeString(1, field1);
}
const field2 = message.getHost();
if (field2 != null) {
writer.writeMessage(2, field2, googleProtobufWrappers.StringValue.serializeBinaryToWriter);
}
const field3 = message.getPort();
if (field3 != 0) {
writer.writeInt32(3, field3);
}
const field4 = message.getHostVpnIp();
if (field4.length > 0) {
writer.writeString(4, field4);
}
const field5 = message.getMetadataEnabled();
if (field5 != false) {
writer.writeBool(5, field5);
}
const field6 = message.getIsAdmin();
if (field6 != false) {
writer.writeBool(6, field6);
}
const field7 = message.getAllowedIps();
if (field7.length > 0) {
writer.writeString(7, field7);
}
const field8 = message.getDnsEnabled();
if (field8 != false) {
writer.writeBool(8, field8);
}
const field9 = message.getDnsAddress();
if (field9.length > 0) {
writer.writeString(9, field9);
}
}
static deserializeBinary(bytes: Uint8Array): InfoRes {
var reader = new jspb.BinaryReader(bytes);
var message = new InfoRes();
return InfoRes.deserializeBinaryFromReader(message, reader);
}
static deserializeBinaryFromReader(message: InfoRes, reader: jspb.BinaryReader): InfoRes {
while (reader.nextField()) {
if (reader.isEndGroup()) {
break;
}
const field = reader.getFieldNumber();
switch (field) {
case 1:
const field1 = reader.readString()
message.setPublicKey(field1);
break;
case 2:
const field2 = new googleProtobufWrappers.StringValue();
reader.readMessage(field2, googleProtobufWrappers.StringValue.deserializeBinaryFromReader);
message.setHost(field2);
break;
case 3:
const field3 = reader.readInt32()
message.setPort(field3);
break;
case 4:
const field4 = reader.readString()
message.setHostVpnIp(field4);
break;
case 5:
const field5 = reader.readBool()
message.setMetadataEnabled(field5);
break;
case 6:
const field6 = reader.readBool()
message.setIsAdmin(field6);
break;
case 7:
const field7 = reader.readString()
message.setAllowedIps(field7);
break;
case 8:
const field8 = reader.readBool()
message.setDnsEnabled(field8);
break;
case 9:
const field9 = reader.readString()
message.setDnsAddress(field9);
break;
default:
reader.skipField();
break;
}
}
return message;
}
}
function InfoReqFromObject(obj: InfoReq.AsObject | undefined): InfoReq | undefined {
if (obj === undefined) {
return undefined;
}
const message = new InfoReq();
return message;
if (obj === undefined) {
return undefined;
}
const message = new InfoReq();
return message;
}
function InfoResFromObject(obj: InfoRes.AsObject | undefined): InfoRes | undefined {
if (obj === undefined) {
return undefined;
}
const message = new InfoRes();
message.setPublicKey(obj.publicKey);
message.setHost(StringValueFromObject(obj.host));
message.setPort(obj.port);
message.setHostVpnIp(obj.hostVpnIp);
message.setMetadataEnabled(obj.metadataEnabled);
message.setIsAdmin(obj.isAdmin);
message.setAllowedIps(obj.allowedIps);
message.setDnsEnabled(obj.dnsEnabled);
message.setDnsAddress(obj.dnsAddress);
return message;
if (obj === undefined) {
return undefined;
}
const message = new InfoRes();
message.setPublicKey(obj.publicKey);
message.setHost(StringValueFromObject(obj.host));
message.setPort(obj.port);
message.setHostVpnIp(obj.hostVpnIp);
message.setMetadataEnabled(obj.metadataEnabled);
message.setIsAdmin(obj.isAdmin);
message.setAllowedIps(obj.allowedIps);
message.setDnsEnabled(obj.dnsEnabled);
message.setDnsAddress(obj.dnsAddress);
return message;
}
function StringValueFromObject(
obj: googleProtobufWrappers.StringValue.AsObject | undefined,
): googleProtobufWrappers.StringValue | undefined {
if (obj === undefined) {
return undefined;
}
const message = new googleProtobufWrappers.StringValue();
message.setValue(obj.value);
return message;
function StringValueFromObject(obj: googleProtobufWrappers.StringValue.AsObject | undefined): googleProtobufWrappers.StringValue | undefined {
if (obj === undefined) {
return undefined;
}
const message = new googleProtobufWrappers.StringValue();
message.setValue(obj.value);
return message;
}

Loading…
Cancel
Save