Files
scla-unsubscribe/directory.go

67 lines
1.8 KiB
Go

package main
import (
"net/http"
"net/url"
"strings"
"github.com/PuerkitoBio/goquery"
"github.com/rs/zerolog/log"
)
func Login(username string, password string) {
// Setup URL for request
loginPageUrl, _ := url.Parse("https://www.utsa.edu/directory/Account/Login")
query := loginPageUrl.Query()
query.Set("ReturnUrl", "/directory/AdvancedSearch")
loginPageUrl.RawQuery = query.Encode()
// Build request
request, _ := http.NewRequest("GET", loginPageUrl.String(), nil)
ApplyHeaders(request)
// Send request
response, err := DoRequestNoRead(request)
if err != nil {
log.Fatal().Err(err).Msg("Error sending login page request")
}
doc, err := goquery.NewDocumentFromReader(response.Body)
defer response.Body.Close()
if err != nil {
log.Fatal().Err(err).Msg("Error parsing response body")
}
// Get token
token, _ := doc.Find("input[name='__RequestVerificationToken']").Attr("value")
log.Debug().Str("token", token).Msg("Token Captured")
// Build the login request
form := url.Values{
"myUTSAID": {username},
"passphrase": {password},
"__RequestVerificationToken": {token},
"log-me-in": {"Log+In"},
}
request, _ = http.NewRequest("POST", "https://www.utsa.edu/directory/", strings.NewReader(form.Encode()))
ApplyHeaders(request)
request.Header.Set("Content-Type", "application/x-www-form-urlencoded")
// Send the login request
response, _, err = DoRequest(request)
if err != nil {
log.Fatal().Err(err).Msg("Error sending login request")
}
if response.StatusCode != 200 {
switch response.StatusCode {
case 500:
log.Fatal().Str("status", response.Status).Msg("Bad Request (check cookies)")
default:
log.Fatal().Str("status", response.Status).Msg("Failed to Login, Unknown Error")
}
}
// TODO: Check if login was successful
}