Projects STRLCPY 0dayex-checker Commits 250c7903
🤬
  • ■ ■ ■ ■ ■ ■
    .gitignore
     1 +app.exe
     2 +output.log
     3 + 
  • ■ ■ ■ ■ ■ ■
    go.mod
     1 +module app
     2 + 
     3 +go 1.17
     4 + 
     5 +require (
     6 + github.com/jchv/go-webview2 v0.0.0-20220925002352-a49836573706
     7 + github.com/tidwall/sjson v1.2.5
     8 + github.com/valyala/fasthttp v1.40.0
     9 +)
     10 + 
     11 +require (
     12 + github.com/andybalholm/brotli v1.0.4 // indirect
     13 + github.com/jchv/go-winloader v0.0.0-20200815041850-dec1ee9a7fd5 // indirect
     14 + github.com/klauspost/compress v1.15.0 // indirect
     15 + github.com/tidwall/gjson v1.14.2 // indirect
     16 + github.com/tidwall/match v1.1.1 // indirect
     17 + github.com/tidwall/pretty v1.2.0 // indirect
     18 + github.com/valyala/bytebufferpool v1.0.0 // indirect
     19 + golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9 // indirect
     20 +)
     21 + 
  • ■ ■ ■ ■ ■ ■
    go.sum
     1 +github.com/andybalholm/brotli v1.0.4 h1:V7DdXeJtZscaqfNuAdSRuRFzuiKlHSC/Zh3zl9qY3JY=
     2 +github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig=
     3 +github.com/jchv/go-webview2 v0.0.0-20220925002352-a49836573706 h1:alsgT8d4r2H1gBFqEYXDdZlPaQeou5m8dGR4i9tQf3M=
     4 +github.com/jchv/go-webview2 v0.0.0-20220925002352-a49836573706/go.mod h1:/BNVc0Sw3Wj6Sz9uSxPwhCEUhhWs92hPde75K2YV24A=
     5 +github.com/jchv/go-winloader v0.0.0-20200815041850-dec1ee9a7fd5 h1:pdFFlHXY9tZXmJz+tRSm1DzYEH4ebha7cffmm607bMU=
     6 +github.com/jchv/go-winloader v0.0.0-20200815041850-dec1ee9a7fd5/go.mod h1:alcuEEnZsY1WQsagKhZDsoPCRoOijYqhZvPwLG0kzVs=
     7 +github.com/klauspost/compress v1.15.0 h1:xqfchp4whNFxn5A4XFyyYtitiWI8Hy5EW59jEwcyL6U=
     8 +github.com/klauspost/compress v1.15.0/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
     9 +github.com/tidwall/gjson v1.14.2 h1:6BBkirS0rAHjumnjHF6qgy5d2YAJ1TLIaFE2lzfOLqo=
     10 +github.com/tidwall/gjson v1.14.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
     11 +github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA=
     12 +github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM=
     13 +github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs=
     14 +github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=
     15 +github.com/tidwall/sjson v1.2.5 h1:kLy8mja+1c9jlljvWTlSazM7cKDRfJuR/bOJhcY5NcY=
     16 +github.com/tidwall/sjson v1.2.5/go.mod h1:Fvgq9kS/6ociJEDnK0Fk1cpYF4FIW6ZF7LAe+6jwd28=
     17 +github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
     18 +github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
     19 +github.com/valyala/fasthttp v1.40.0 h1:CRq/00MfruPGFLTQKY8b+8SfdK60TxNztjRMnH0t1Yc=
     20 +github.com/valyala/fasthttp v1.40.0/go.mod h1:t/G+3rLek+CyY9bnIE+YlMRddxVAAGjhxndDB4i4C0I=
     21 +github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc=
     22 +golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
     23 +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
     24 +golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
     25 +golang.org/x/sys v0.0.0-20200810151505-1b9f1253b3ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
     26 +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
     27 +golang.org/x/sys v0.0.0-20210218145245-beda7e5e158e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
     28 +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
     29 +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
     30 +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
     31 +golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9 h1:nhht2DYV/Sn3qOayu8lM+cU1ii9sTLUeBQwQQfUHtrs=
     32 +golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
     33 +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
     34 +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
     35 +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
     36 +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
     37 +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
     38 + 
  • ■ ■ ■ ■ ■ ■
    http-utils.go
     1 +package main
     2 +
     3 +import (
     4 + "bytes"
     5 + "crypto/tls"
     6 + "errors"
     7 + "log"
     8 + "net"
     9 + "strings"
     10 + "time"
     11 +
     12 + "github.com/valyala/fasthttp"
     13 +)
     14 +
     15 +var httpClientTimeout = 7 * time.Second
     16 +var dialTimeout = 7 * time.Second
     17 +var httpClient = &fasthttp.Client{
     18 + TLSConfig: &tls.Config{
     19 + InsecureSkipVerify: true,
     20 + },
     21 + MaxIdemponentCallAttempts: 5, // retry if empty resp
     22 + ReadTimeout: httpClientTimeout,
     23 + MaxConnsPerHost: 233,
     24 + MaxIdleConnDuration: 15 * time.Minute,
     25 + ReadBufferSize: 1024 * 8,
     26 + Dial: func(addr string) (net.Conn, error) {
     27 + // no suitable address found => ipv6 can not dial to ipv4,..
     28 + hostname, port, err := net.SplitHostPort(addr)
     29 + if err != nil {
     30 + if err1, ok := err.(*net.AddrError); ok && strings.Index(err1.Err, "missing port") != -1 {
     31 + hostname, port, err = net.SplitHostPort(strings.TrimRight(addr, ":") + ":80")
     32 + }
     33 + if err != nil {
     34 + return nil, err
     35 + }
     36 + }
     37 + if port == "" || port == ":" {
     38 + port = "80"
     39 + }
     40 + return fasthttp.DialDualStackTimeout("["+hostname+"]:"+port, dialTimeout)
     41 + },
     42 +}
     43 +
     44 +var errEncodingNotSupported = errors.New("response content encoding not supported")
     45 +
     46 +func getResponseBody(resp *fasthttp.Response) ([]byte, error) {
     47 + var contentEncoding = resp.Header.Peek("Content-Encoding")
     48 + if len(contentEncoding) < 1 {
     49 + return resp.Body(), nil
     50 + }
     51 + if bytes.Equal(contentEncoding, []byte("gzip")) {
     52 + return resp.BodyGunzip()
     53 + }
     54 + if bytes.Equal(contentEncoding, []byte("deflate")) {
     55 + return resp.BodyInflate()
     56 + }
     57 + return nil, errEncodingNotSupported
     58 +}
     59 +
     60 +func acquireRequest(url string) *fasthttp.Request {
     61 + req := fasthttp.AcquireRequest()
     62 + normalizeRequest(req)
     63 + return req
     64 +}
     65 +
     66 +func normalizeRequest(req *fasthttp.Request) {
     67 + req.Header.Set(`User-Agent`, `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:106.0) Gecko/20100101 Firefox/106.0`)
     68 + req.Header.Set(`Accept`, `text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8`)
     69 + req.Header.Set(`Accept-Language`, `en-US,en;q=0.5`)
     70 + req.Header.Set(`Accept-Encoding`, `gzip, deflate`)
     71 + req.Header.Set(`Connection`, `close`)
     72 + req.Header.Set(`Upgrade-Insecure-Requests`, `1`)
     73 + req.Header.Set(`Sec-Fetch-Dest`, `document`)
     74 + req.Header.Set(`Sec-Fetch-Mode`, `navigate`)
     75 + req.Header.Set(`Sec-Fetch-Site`, `cross-site`)
     76 + req.Header.Set(`Pragma`, `no-cache`)
     77 + req.Header.Set(`Cache-Control`, `no-cache`)
     78 + req.Header.Set(`TE`, `trailers`)
     79 +}
     80 +
     81 +func doRequestFollowRedirects(req *fasthttp.Request, resp *fasthttp.Response, maxRedirectsCount int, f func(*fasthttp.Response)) (err error) {
     82 + redirectsCount := 0
     83 +
     84 + for {
     85 + if err = httpClient.DoTimeout(req, resp, httpClientTimeout); err != nil {
     86 + log.Println(err)
     87 + break
     88 + }
     89 + if f != nil {
     90 + f(resp)
     91 + }
     92 + if maxRedirectsCount == 1 {
     93 + break
     94 + }
     95 + statusCode := resp.Header.StatusCode()
     96 + if !fasthttp.StatusCodeIsRedirect(statusCode) {
     97 + break
     98 + }
     99 +
     100 + redirectsCount++
     101 + if redirectsCount > maxRedirectsCount {
     102 + err = fasthttp.ErrTooManyRedirects
     103 + break
     104 + }
     105 + location := resp.Header.Peek(`location`)
     106 + if len(location) == 0 {
     107 + err = fasthttp.ErrMissingLocation
     108 + break
     109 + }
     110 + req.URI().UpdateBytes(location)
     111 + resp.Reset()
     112 + }
     113 +
     114 + return err
     115 +}
     116 + 
  • ■ ■ ■ ■ ■ ■
    main.go
     1 +package main
     2 + 
     3 +// go build -ldflags "-H windowsgui"
     4 + 
     5 +import (
     6 + "bytes"
     7 + jsongo "encoding/json"
     8 + "errors"
     9 + "log"
     10 + "net/url"
     11 + "os"
     12 + "strings"
     13 + 
     14 + "github.com/jchv/go-webview2"
     15 + "github.com/valyala/fasthttp"
     16 +)
     17 + 
     18 +func checkExchange(url string) (string, error) {
     19 + // 1. kiểm tra email exchage
     20 + req := fasthttp.AcquireRequest()
     21 + defer fasthttp.ReleaseRequest(req)
     22 + resp := fasthttp.AcquireResponse()
     23 + defer fasthttp.ReleaseResponse(resp)
     24 + req.SetRequestURI(url)
     25 + req.URI().Update(`/owa/`)
     26 + normalizeRequest(req)
     27 + var isEx bool
     28 + err := doRequestFollowRedirects(req, resp, 5, func(resp *fasthttp.Response) {
     29 + if !isEx {
     30 + isEx = len(resp.Header.Peek(`x-owa-version`)) != 0
     31 + }
     32 + })
     33 + url = req.URI().String()
     34 + if isEx {
     35 + return url, nil
     36 + }
     37 + if err != nil {
     38 + return "", err
     39 + }
     40 + 
     41 + body, err := getResponseBody(resp)
     42 + if err != nil {
     43 + return "", err
     44 + }
     45 + 
     46 + if bytes.Contains(body, []byte(`/owa/auth.owa`)) || bytes.Contains(body, []byte(`/owa/auth/`)) {
     47 + return url, nil
     48 + }
     49 + return "", nil
     50 +}
     51 + 
     52 +func checkFirewall(url string) (isSafe bool, err error) {
     53 + req := fasthttp.AcquireRequest()
     54 + defer fasthttp.ReleaseRequest(req)
     55 + resp := fasthttp.AcquireResponse()
     56 + defer fasthttp.ReleaseResponse(resp)
     57 + req.SetRequestURI(url)
     58 + randStr := RandStringBytesMaskImprSrc(6, letterBytes)
     59 + req.URI().Update(`/autodiscover/autodiscover.json?@` + randStr + `.com/owa/&Email=autodiscover/autodiscover.json%3f@` + randStr + `.com`)
     60 + log.Println("Request:")
     61 + log.Println(req.URI().String())
     62 + normalizeRequest(req)
     63 + err = doRequestFollowRedirects(req, resp, 3, func(resp *fasthttp.Response) {
     64 + if !isSafe && bytes.Contains(resp.Header.Peek(`location`), []byte(`/errorFE.aspx`)) {
     65 + isSafe = true
     66 + }
     67 + })
     68 + if err != nil {
     69 + if strings.Contains(err.Error(), `timeout`) {
     70 + isSafe = true
     71 + err = nil
     72 + return
     73 + }
     74 + return
     75 + }
     76 + 
     77 + body, err := getResponseBody(resp)
     78 + if err != nil {
     79 + return
     80 + }
     81 + 
     82 + log.Println("Response:")
     83 + log.Println(resp.Header.String())
     84 + log.Println(string(body))
     85 + 
     86 + if resp.StatusCode() == 403 {
     87 + isSafe = true
     88 + return
     89 + }
     90 + 
     91 + if resp.StatusCode() == 500 || resp.StatusCode() == 400 || resp.StatusCode() == 200 {
     92 + return false, err
     93 + }
     94 + 
     95 + if bytes.Contains(body, []byte(`MandatoryParameterMissing`)) {
     96 + return false, nil
     97 + }
     98 + 
     99 + if bytes.Contains(body, []byte(`X-FEServer`)) || bytes.Contains(body, []byte(`.auth_errorfe_aspx`)) {
     100 + return false, nil
     101 + }
     102 + 
     103 + if bytes.Contains(body, []byte(`Server Error in '/owa' Application`)) {
     104 + return false, nil
     105 + }
     106 + return true, nil
     107 +}
     108 + 
     109 +func goCall(w webview2.WebView, name, params string) ([]byte, error) {
     110 + url := params
     111 + 
     112 + if len(url) != 0 {
     113 + // kiểm tra http
     114 + updateMsg(w, `Đang kiểm tra email exchange..`)
     115 + isEx, err := checkExchange(url)
     116 + if err != nil {
     117 + return nil, err
     118 + }
     119 + if len(isEx) == 0 {
     120 + return nil, errors.New(`Địa chỉ này không phải là Microsoft Exchange Server`)
     121 + }
     122 + 
     123 + // kiểm tra firewall
     124 + updateMsg(w, `Đang kiểm tra firewall..`)
     125 + passed, err := checkFirewall(isEx)
     126 + if err != nil {
     127 + return nil, err
     128 + }
     129 + if !passed {
     130 + return nil, errors.New(`Firewall chưa được cập nhật để chặn chuỗi trên URL: <span style="font-weight:bold; color: green">/autodiscover/autodiscover.json?@</span><br>Vui lòng cập nhật firewall để ngăn chặn cuộc tấn công.<br>Tham khảo: <a href="https://www.gteltsc.vn/blog/canh-bao-chien-dich-tan-cong-su-dung-lo-hong-zero-day-tren-microsoft-exchange-server-12714.html" target="_blank">Hướng dẫn</a>`)
     131 + }
     132 + }
     133 + // kiểm tra file system
     134 + // time.Sleep(5 * time.Second)
     135 + 
     136 + return []byte(`Chúc mừng, máy chủ này an toàn!`), nil
     137 +}
     138 + 
     139 +func updateMsg(w webview2.WebView, msg string) {
     140 + webviewDispatch(w, func() {
     141 + jsBytes, _ := jsongo.Marshal(msg)
     142 + w.Eval(`document.querySelector('#msg').innerHTML=` + string(jsBytes))
     143 + })
     144 +}
     145 + 
     146 +func asyncCall(w webview2.WebView, id, name, params string) {
     147 + retBytes, err := goCall(w, name, params)
     148 + webviewDispatch(w, func() {
     149 + var retStr string
     150 + jsId, _ := jsongo.Marshal(id)
     151 + if err != nil {
     152 + retBytes, _ := jsongo.Marshal(err.Error())
     153 + retStr = `{"error":` + string(retBytes) + `}`
     154 + } else {
     155 + retBytes, _ := jsongo.Marshal(retBytes)
     156 + retStr = string(retBytes)
     157 + }
     158 + w.Eval(`window.go_wait[` + string(jsId) + `].resolve(` + retStr + `)`)
     159 + })
     160 +}
     161 + 
     162 +func main() {
     163 + 
     164 + f, err := os.OpenFile("output.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
     165 + if err != nil {
     166 + log.Println(err)
     167 + }
     168 + defer f.Close()
     169 + log.SetOutput(f)
     170 + 
     171 + w := webview2.NewWithOptions(webview2.WebViewOptions{
     172 + Debug: true,
     173 + AutoFocus: true,
     174 + WindowOptions: webview2.WindowOptions{
     175 + Width: 450,
     176 + Height: 450,
     177 + Title: "VNCERT/CC - Kiểm tra lỗ hổng 0-day Exchange Server",
     178 + },
     179 + })
     180 + if w == nil {
     181 + log.Panicln("Failed to load webview.")
     182 + }
     183 + defer w.Destroy()
     184 + w.Bind("go_call", func(id, name, params string) {
     185 + go asyncCall(w, id, name, params)
     186 + })
     187 + w.Bind("quit", func() {
     188 + w.Terminate()
     189 + })
     190 + w.Navigate(`data:text/html,` + url.PathEscape(`
     191 + <!doctype html>
     192 + <head>
     193 + <meta charset="utf-8">
     194 + </head>
     195 + <html style="background-color: #fff;">
     196 + <body style="text-align: center">
     197 + <!-- logo -->
     198 + <img style="width: 150px" src="data:image/png;base64,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" />
     199 + 
     200 + 
     201 + <h3>Công cụ kiểm tra lỗ hổng 0-day Exchange Server</h3>
     202 + 
     203 + <input value="" type="text" style="font-size: 25px; width: 98%;" id="url" placeholder="Nhập địa chỉ website: https://">
     204 + <br>
     205 + <br>
     206 + <button style="font-size: 25px; width: 50%;" onclick="check_site()">Kiểm tra</button>
     207 + <br>
     208 + <br>
     209 + <div>
     210 + <span id="msg" style="font-size: 20px; color: rgb(27, 65, 95)"></span>
     211 + </div>
     212 + <script>
     213 + // Copyright (c) by vinhjaxt at VNCERT/CC
     214 + //
     215 + function b64DecodeUnicode(str) {
     216 + // Going backwards: from bytestream, to percent-encoding, to original string.
     217 + return decodeURIComponent(atob(str).split('').map(function(c) {
     218 + return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
     219 + }).join(''));
     220 + }
     221 + window.go_call_id = 0
     222 + window.go_wait = Object.create(null)
     223 + 
     224 + // disable zoom
     225 + window.addEventListener('wheel', e => {
     226 + if (event.ctrlKey == true) event.preventDefault()
     227 + }, { passive: false })
     228 + window.addEventListener('mousewheel', e => {
     229 + if (event.ctrlKey == true) event.preventDefault()
     230 + }, { passive: false })
     231 + window.addEventListener('DOMMouseScroll', e => {
     232 + if (event.ctrlKey == true) event.preventDefault()
     233 + }, { passive: false })
     234 + window.addEventListener('keydown', e => {
     235 + if (event.ctrlKey==true && (event.which == '61' || event.which == '107' || event.which == '173' || event.which == '109' || event.which == '187' || event.which == '189' ) ) event.preventDefault()
     236 + })
     237 + 
     238 + // disable right click (context menu)
     239 + // window.addEventListener('contextmenu', e => e.preventDefault())
     240 + window.addEventListener('mouseup', e => e.preventDefault())
     241 + 
     242 + const msg = document.querySelector('#msg')
     243 + let checking = false
     244 + function check_site(){
     245 + if (checking) return
     246 + 
     247 + url.value = url.value.trim()
     248 + 
     249 + if (url.value.startsWith('//')) url.value = 'http:'+url.value
     250 + if (!/^https?:\/\//.test(url.value)) url.value = 'http://'+url.value
     251 + 
     252 + if (!url.value) {
     253 + msg.innerText = 'Vui lòng nhập Địa chỉ website!'
     254 + msg.style.color = 'blue'
     255 + return
     256 + }
     257 + checking = true
     258 + msg.innerText = 'Đang kiểm tra..'
     259 + msg.style.color = 'blue'
     260 + 
     261 + const id = (++window.go_call_id).toString(36)
     262 + const prm = new Promise((resolve, reject) => {
     263 + window.go_wait[id] = {resolve, reject}
     264 + })
     265 + go_call(id, 'check', url.value).then(() => prm).then(r => {
     266 + console.log(r)
     267 + if (r.error) {
     268 + msg.innerHTML = 'Lỗi: '+r.error
     269 + msg.style.color = 'red'
     270 + return
     271 + }
     272 + msg.innerHTML = b64DecodeUnicode(r)
     273 + msg.style.color = 'green'
     274 + }).catch(e => {
     275 + msg.innerText = 'Lỗi trong quá trình kiểm tra: '+e
     276 + msg.style.color = 'red'
     277 + console.error(e)
     278 + }).then(() => {
     279 + delete window.go_wait[id]
     280 + checking = false
     281 + })
     282 + }
     283 + </script>
     284 + </body>
     285 + </html>
     286 + `))
     287 + w.Run()
     288 +}
     289 + 
  • ■ ■ ■ ■ ■ ■
    rand-str.go
     1 +package main
     2 +
     3 +import (
     4 + "math/rand"
     5 + "time"
     6 +)
     7 +
     8 +var src = rand.NewSource(time.Now().UnixNano())
     9 +
     10 +const letterBytes = "abcdefghijklmnopqrstuvwxyz0123456789-"
     11 +const (
     12 + letterIdxBits = 6 // 6 bits to represent a letter index
     13 + letterIdxMask = 1<<letterIdxBits - 1 // All 1-bits, as many as letterIdxBits
     14 + letterIdxMax = 63 / letterIdxBits // # of letter indices fitting in 63 bits
     15 +)
     16 +
     17 +func RandStringBytesMaskImprSrc(n int, letterBytes string) string {
     18 + b := make([]byte, n)
     19 + // A src.Int63() generates 63 random bits, enough for letterIdxMax characters!
     20 + for i, cache, remain := n-1, src.Int63(), letterIdxMax; i >= 0; {
     21 + if remain == 0 {
     22 + cache, remain = src.Int63(), letterIdxMax
     23 + }
     24 + if idx := int(cache & letterIdxMask); idx < len(letterBytes) {
     25 + b[i] = letterBytes[idx]
     26 + i--
     27 + }
     28 + cache >>= letterIdxBits
     29 + remain--
     30 + }
     31 +
     32 + return string(b)
     33 +}
     34 + 
  • ■ ■ ■ ■ ■ ■
    webview.go
     1 +package main
     2 +
     3 +import (
     4 + "sync/atomic"
     5 + "time"
     6 +
     7 + "github.com/jchv/go-webview2"
     8 +)
     9 +
     10 +func webviewDispatch(w webview2.WebView, f func()) {
     11 + var fired uint32
     12 + dpFunc := func() {
     13 + if !atomic.CompareAndSwapUint32(&fired, 0, 1) {
     14 + return
     15 + }
     16 + f()
     17 + }
     18 + w.Dispatch(dpFunc)
     19 + for atomic.LoadUint32(&fired) == 0 {
     20 + w.Dispatch(dpFunc)
     21 + time.Sleep(100 * time.Millisecond)
     22 + }
     23 +}
     24 + 
Please wait...
Page is in error, reload to recover