Skip to content

Commit 369bd3f

Browse files
authored
Merge branch 'dev' into feat/tls
2 parents 285de31 + 38d6f57 commit 369bd3f

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+1435
-700
lines changed
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
---
2+
name: golangci-lint
3+
on:
4+
push:
5+
paths:
6+
- "go.sum"
7+
- "go.mod"
8+
- "**.go"
9+
- ".github/workflows/golangci-lint.yml"
10+
- ".golangci.yml"
11+
pull_request:
12+
13+
permissions: # added using https://github.com/step-security/secure-repo
14+
contents: read
15+
16+
jobs:
17+
golangci:
18+
permissions:
19+
contents: read # for actions/checkout to fetch code
20+
pull-requests: read # for golangci/golangci-lint-action to fetch pull requests
21+
name: lint
22+
runs-on: ubuntu-latest
23+
steps:
24+
- name: Checkout repository
25+
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
26+
- name: Install Go
27+
uses: actions/setup-go@41dfa10bad2bb2ae585af6ee5bb4d7d973ad74ed # v5.1.0
28+
with:
29+
go-version: 1.23.x
30+
- name: Lint
31+
uses: golangci/golangci-lint-action@971e284b6050e8a5849b72094c50ab08da042db8 # v6.1.1
32+
with:
33+
args: --verbose
34+
version: v1.62.0

.golangci.yml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
---
2+
linters:
3+
enable:
4+
# - goimports
5+
# - misspell
6+
# - revive
7+
8+
issues:
9+
exclude-rules:
10+
- path: _test.go
11+
linters:
12+
- errcheck

block_device.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package kvm
33
import (
44
"context"
55
"errors"
6-
"log"
76
"net"
87
"os"
98
"time"
@@ -94,7 +93,8 @@ func (d *NBDDevice) Start() error {
9493
// Remove the socket file if it already exists
9594
if _, err := os.Stat(nbdSocketPath); err == nil {
9695
if err := os.Remove(nbdSocketPath); err != nil {
97-
log.Fatalf("Failed to remove existing socket file %s: %v", nbdSocketPath, err)
96+
logger.Errorf("Failed to remove existing socket file %s: %v", nbdSocketPath, err)
97+
os.Exit(1)
9898
}
9999
}
100100

@@ -134,22 +134,22 @@ func (d *NBDDevice) runServerConn() {
134134
MaximumBlockSize: uint32(16 * 1024),
135135
SupportsMultiConn: false,
136136
})
137-
log.Println("nbd server exited:", err)
137+
logger.Infof("nbd server exited: %v", err)
138138
}
139139

140140
func (d *NBDDevice) runClientConn() {
141141
err := client.Connect(d.clientConn, d.dev, &client.Options{
142142
ExportName: "jetkvm",
143143
BlockSize: uint32(4 * 1024),
144144
})
145-
log.Println("nbd client exited:", err)
145+
logger.Infof("nbd client exited: %v", err)
146146
}
147147

148148
func (d *NBDDevice) Close() {
149149
if d.dev != nil {
150150
err := client.Disconnect(d.dev)
151151
if err != nil {
152-
log.Println("error disconnecting nbd client:", err)
152+
logger.Warnf("error disconnecting nbd client: %v", err)
153153
}
154154
_ = d.dev.Close()
155155
}

cloud.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,8 +150,8 @@ func runWebsocketClient() error {
150150
if err != nil {
151151
return err
152152
}
153-
defer c.CloseNow()
154-
cloudLogger.Infof("websocket connected to %s", wsURL.String())
153+
defer c.CloseNow() //nolint:errcheck
154+
cloudLogger.Infof("websocket connected to %s", wsURL)
155155
runCtx, cancelRun := context.WithCancel(context.Background())
156156
defer cancelRun()
157157
go func() {

cmd/main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package main
22

33
import (
4-
"kvm"
4+
"github.com/jetkvm/kvm"
55
)
66

77
func main() {

config.go

Lines changed: 32 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -5,40 +5,35 @@ import (
55
"fmt"
66
"os"
77
"sync"
8+
9+
"github.com/jetkvm/kvm/internal/usbgadget"
810
)
911

1012
type WakeOnLanDevice struct {
1113
Name string `json:"name"`
1214
MacAddress string `json:"macAddress"`
1315
}
1416

15-
type UsbConfig struct {
16-
VendorId string `json:"vendor_id"`
17-
ProductId string `json:"product_id"`
18-
SerialNumber string `json:"serial_number"`
19-
Manufacturer string `json:"manufacturer"`
20-
Product string `json:"product"`
21-
}
22-
2317
type Config struct {
24-
CloudURL string `json:"cloud_url"`
25-
CloudAppURL string `json:"cloud_app_url"`
26-
CloudToken string `json:"cloud_token"`
27-
GoogleIdentity string `json:"google_identity"`
28-
JigglerEnabled bool `json:"jiggler_enabled"`
29-
AutoUpdateEnabled bool `json:"auto_update_enabled"`
30-
IncludePreRelease bool `json:"include_pre_release"`
31-
HashedPassword string `json:"hashed_password"`
32-
LocalAuthToken string `json:"local_auth_token"`
33-
LocalAuthMode string `json:"localAuthMode"` //TODO: fix it with migration
34-
WakeOnLanDevices []WakeOnLanDevice `json:"wake_on_lan_devices"`
35-
EdidString string `json:"hdmi_edid_string"`
36-
ActiveExtension string `json:"active_extension"`
37-
DisplayMaxBrightness int `json:"display_max_brightness"`
38-
DisplayDimAfterSec int `json:"display_dim_after_sec"`
39-
DisplayOffAfterSec int `json:"display_off_after_sec"`
40-
TLSMode string `json:"tls_mode"`
41-
UsbConfig *UsbConfig `json:"usb_config"`
18+
CloudURL string `json:"cloud_url"`
19+
CloudAppURL string `json:"cloud_app_url"`
20+
CloudToken string `json:"cloud_token"`
21+
GoogleIdentity string `json:"google_identity"`
22+
JigglerEnabled bool `json:"jiggler_enabled"`
23+
AutoUpdateEnabled bool `json:"auto_update_enabled"`
24+
IncludePreRelease bool `json:"include_pre_release"`
25+
HashedPassword string `json:"hashed_password"`
26+
LocalAuthToken string `json:"local_auth_token"`
27+
LocalAuthMode string `json:"localAuthMode"` //TODO: fix it with migration
28+
WakeOnLanDevices []WakeOnLanDevice `json:"wake_on_lan_devices"`
29+
EdidString string `json:"hdmi_edid_string"`
30+
ActiveExtension string `json:"active_extension"`
31+
DisplayMaxBrightness int `json:"display_max_brightness"`
32+
DisplayDimAfterSec int `json:"display_dim_after_sec"`
33+
DisplayOffAfterSec int `json:"display_off_after_sec"`
34+
TLSMode string `json:"tls_mode"`
35+
UsbConfig *usbgadget.Config `json:"usb_config"`
36+
UsbDevices *usbgadget.Devices `json:"usb_devices"`
4237
}
4338

4439
const configPath = "/userdata/kvm_config.json"
@@ -52,13 +47,19 @@ var defaultConfig = &Config{
5247
DisplayDimAfterSec: 120, // 2 minutes
5348
DisplayOffAfterSec: 1800, // 30 minutes
5449
TLSMode: "",
55-
UsbConfig: &UsbConfig{
50+
UsbConfig: &usbgadget.Config{
5651
VendorId: "0x1d6b", //The Linux Foundation
5752
ProductId: "0x0104", //Multifunction Composite Gadget
5853
SerialNumber: "",
5954
Manufacturer: "JetKVM",
6055
Product: "USB Emulation Device",
6156
},
57+
UsbDevices: &usbgadget.Devices{
58+
AbsoluteMouse: true,
59+
RelativeMouse: true,
60+
Keyboard: true,
61+
MassStorage: true,
62+
},
6263
}
6364

6465
var (
@@ -97,6 +98,10 @@ func LoadConfig() {
9798
loadedConfig.UsbConfig = defaultConfig.UsbConfig
9899
}
99100

101+
if loadedConfig.UsbDevices == nil {
102+
loadedConfig.UsbDevices = defaultConfig.UsbDevices
103+
}
104+
100105
config = &loadedConfig
101106
}
102107

display.go

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package kvm
33
import (
44
"errors"
55
"fmt"
6-
"log"
76
"os"
87
"strconv"
98
"time"
@@ -25,7 +24,7 @@ const (
2524
func switchToScreen(screen string) {
2625
_, err := CallCtrlAction("lv_scr_load", map[string]interface{}{"obj": screen})
2726
if err != nil {
28-
log.Printf("failed to switch to screen %s: %v", screen, err)
27+
logger.Warnf("failed to switch to screen %s: %v", screen, err)
2928
return
3029
}
3130
currentScreen = screen
@@ -41,7 +40,7 @@ func updateLabelIfChanged(objName string, newText string) {
4140
}
4241

4342
func switchToScreenIfDifferent(screenName string) {
44-
fmt.Println("switching screen from", currentScreen, screenName)
43+
logger.Infof("switching screen from %s to %s", currentScreen, screenName)
4544
if currentScreen != screenName {
4645
switchToScreen(screenName)
4746
}
@@ -75,12 +74,12 @@ var displayInited = false
7574

7675
func requestDisplayUpdate() {
7776
if !displayInited {
78-
fmt.Println("display not inited, skipping updates")
77+
logger.Info("display not inited, skipping updates")
7978
return
8079
}
8180
go func() {
8281
wakeDisplay(false)
83-
fmt.Println("display updating........................")
82+
logger.Info("display updating")
8483
//TODO: only run once regardless how many pending updates
8584
updateDisplay()
8685
}()
@@ -119,7 +118,7 @@ func setDisplayBrightness(brightness int) error {
119118
return err
120119
}
121120

122-
fmt.Printf("display: set brightness to %v\n", brightness)
121+
logger.Infof("display: set brightness to %v", brightness)
123122
return nil
124123
}
125124

@@ -128,7 +127,7 @@ func setDisplayBrightness(brightness int) error {
128127
func tick_displayDim() {
129128
err := setDisplayBrightness(config.DisplayMaxBrightness / 2)
130129
if err != nil {
131-
fmt.Printf("display: failed to dim display: %s\n", err)
130+
logger.Warnf("display: failed to dim display: %s", err)
132131
}
133132

134133
dimTicker.Stop()
@@ -141,7 +140,7 @@ func tick_displayDim() {
141140
func tick_displayOff() {
142141
err := setDisplayBrightness(0)
143142
if err != nil {
144-
fmt.Printf("display: failed to turn off display: %s\n", err)
143+
logger.Warnf("display: failed to turn off display: %s", err)
145144
}
146145

147146
offTicker.Stop()
@@ -164,7 +163,7 @@ func wakeDisplay(force bool) {
164163

165164
err := setDisplayBrightness(config.DisplayMaxBrightness)
166165
if err != nil {
167-
fmt.Printf("display wake failed, %s\n", err)
166+
logger.Warnf("display wake failed, %s", err)
168167
}
169168

170169
if config.DisplayDimAfterSec != 0 {
@@ -184,7 +183,7 @@ func wakeDisplay(force bool) {
184183
func watchTsEvents() {
185184
ts, err := os.OpenFile(touchscreenDevice, os.O_RDONLY, 0666)
186185
if err != nil {
187-
fmt.Printf("display: failed to open touchscreen device: %s\n", err)
186+
logger.Warnf("display: failed to open touchscreen device: %s", err)
188187
return
189188
}
190189

@@ -197,7 +196,7 @@ func watchTsEvents() {
197196
for {
198197
_, err := ts.Read(buf)
199198
if err != nil {
200-
fmt.Printf("display: failed to read from touchscreen device: %s\n", err)
199+
logger.Warnf("display: failed to read from touchscreen device: %s", err)
201200
return
202201
}
203202

@@ -212,17 +211,17 @@ func startBacklightTickers() {
212211
// Don't start the tickers if the display is switched off.
213212
// Set the display to off if that's the case.
214213
if config.DisplayMaxBrightness == 0 {
215-
setDisplayBrightness(0)
214+
_ = setDisplayBrightness(0)
216215
return
217216
}
218217

219218
if dimTicker == nil && config.DisplayDimAfterSec != 0 {
220-
fmt.Printf("display: dim_ticker has started\n")
219+
logger.Info("display: dim_ticker has started")
221220
dimTicker = time.NewTicker(time.Duration(config.DisplayDimAfterSec) * time.Second)
222221
defer dimTicker.Stop()
223222

224223
go func() {
225-
for {
224+
for { //nolint:gosimple
226225
select {
227226
case <-dimTicker.C:
228227
tick_displayDim()
@@ -232,12 +231,12 @@ func startBacklightTickers() {
232231
}
233232

234233
if offTicker == nil && config.DisplayOffAfterSec != 0 {
235-
fmt.Printf("display: off_ticker has started\n")
234+
logger.Info("display: off_ticker has started")
236235
offTicker = time.NewTicker(time.Duration(config.DisplayOffAfterSec) * time.Second)
237236
defer offTicker.Stop()
238237

239238
go func() {
240-
for {
239+
for { //nolint:gosimple
241240
select {
242241
case <-offTicker.C:
243242
tick_displayOff()
@@ -252,11 +251,11 @@ func init() {
252251

253252
go func() {
254253
waitCtrlClientConnected()
255-
fmt.Println("setting initial display contents")
254+
logger.Info("setting initial display contents")
256255
time.Sleep(500 * time.Millisecond)
257256
updateStaticContents()
258257
displayInited = true
259-
fmt.Println("display inited")
258+
logger.Info("display inited")
260259
startBacklightTickers()
261260
wakeDisplay(true)
262261
requestDisplayUpdate()

fuse.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package kvm
22

33
import (
44
"context"
5-
"fmt"
65
"os"
76
"sync"
87
"syscall"
@@ -104,7 +103,7 @@ func RunFuseServer() {
104103
var err error
105104
fuseServer, err = fs.Mount(fuseMountPoint, &FuseRoot{}, opts)
106105
if err != nil {
107-
fmt.Println("failed to mount fuse: %w", err)
106+
logger.Warnf("failed to mount fuse: %v", err)
108107
}
109108
fuseServer.Wait()
110109
}

go.mod

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
module kvm
1+
module github.com/jetkvm/kvm
22

33
go 1.21.0
44

@@ -15,7 +15,6 @@ require (
1515
github.com/gwatts/rootcerts v0.0.0-20240401182218-3ab9db955caf
1616
github.com/hanwen/go-fuse/v2 v2.5.1
1717
github.com/hashicorp/go-envparse v0.1.0
18-
github.com/openstadia/go-usb-gadget v0.0.0-20231115171102-aebd56bbb965
1918
github.com/pion/logging v0.2.2
2019
github.com/pion/mdns/v2 v2.0.7
2120
github.com/pion/webrtc/v4 v4.0.0

go.sum

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,6 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G
8787
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
8888
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
8989
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
90-
github.com/openstadia/go-usb-gadget v0.0.0-20231115171102-aebd56bbb965 h1:bZGtUfkOl0dqvem8ltx9KCYied0gSlRuDhaZDxgppN4=
91-
github.com/openstadia/go-usb-gadget v0.0.0-20231115171102-aebd56bbb965/go.mod h1:6cAIK2c4O3/yETSrRjmNwsBL3yE4Vcu9M9p/Qwx5+gM=
9290
github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM=
9391
github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs=
9492
github.com/pilebones/go-udev v0.9.0 h1:N1uEO/SxUwtIctc0WLU0t69JeBxIYEYnj8lT/Nabl9Q=

0 commit comments

Comments
 (0)