Платформа ЦРНП "Мирокод" для разработки проектов
https://git.mirocod.ru
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
1.2 KiB
58 lines
1.2 KiB
package pwn |
|
|
|
import ( |
|
"context" |
|
"io" |
|
"net/http" |
|
) |
|
|
|
const ( |
|
libVersion = "0.0.3" |
|
userAgent = "go.jolheiser.com/pwn v" + libVersion |
|
) |
|
|
|
// Client is a HaveIBeenPwned client |
|
type Client struct { |
|
ctx context.Context |
|
http *http.Client |
|
} |
|
|
|
// New returns a new HaveIBeenPwned Client |
|
func New(options ...ClientOption) *Client { |
|
client := &Client{ |
|
ctx: context.Background(), |
|
http: http.DefaultClient, |
|
} |
|
|
|
for _, opt := range options { |
|
opt(client) |
|
} |
|
|
|
return client |
|
} |
|
|
|
// ClientOption is a way to modify a new Client |
|
type ClientOption func(*Client) |
|
|
|
// WithHTTP will set the http.Client of a Client |
|
func WithHTTP(httpClient *http.Client) func(pwnClient *Client) { |
|
return func(pwnClient *Client) { |
|
pwnClient.http = httpClient |
|
} |
|
} |
|
|
|
// WithContext will set the context.Context of a Client |
|
func WithContext(ctx context.Context) func(pwnClient *Client) { |
|
return func(pwnClient *Client) { |
|
pwnClient.ctx = ctx |
|
} |
|
} |
|
|
|
func newRequest(ctx context.Context, method, url string, body io.ReadCloser) (*http.Request, error) { |
|
req, err := http.NewRequestWithContext(ctx, method, url, body) |
|
if err != nil { |
|
return nil, err |
|
} |
|
req.Header.Add("User-Agent", userAgent) |
|
return req, nil |
|
}
|
|
|