initial
This commit is contained in:
commit
bb80e8f66f
4 changed files with 91 additions and 0 deletions
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
welhproxy
|
2
Makefile
Normal file
2
Makefile
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
all:
|
||||||
|
go build welhproxy.go
|
3
go.mod
Normal file
3
go.mod
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
module git.dynatron.me/amigan/welhproxy
|
||||||
|
|
||||||
|
go 1.21.6
|
85
welhproxy.go
Normal file
85
welhproxy.go
Normal file
|
@ -0,0 +1,85 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bufio"
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"net/http"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
type WELHProxy struct {
|
||||||
|
Listen string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *WELHProxy) String() string {
|
||||||
|
return p.Listen
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *WELHProxy) fetchSite(_ http.ResponseWriter, r *http.Request) (url string, err error) {
|
||||||
|
req, err := http.NewRequestWithContext(r.Context(), "GET", "https://welh.radio12345.com/openfire.ajax.php?radio_id=1172158", nil)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
getResp, err := http.DefaultClient.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
getResp.Body.Close()
|
||||||
|
req, err = http.NewRequestWithContext(r.Context(), "GET", "https://welh.radio12345.com/", nil)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
getResp, err = http.DefaultClient.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
defer getResp.Body.Close()
|
||||||
|
|
||||||
|
if getResp.StatusCode < 300 && getResp.StatusCode >= 200 {
|
||||||
|
s := bufio.NewScanner(getResp.Body)
|
||||||
|
for s.Scan() {
|
||||||
|
t := strings.TrimSpace(s.Text())
|
||||||
|
if strings.Contains(t, `<div style="display:none" id="urladdress">`) {
|
||||||
|
if !s.Scan() {
|
||||||
|
return "", errors.New("scan")
|
||||||
|
}
|
||||||
|
return strings.TrimSpace(strings.ReplaceAll(s.Text(), "</div>", "")), nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return "", fmt.Errorf("could not find stream URL")
|
||||||
|
}
|
||||||
|
|
||||||
|
return "", fmt.Errorf("failed to get url: %+v", getResp)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *WELHProxy) handle(w http.ResponseWriter, r *http.Request) {
|
||||||
|
log.Println(r)
|
||||||
|
url, err := p.fetchSite(w, r)
|
||||||
|
if err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
}
|
||||||
|
http.Redirect(w, r, url, http.StatusFound)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *WELHProxy) Go() {
|
||||||
|
http.HandleFunc("/", p.handle)
|
||||||
|
log.Fatal(http.ListenAndServe(p.Listen, nil))
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewWELHProxy(addr string) *WELHProxy {
|
||||||
|
return &WELHProxy{
|
||||||
|
Listen: addr,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
server := NewWELHProxy(":8534")
|
||||||
|
log.Printf("welhproxy starting on %s", server)
|
||||||
|
server.Go()
|
||||||
|
}
|
Loading…
Reference in a new issue