package dcxSwitchapi import ( "errors" "fmt" "log" "strings" "github.rackspace.com/gorax/webutil" ) var ( resource = "https://api.netsec.rackspace.net/switches/" resourcev2 = "https://api.netsec.rackspace.net/v2/switches/" ) type ( Client struct { user string pass string } ) // NewClient creates and returns a pointer to a SwitchAPI Structure func NewClient(u, p string) (*Client, error) { if u == "" { return nil, errors.New("username cannot be empty") } if p == "" { return nil, errors.New("password cannot be empty") } s := Client{ user: u, pass: p, } // disabling due to 500 on /switches // if _, err := s.Get(""); err != nil { // return nil, err // } return &s, nil } func (s *Client) get(path string) (*[]byte, error) { headers := webutil.Headers{"User-Agent": "gorax/clients"} dat, code, err := webutil.BasicAuthGet(strings.ToLower(resource+path), s.user, s.pass, headers) if err != nil { return nil, err } if code > 299 { return nil, fmt.Errorf("received error code: %d", code) } return &dat, nil } func (s *Client) getv2(path string) (*[]byte, error) { headers := webutil.Headers{"User-Agent": "gorax/clients"} dat, code, err := webutil.BasicAuthGet(strings.ToLower(resourcev2+path), s.user, s.pass, headers) if err != nil { return nil, err } if code > 299 { return nil, fmt.Errorf("received error code: %d", code) } return &dat, nil } func (s *Client) post(path string, payload []byte) (*[]byte, error) { headers := webutil.Headers{"User-Agent": "gorax/clients"} dat, code, err := webutil.BasicAuthPost(strings.ToLower(resource+path), s.user, s.pass, payload, headers) if err != nil { return nil, err } if code > 299 { return nil, fmt.Errorf("received error code: %d", code) } return &dat, nil } func (s *Client) postv2(path string, payload []byte) (*[]byte, error) { headers := webutil.Headers{"User-Agent": "gorax/clients"} dat, code, err := webutil.BasicAuthPost(strings.ToLower(resourcev2+path), s.user, s.pass, payload, headers) if err != nil { return nil, err } if code > 299 { return nil, fmt.Errorf("received error code: %d", code) } return &dat, nil } func (s *Client) put(path string, payload []byte) (*[]byte, error) { headers := webutil.Headers{"User-Agent": "gorax/clients", "content-type": "application/json"} dat, code, err := webutil.BasicAuthPut(strings.ToLower(resource+path), s.user, s.pass, payload, headers) if err != nil { return nil, err } if code > 299 { return nil, fmt.Errorf("received error code: %d, error: %s", code, string(dat)) } return &dat, nil } // MustAuth calls NewClient and if there is an error logs it. Will always return something func MustAuth(username, password string) *Client { swa, err := NewClient(username, password) if err != nil { log.Fatal("switch api failure: ", err) } return swa }