diff --git a/helpers.go b/helpers.go index f3e5cd3..753e41a 100644 --- a/helpers.go +++ b/helpers.go @@ -237,3 +237,17 @@ func NewWebhook(link string) WebhookConfig { Clear: false, } } + +// NewWebhookWithCert creates a new webhook with a selfsigned certificate. +// +// link is the url you wish to get webhooks, +// file contains a string to a file, or a FileReader or FileBytes. +func NewWebhookWithCert(link string, file interface{}) WebhookConfig { + u, _ := url.Parse(link) + + return WebhookConfig{ + URL: u, + Clear: false, + Certificate: file, + } +} diff --git a/methods.go b/methods.go index 86e2997..00cedf2 100644 --- a/methods.go +++ b/methods.go @@ -159,8 +159,9 @@ type UpdateConfig struct { // WebhookConfig contains information about a SetWebhook request. type WebhookConfig struct { - Clear bool - URL *url.URL + Clear bool + URL *url.URL + Certificate interface{} } // FileBytes contains information about a set of bytes to upload as a File. @@ -973,11 +974,29 @@ func (bot *BotAPI) GetUpdates(config UpdateConfig) ([]Update, error) { // If this is set, GetUpdates will not get any data! // // Requires Url OR to set Clear to true. -func (bot *BotAPI) SetWebhook(config WebhookConfig) (APIResponse, error){ - v := url.Values{} - if !config.Clear { - v.Add("url", config.URL.String()) +func (bot *BotAPI) SetWebhook(config WebhookConfig) (APIResponse, error) { + if config.Certificate == nil { + v := url.Values{} + if !config.Clear { + v.Add("url", config.URL.String()) + } + + return bot.MakeRequest("setWebhook", v) + } + + params := make(map[string]string) + + resp, err := bot.UploadFile("setWebhook", params, "certificate", config.Certificate) + if err != nil { + return APIResponse{}, err + } + + var apiResp APIResponse + json.Unmarshal(resp.Result, &apiResp) + + if bot.Debug { + log.Printf("sendVideo resp: %+v\n", apiResp) } - return bot.MakeRequest("setWebhook", v) + return apiResp, nil }