package nmcli import ( "AudioPlayer/nmcli/model" "context" nmcli_go "github.com/KunMengcode/nmcli-go" "github.com/KunMengcode/nmcli-go/connection" "github.com/KunMengcode/nmcli-go/device" "net/rpc" ) type WIFIInterface interface { CreateHotspot(Request model.HotspotInfoRequest, Reply *model.EmptyReply) error ChangeHotspot(Request model.HotspotInfoRequest, Reply *model.EmptyReply) error OpenHotspot(Request model.HotspotInfoRequest, Reply *model.EmptyReply) error HotspotInfo(Request model.EmptyRequest, Reply *WifiInfo) error register() error } type WIFI struct { nmcli *nmcli_go.NMCli } func NewWIFI(nmcli *nmcli_go.NMCli) WIFIInterface { return &WIFI{nmcli: nmcli} } func (receiver *WIFI) register() error { return rpc.RegisterName("NetworkManager.WIFI", receiver) } func (receiver *WIFI) CreateHotspot(Request model.HotspotInfoRequest, Reply *model.EmptyReply) error { _, err := receiver.nmcli.Device.WiFiHotspotCreate(context.Background(), device.WiFiHotspotCreateOptions{ Ifname: Request.IfName, Con_name: "hotspot", SSID: Request.SSID, Password: Request.Password, }) if err != nil { return err } return nil } func (receiver *WIFI) OpenHotspot(Request model.HotspotInfoRequest, Reply *model.EmptyReply) error { _, err := receiver.nmcli.Connection.Up(context.Background(), "hotspot", connection.UpOptions{}) if err != nil { return err } return nil } func (receiver *WIFI) ChangeHotspot(Request model.HotspotInfoRequest, Reply *model.EmptyReply) error { _, err := receiver.nmcli.Connection.Modify(context.Background(), false, "hotspot", map[string]string{ "802-11-wireless.ssid": Request.SSID, "802-11-wireless-security.psk": Request.Password, }) if err != nil { return err } err = receiver.OpenHotspot(Request, Reply) if err != nil { return err } return nil } type WifiInfo struct { SSID string Password string } func (receiver *WIFI) HotspotInfo(Request model.EmptyRequest, Reply *WifiInfo) error { show, err := receiver.nmcli.Connection.Show(context.Background(), "hotspot") if err != nil { return err } *Reply = WifiInfo{ SSID: show["802-11-wireless"][0][0], Password: show["802-11-wireless-security"][0][14], } return nil }