mirror of
https://codeberg.org/flpolyaplus/aplus.git
synced 2024-11-21 17:00:30 -05:00
vin
aa816a646e
Some of the form values being sent in the POST request had HTML entities that needed to be unescaped.
78 lines
1.5 KiB
Go
78 lines
1.5 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"html"
|
|
"io"
|
|
"net/http"
|
|
"net/url"
|
|
"strings"
|
|
)
|
|
|
|
func get_aplus(token string, link string, client http.Client) string {
|
|
resp, err := client.Get(link)
|
|
|
|
if err != nil {
|
|
fmt.Println("Error performing GET request to initial link.")
|
|
}
|
|
defer resp.Body.Close()
|
|
body, _ := io.ReadAll(resp.Body)
|
|
|
|
var aplus Aplus
|
|
json.Unmarshal(body, &aplus)
|
|
|
|
return aplus.URL
|
|
}
|
|
|
|
func get_form_from_request_body(req_body []byte) string {
|
|
body_str := string(req_body)
|
|
form_start := strings.Index(body_str, "<form")
|
|
form_end := strings.Index(body_str, "</form>") + 7
|
|
form_html := req_body[form_start:form_end]
|
|
|
|
return string(form_html)
|
|
}
|
|
|
|
// parse_form extracts form fields and values from the given HTML form string.
|
|
func parse_form(form_html string) url.Values {
|
|
form_values := make(url.Values)
|
|
inputs := strings.Split(form_html, "<input")
|
|
|
|
for _, input := range inputs {
|
|
// Extract field name and value
|
|
name := extract_attribute(input, "name")
|
|
value := html.UnescapeString(extract_attribute(input, "value"))
|
|
|
|
if name != "" {
|
|
form_values.Add(name, value)
|
|
}
|
|
}
|
|
|
|
return form_values
|
|
}
|
|
|
|
func extract_attribute(input string, attribute string) string {
|
|
start := strings.Index(input, attribute+"=\"")
|
|
if start == -1 {
|
|
start = strings.Index(input, attribute+"='")
|
|
}
|
|
|
|
if start == -1 {
|
|
return ""
|
|
}
|
|
|
|
start += len(attribute) + 2
|
|
|
|
end := strings.Index(input[start:], "\"")
|
|
if end == -1 {
|
|
end = strings.Index(input[start:], "'")
|
|
}
|
|
|
|
if end == -1 {
|
|
return ""
|
|
}
|
|
|
|
return input[start : start+end]
|
|
}
|