Showing posts with label Go. Show all posts
Showing posts with label Go. Show all posts

Sunday, May 28, 2023

Golang: selenium test with Google Chrome browser


package main
 
import (
  "errors"
  "fmt"
  "log"
  "os"
 
  "github.com/tebeka/selenium"
)
 
const (
  chromeDriverPath = `C:\WebDriver\chromedriver.exe`
  port = 22222
)
 
func main() {
  opts := []selenium.ServiceOption {
    selenium.Output(os.Stderr),
  }
 
  selenium.SetDebug(true)
  service, err := selenium.NewChromeDriverService(chromeDriverPath, port, opts...)
  if err != nil {
    log.Fatal(err)
  }
  defer service.Stop()
 
  caps := selenium.Capabilities {
    "browserName": "chrome",
    // "acceptInsecureCerts": true,   // when using self-signed certificate
  }
 
  wd, err := selenium.NewRemote(caps, fmt.Sprintf("http://localhost:%d/wd/hub", port))
  if err != nil {
    log.Fatal(err)
  }
 
  defer wd.Quit()
 
  err = wd.Get("https://localhost/")
  if err != nil {
    log.Fatal(err)
  }
 
  elm, err := wd.FindElement(selenium.ByXPATH, "/html/body/h1")
  if err != nil {
    log.Fatal(err)
  }
 
  text, err := elm.Text()
  if err != nil {
    log.Fatal(err)
  }
 
  if text != "Hello World!" {
    fmt.Println("Failed")
  } else {
    fmt.Println("Passed")
  }
}
 
  

Monday, March 20, 2023

golang: sftp connecting to a remote server


package main

import (
  "github.com/pkg/sftp"
  "golang.org/x/crypto/ssh"
  "log"
)

func main() {
 
  // for demo purpose only. Such config is not so secure.
  config := &ssh.ClientConfig {
    User: "myusername",
    Auth: []ssh.AuthMethod {
      ssh.Password("mypassword") },
    HostKeyCallback: ssh.InsecureIgnoreHostKey(),
  }

  // Connect to the server
  conn, err := ssh.Dial("tcp", "myhost:12345", config)

  if err != nil {
    log.Fatal(err)
  }

  defer conn.Close()

  // Open SFTP session
  session, err := sftp.NewClient(conn)

  if err != nil {
    log.Fatal(err)
  }

  defer session.Close()

  fileInfo, err := session.Lstat("my-remote-file")

  if err != nil {
    log.Fatal(err)
  }

  log.Println(fileInfo)
}



Sunday, March 19, 2023

golang: compute PBKDF2 of a password


 package main

import (
  "bytes"
  "crypto/rand"
  "crypto/sha256"
  "encoding/hex"
  "fmt"
  "golang.org/x/crypto/pbkdf2"
  "golang.org/x/term"
  "log"
  "strings"
  "syscall"
)

func main() {
  fmt.Print("Input password: ")

  password, err := term.ReadPassword(int(syscall.Stdin))

  if err != nil {
    log.Fatal(err)
  }

  fmt.Print("\nConfirm password: ")

  confirmPw, err := term.ReadPassword(int(syscall.Stdin))
 
  if err != nil {
    log.Fatal(err)
  }
 
  if !bytes.Equal(password, ConfirmPw) {
    log.Fatal("Error: inputs mismatch")
  }

  salt := make([]byte, 32)

  _, err = rand.Read(salt)

  if err != nil {
    log.Fatal(err)
  }

  pwPbkdf2 := pbkdf2.Key(password, salt, 10240, 32, sha256.New)

  fmt.Println("\nSalt: ", strings.ToUpper(hex.EncodeToString(salt))
  fmt.Println("PBKDF2: ", strings.ToUpper(hex.EncodeToString(pwPbkdf2))
}




Saturday, March 18, 2023

golang: example of query and update with MySQL DB


package main
 
import {
  "database/sql"
  "log"
  _ "github.com/go-sql-driver/mysql"
}
 
func dbConn() *sql.DB {
  db, err := sql.Open("mysql", 
             "myusername:mypassword@tcp(127.0.0.1:3306)/MYDB")
 
  if err != nil {
    log.Fatal(err)
  }
 
  return db
}
 
func DoQuery() (ids []int) {
  ids = nil
 
  db := dbConn()
 
  defer db.Close()
 
  res, err := db.Query("select id from mytable where name=?", "Puppy")
 
  if err != nil {
    log.Fatal(err)
  }
 
  for res.Next() {
    var id int
 
    res.Scan(&id)
 
    ids = append(ids, id)
  }

  return
}

func DoUpdate(id int) {
  db := dbConn()
 
  defer db.Close()
 
  res, err := db.Exec("update mytable set name=? where id=?", "Kitty", id)
 
  if err != nil {
    log.Fatal(err)
  }
 
  count, err := res.RowsAffected()
 
  if err != nil {
    log.Fatal(err)
  }

  log.Println(count)
}

func main() {
  ids := DoQuery()
 
  for _, id := range ids {
    DoUpdate(id)
  }
}
 


 
Get This <