feat: init repo
This commit is contained in:
commit
8cb3e3b9f6
|
@ -0,0 +1,5 @@
|
|||
.env
|
||||
coverage/*
|
||||
test_monitor.txt
|
||||
bin
|
||||
.vscode
|
|
@ -0,0 +1,19 @@
|
|||
BINARY_DIR=bin
|
||||
BINARY_NAME=wifi-switcher
|
||||
COVERAGE_DIR=coverage
|
||||
|
||||
lint:
|
||||
golangci-lint run ./...
|
||||
goreportcard:
|
||||
goreportcard-cli -v
|
||||
test:
|
||||
go test ./...
|
||||
test-coverage:
|
||||
rm -rf ${COVERAGE_DIR}
|
||||
mkdir ${COVERAGE_DIR}
|
||||
go test -v -coverprofile ${COVERAGE_DIR}/cover.out ./...
|
||||
go tool cover -html ${COVERAGE_DIR}/cover.out -o ${COVERAGE_DIR}/cover.html
|
||||
build:
|
||||
rm -rf ${BINARY_DIR}
|
||||
mkdir ${BINARY_DIR}
|
||||
env GOOS=linux CGO_ENABLED=0 GOARCH=amd64 go build -o ./${BINARY_DIR}/${BINARY_NAME} main.go
|
|
@ -0,0 +1,32 @@
|
|||
package cfg
|
||||
|
||||
import (
|
||||
"log"
|
||||
|
||||
"github.com/joho/godotenv"
|
||||
"github.com/kelseyhightower/envconfig"
|
||||
)
|
||||
|
||||
type Config struct {
|
||||
Page string `required:"true" split_words:"true"`
|
||||
AdminUser string `required:"true" split_words:"true"`
|
||||
Password string `required:"true" split_words:"true"`
|
||||
LogFile bool `required:"true" split_words:"true"`
|
||||
}
|
||||
|
||||
func NewConfig(envFilePath string) *Config {
|
||||
if envFilePath != "" {
|
||||
err := godotenv.Load(envFilePath)
|
||||
if err != nil {
|
||||
log.Fatalf("environment variable ENV is empty and an error occurred while loading the .env file\n")
|
||||
}
|
||||
}
|
||||
|
||||
cfg := &Config{}
|
||||
err := envconfig.Process("", cfg)
|
||||
if err != nil {
|
||||
log.Fatalf("envconfig.Process: %s\n", err)
|
||||
}
|
||||
|
||||
return cfg
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
module gitea.urkob.com/urko/go-wifi-switcher
|
||||
|
||||
go 1.19
|
||||
|
||||
require (
|
||||
github.com/go-rod/rod v0.112.6
|
||||
github.com/joho/godotenv v1.5.1
|
||||
github.com/kelseyhightower/envconfig v1.4.0
|
||||
github.com/ysmood/leakless v0.8.0
|
||||
)
|
||||
|
||||
require (
|
||||
github.com/ysmood/goob v0.4.0 // indirect
|
||||
github.com/ysmood/gson v0.7.3 // indirect
|
||||
)
|
|
@ -0,0 +1,16 @@
|
|||
github.com/go-rod/rod v0.112.6 h1:zMirUmhsBeshMWyf285BD0UGtGq54HfThLDGSjcP3lU=
|
||||
github.com/go-rod/rod v0.112.6/go.mod h1:ElViL9ABbcshNQw93+11FrYRH92RRhMKleuILo6+5V0=
|
||||
github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
|
||||
github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
|
||||
github.com/kelseyhightower/envconfig v1.4.0 h1:Im6hONhd3pLkfDFsbRgu68RDNkGF1r3dvMUtDTo2cv8=
|
||||
github.com/kelseyhightower/envconfig v1.4.0/go.mod h1:cccZRl6mQpaq41TPp5QxidR+Sa3axMbJDNb//FQX6Gg=
|
||||
github.com/ysmood/goob v0.4.0 h1:HsxXhyLBeGzWXnqVKtmT9qM7EuVs/XOgkX7T6r1o1AQ=
|
||||
github.com/ysmood/goob v0.4.0/go.mod h1:u6yx7ZhS4Exf2MwciFr6nIM8knHQIE22lFpWHnfql18=
|
||||
github.com/ysmood/got v0.32.0 h1:aAHdQgfgMb/lo4v+OekM+SSqEJYFI035h5YYvLXsVyU=
|
||||
github.com/ysmood/got v0.32.0/go.mod h1:pE1l4LOwOBhQg6A/8IAatkGp7uZjnalzrZolnlhhMgY=
|
||||
github.com/ysmood/gotrace v0.6.0 h1:SyI1d4jclswLhg7SWTL6os3L1WOKeNn/ZtzVQF8QmdY=
|
||||
github.com/ysmood/gotrace v0.6.0/go.mod h1:TzhIG7nHDry5//eYZDYcTzuJLYQIkykJzCRIo4/dzQM=
|
||||
github.com/ysmood/gson v0.7.3 h1:QFkWbTH8MxyUTKPkVWAENJhxqdBa4lYTQWqZCiLG6kE=
|
||||
github.com/ysmood/gson v0.7.3/go.mod h1:3Kzs5zDl21g5F/BlLTNcuAGAYLKt2lV5G8D1zF3RNmg=
|
||||
github.com/ysmood/leakless v0.8.0 h1:BzLrVoiwxikpgEQR0Lk8NyBN5Cit2b1z+u0mgL4ZJak=
|
||||
github.com/ysmood/leakless v0.8.0/go.mod h1:R8iAXPRaG97QJwqxs74RdwzcRHT1SWCGTNqY8q0JvMQ=
|
|
@ -0,0 +1,93 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"gitea.urkob.com/urko/go-wifi-switcher/cfg"
|
||||
"github.com/go-rod/rod"
|
||||
"github.com/go-rod/rod/lib/launcher"
|
||||
"github.com/go-rod/rod/lib/utils"
|
||||
"github.com/ysmood/leakless"
|
||||
)
|
||||
|
||||
func main() {
|
||||
config := cfg.NewConfig("./.env")
|
||||
log.Println("config", config)
|
||||
|
||||
log.SetFlags(log.Lmicroseconds)
|
||||
if config.LogFile {
|
||||
logFileName := fmt.Sprintf("%s.txt", time.Now().Format(strings.ReplaceAll(time.RFC1123Z, ":", "_")))
|
||||
f, err := os.OpenFile(logFileName, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0o644)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
defer f.Close()
|
||||
log.SetOutput(f)
|
||||
}
|
||||
|
||||
// get the browser executable path
|
||||
path := launcher.NewBrowser().MustGet()
|
||||
args := launcher.New().FormatArgs()
|
||||
|
||||
cmd := leakless.New().Command(path, args...)
|
||||
|
||||
parser := launcher.NewURLParser()
|
||||
cmd.Stderr = parser
|
||||
utils.E(cmd.Start())
|
||||
u := launcher.MustResolveURL(<-parser.URL)
|
||||
browser := rod.New().
|
||||
ControlURL(u).
|
||||
MustConnect().
|
||||
MustIgnoreCertErrors(true)
|
||||
|
||||
defer browser.MustClose()
|
||||
|
||||
page := browser.MustPage(config.Page)
|
||||
|
||||
page.MustElement(`#username`).MustInput(config.AdminUser)
|
||||
page.MustElement(`#userpassword`).MustInput(config.Password)
|
||||
log.Println("INPUT DONE")
|
||||
|
||||
page.MustElement(`input[value="Login"]`).MustClick()
|
||||
log.Println("LOGIN DONE")
|
||||
|
||||
page.MustElement(`input[value="Skip"]`).MustClick()
|
||||
log.Println("SKIP DONE")
|
||||
|
||||
time.Sleep(time.Second * 3)
|
||||
|
||||
printContent(page)
|
||||
|
||||
net := page.MustElement("#Net")
|
||||
log.Println("Net", net)
|
||||
net.MustClick()
|
||||
log.Println("Net DONE")
|
||||
|
||||
wlan := page.MustElement("#Net-WLAN")
|
||||
log.Println("wlan", wlan)
|
||||
wlan.MustClick()
|
||||
log.Println("Net-WLAN DONE")
|
||||
|
||||
mainFrame := page.MustElement("#mainFrame").MustFrame()
|
||||
mainFrame.MustElement("#wlanEnable").MustClick()
|
||||
log.Println("wlanEnable DONE")
|
||||
|
||||
printContent(mainFrame)
|
||||
mainFrame.MustElement("#sysSubmit").MustClick()
|
||||
|
||||
log.Println("task completed")
|
||||
}
|
||||
|
||||
func printContent(page *rod.Page) {
|
||||
content, err := page.HTML()
|
||||
if err != nil {
|
||||
log.Fatalf("page.HTML: %s\n", err)
|
||||
}
|
||||
|
||||
log.Println("content", content)
|
||||
}
|
Loading…
Reference in New Issue