Skip to content

Commit daf4f6c

Browse files
committed
Merge branch 'master' into v2
2 parents 6c16c4a + 558c3bd commit daf4f6c

4 files changed

Lines changed: 85 additions & 6 deletions

File tree

cmd/certificate-generator/main.go

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ import (
1212

1313
"github.com/plgd-dev/kit/security/generateCertificate"
1414

15-
"github.com/plgd-dev/kit/security"
1615
flags "github.com/jessevdk/go-flags"
16+
"github.com/plgd-dev/kit/security"
1717
)
1818

1919
type Options struct {
@@ -22,10 +22,12 @@ type Options struct {
2222
GenerateIntermediateCA bool `long:"generateIntermediateCA"`
2323
GenerateCert bool `long:"generateCertificate"`
2424
GenerateIdentity string `long:"generateIdentityCertificate" description:"deviceID"`
25+
GenerateIdentityCsr string `long:"generateIdentityCsr" description:"deviceID"`
2526
} `group:"Command" namespace:"cmd"`
2627
Certificate generateCertificate.Configuration `group:"Certificate" namespace:"cert"`
2728
OutCert string `long:"outCert" default:"cert.pem"`
2829
OutKey string `long:"outKey" default:"cert.key"`
30+
OutCsr string `long:"outCsr" default:"req.csr"`
2931
SignerCert string `long:"signerCert"`
3032
SignerKey string `long:"signerKey"`
3133
}
@@ -60,6 +62,8 @@ func main() {
6062
if err != nil {
6163
log.Fatal(err)
6264
}
65+
WriteCertOut(opts, cert)
66+
WritePrivateKey(opts, priv)
6367
case opts.Command.GenerateIntermediateCA:
6468
signerCert, err := security.LoadX509(opts.SignerCert)
6569
if err != nil {
@@ -73,6 +77,8 @@ func main() {
7377
if err != nil {
7478
log.Fatal(err)
7579
}
80+
WriteCertOut(opts, cert)
81+
WritePrivateKey(opts, priv)
7682
case opts.Command.GenerateCert:
7783
signerCert, err := security.LoadX509(opts.SignerCert)
7884
if err != nil {
@@ -86,6 +92,8 @@ func main() {
8692
if err != nil {
8793
log.Fatal(err)
8894
}
95+
WriteCertOut(opts, cert)
96+
WritePrivateKey(opts, priv)
8997
case opts.Command.GenerateIdentity != "":
9098
signerCert, err := security.LoadX509(opts.SignerCert)
9199
if err != nil {
@@ -99,12 +107,23 @@ func main() {
99107
if err != nil {
100108
log.Fatal(err)
101109
}
110+
WriteCertOut(opts, cert)
111+
WritePrivateKey(opts, priv)
112+
case opts.Command.GenerateIdentityCsr != "":
113+
csr, err := generateCertificate.GenerateIdentityCSR(opts.Certificate, opts.Command.GenerateIdentityCsr, priv)
114+
if err != nil {
115+
log.Fatal(err)
116+
}
117+
WritePrivateKey(opts, priv)
118+
WriteCsrOut(opts, csr)
102119
default:
103120
fmt.Println("invalid command")
104121
parser.WriteHelp(os.Stdout)
105122
os.Exit(2)
106123
}
124+
}
107125

126+
func WriteCertOut(opts Options, cert []byte) {
108127
certOut, err := os.Create(opts.OutCert)
109128
if err != nil {
110129
log.Fatalf("failed to open %v for writing: %s", opts.OutCert, err)
@@ -116,7 +135,23 @@ func main() {
116135
if err := certOut.Close(); err != nil {
117136
log.Fatalf("error closing %v: %s", opts.OutCert, err)
118137
}
138+
}
139+
140+
func WriteCsrOut(opts Options, csr []byte) {
141+
csrOut, err := os.Create(opts.OutCsr)
142+
if err != nil {
143+
log.Fatalf("failed to open %v for writing: %s", opts.OutCsr, err)
144+
}
145+
_, err = csrOut.Write(csr)
146+
if err != nil {
147+
log.Fatalf("failed to write %v: %s", opts.OutCsr, err)
148+
}
149+
if err := csrOut.Close(); err != nil {
150+
log.Fatalf("error closing %v: %s", opts.OutCert, err)
151+
}
152+
}
119153

154+
func WritePrivateKey(opts Options, priv *ecdsa.PrivateKey) {
120155
privBlock, err := pemBlockForKey(priv)
121156
if err != nil {
122157
log.Fatalf("failed to encode priv key %v for writing: %v", opts.OutKey, err)
@@ -134,3 +169,4 @@ func main() {
134169
log.Fatalf("error closing %v: %s", opts.OutKey, err)
135170
}
136171
}
172+

net/addr.go

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -60,11 +60,7 @@ func (a Addr) String() string {
6060

6161
// URL formats the scheme with address and with the optional port.
6262
func (a Addr) URL() string {
63-
u := url.URL{
64-
Scheme: a.scheme,
65-
Host: a.String(),
66-
}
67-
return u.String()
63+
return a.scheme + "://" + a.String()
6864
}
6965

7066
// RemovePort sets the zero value.
@@ -98,3 +94,14 @@ func (a Addr) RemoveScheme() Addr {
9894
func (a Addr) GetScheme() string {
9995
return a.scheme
10096
}
97+
98+
// GetHostname returns the hostname
99+
func (a Addr) GetHostname() string {
100+
return a.hostname
101+
}
102+
103+
// SetHostname sets hostname
104+
func (a Addr) SetHostname(hostname string) Addr {
105+
a.hostname = hostname
106+
return a
107+
}

net/addr_test.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package net
2+
3+
import (
4+
"testing"
5+
6+
"github.com/stretchr/testify/assert"
7+
"github.com/stretchr/testify/require"
8+
)
9+
10+
func TestParseString(t *testing.T) {
11+
ip6 := "[fe80::6262:3c03:5549:6ad6%eno1]:34786"
12+
schema := "coap"
13+
v, err := ParseString(schema, ip6)
14+
require.NoError(t, err)
15+
assert.Equal(t, schema+"://"+ip6, v.URL())
16+
}

net/coap/client.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -433,6 +433,7 @@ type dialOptions struct {
433433
errors func(err error)
434434
maxMessageSize int
435435
dialer *net.Dialer
436+
heartBeat time.Duration
436437
}
437438

438439
type DialOptionFunc func(dialOptions) dialOptions
@@ -484,6 +485,13 @@ func WithDialer(dialer *net.Dialer) DialOptionFunc {
484485
}
485486
}
486487

488+
func WithHeartBeat(heartBeat time.Duration) DialOptionFunc {
489+
return func(c dialOptions) dialOptions {
490+
c.heartBeat = heartBeat
491+
return c
492+
}
493+
}
494+
487495
func DialUDP(ctx context.Context, addr string, opts ...DialOptionFunc) (*ClientCloseHandler, error) {
488496
h := NewOnCloseHandler()
489497
var cfg dialOptions
@@ -503,6 +511,9 @@ func DialUDP(ctx context.Context, addr string, opts ...DialOptionFunc) (*ClientC
503511
if cfg.maxMessageSize > 0 {
504512
dopts = append(dopts, udp.WithMaxMessageSize(cfg.maxMessageSize))
505513
}
514+
if cfg.heartBeat > 0 {
515+
dopts = append(dopts, udp.WithHeartBeat(cfg.heartBeat))
516+
}
506517
if cfg.dialer != nil {
507518
dopts = append(dopts, udp.WithDialer(cfg.dialer))
508519
} else {
@@ -548,6 +559,9 @@ func DialTCP(ctx context.Context, addr string, opts ...DialOptionFunc) (*ClientC
548559
if cfg.maxMessageSize > 0 {
549560
dopts = append(dopts, tcp.WithMaxMessageSize(cfg.maxMessageSize))
550561
}
562+
if cfg.heartBeat > 0 {
563+
dopts = append(dopts, tcp.WithHeartBeat(cfg.heartBeat))
564+
}
551565
if cfg.dialer != nil {
552566
dopts = append(dopts, tcp.WithDialer(cfg.dialer))
553567
} else {
@@ -630,6 +644,9 @@ func DialTCPSecure(ctx context.Context, addr string, tlsCfg *tls.Config, opts ..
630644
if cfg.maxMessageSize > 0 {
631645
dopts = append(dopts, tcp.WithMaxMessageSize(cfg.maxMessageSize))
632646
}
647+
if cfg.heartBeat > 0 {
648+
dopts = append(dopts, tcp.WithHeartBeat(cfg.heartBeat))
649+
}
633650
if cfg.dialer != nil {
634651
dopts = append(dopts, tcp.WithDialer(cfg.dialer))
635652
} else {
@@ -676,6 +693,9 @@ func DialUDPSecure(ctx context.Context, addr string, dtlsCfg *piondtls.Config, o
676693
if cfg.maxMessageSize > 0 {
677694
dopts = append(dopts, dtls.WithMaxMessageSize(cfg.maxMessageSize))
678695
}
696+
if cfg.heartBeat > 0 {
697+
dopts = append(dopts, dtls.WithHeartBeat(cfg.heartBeat))
698+
}
679699
if cfg.dialer != nil {
680700
dopts = append(dopts, dtls.WithDialer(cfg.dialer))
681701
} else {

0 commit comments

Comments
 (0)