func()

in pkg/provider/f5apm/f5apm.go [152:188]


func (ac *Client) getLoginForm(loginDetails *creds.LoginDetails) (url.Values, error) {
	req, err := http.NewRequest("GET", loginDetails.URL, nil)
	if err != nil {
		return nil, errors.Wrap(err, "Error building get loging form request")
	}
	debugHTTPRequest(ac, req)
	res, err := ac.client.Do(req)
	if err != nil {
		return nil, errors.Wrap(err, "Error retrieving login form")
	}
	debugHTTPResponse(ac, res)

	doc, err := goquery.NewDocumentFromReader(res.Body)
	if err != nil {
		return nil, errors.Wrap(err, "Failed to build document from response")
	}
	authForm := url.Values{}
	doc.Find("input").Each(func(i int, s *goquery.Selection) {
		name, ok := s.Attr("name")
		if !ok {
			return
		}
		lname := strings.ToLower(name)
		if strings.Contains(lname, "username") {
			authForm.Add(name, loginDetails.Username)
		} else if strings.Contains(lname, "password") {
			authForm.Add(name, loginDetails.Password)
		} else {
			val, ok := s.Attr("value")
			if !ok {
				return
			}
			authForm.Add(name, val)
		}
	})
	return authForm, nil
}