Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add proxy server examples #241

Merged
merged 1 commit into from
Nov 3, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ A package to send messages to a Microsoft Teams channel.
- [How to create a webhook URL (Connector)](#how-to-create-a-webhook-url-connector)
- [Examples](#examples)
- [Basic](#basic)
- [Specify proxy server](#specify-proxy-server)
- [User Mention](#user-mention)
- [Tables](#tables)
- [Set custom user agent](#set-custom-user-agent)
Expand Down Expand Up @@ -192,6 +193,16 @@ This is an example of a simple client application which uses this library.
- `MessageCard`
- File: [basic](./examples/messagecard/basic/main.go)

#### Specify proxy server

This is an example of a simple client application which uses this library to
route a generated message through a specified proxy server.

- `Adaptive Card`
- File: [basic](./examples/adaptivecard/proxy/main.go)
- `MessageCard`
- File: [basic](./examples/messagecard/proxy/main.go)

#### User Mention

These examples illustrates the use of one or more user mentions. This feature
Expand Down
89 changes: 89 additions & 0 deletions examples/adaptivecard/proxy/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
// Copyright 2022 Adam Chalkley
//
// https://github.com/atc0005/go-teams-notify
//
// Licensed under the MIT License. See LICENSE file in the project root for
// full license information.

/*

This is an example of a client application which uses this library to:

- generate a basic Microsoft Teams message in Adaptive Card format
- submit the message using an explicit proxy server URL

Of note:

- message is in Adaptive Card format
- default timeout
- package-level logging is disabled by default
- validation of known webhook URL prefixes is *enabled*
- simple message submitted to Microsoft Teams consisting of title and
formatted message body

See https://docs.microsoft.com/en-us/adaptive-cards/authoring-cards/text-features
for the list of supported Adaptive Card text formatting options.

*/

package main

import (
"log"
"net/http"
"net/url"
"os"

goteamsnotify "github.com/atc0005/go-teams-notify/v2"
"github.com/atc0005/go-teams-notify/v2/adaptivecard"
)

func main() {

// Initialize a new Microsoft Teams client.
mstClient := goteamsnotify.NewTeamsClient()

proxyURLString := "http://proxy.example.com:3128"
proxyUrl, err := url.Parse(proxyURLString)

if err != nil {
log.Printf(
"failed to parse proxy URL %q: %v",
proxyURLString,
err,
)
os.Exit(1)
}

httpClient := mstClient.HTTPClient()
httpClient.Transport = &http.Transport{Proxy: http.ProxyURL(proxyUrl)}

// Set webhook url.
webhookUrl := "https://outlook.office.com/webhook/YOUR_WEBHOOK_URL_OF_TEAMS_CHANNEL"

// The title for message (first TextBlock element).
msgTitle := "Hello world"

// Formatted message body.
msgText := "Here are some examples of formatted stuff like " +
"\n * this list itself \n * **bold** \n * *italic* \n * ***bolditalic***"

// Create message using provided formatted title and text.
msg, err := adaptivecard.NewSimpleMessage(msgText, msgTitle, true)
if err != nil {
log.Printf(
"failed to create message: %v",
err,
)
os.Exit(1)
}

// Send the message with default timeout/retry settings.
if err := mstClient.Send(webhookUrl, msg); err != nil {
log.Printf(
"failed to send message: %v",
err,
)
os.Exit(1)
}
}
73 changes: 73 additions & 0 deletions examples/messagecard/proxy/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
// Copyright 2021 Adam Chalkley
//
// https://github.com/atc0005/go-teams-notify
//
// Licensed under the MIT License. See LICENSE file in the project root for
// full license information.

/*

This is an example of a client application which uses this library to:

- generate a Microsoft Teams message in MessageCard format
- submit the message using an explicit proxy server URL

Of note:

- message is in MessageCard format
- default timeout
- package-level logging is disabled by default
- validation of known webhook URL prefixes is *enabled*
- simple message submitted to Microsoft Teams consisting of title and
formatted message body

*/

package main

import (
"log"
"net/http"
"net/url"
"os"

goteamsnotify "github.com/atc0005/go-teams-notify/v2"
"github.com/atc0005/go-teams-notify/v2/messagecard"
)

func main() {

// Initialize a new Microsoft Teams client.
mstClient := goteamsnotify.NewTeamsClient()

proxyURLString := "http://proxy.example.com:3128"
proxyUrl, err := url.Parse(proxyURLString)

if err != nil {
log.Printf(
"failed to parse proxy URL %q: %v",
proxyURLString,
err,
)
os.Exit(1)
}

httpClient := mstClient.HTTPClient()
httpClient.Transport = &http.Transport{Proxy: http.ProxyURL(proxyUrl)}

// Set webhook url.
webhookUrl := "https://outlook.office.com/webhook/YOUR_WEBHOOK_URL_OF_TEAMS_CHANNEL"

// Setup message card.
msgCard := messagecard.NewMessageCard()
msgCard.Title = "Hello world"
msgCard.Text = "Here are some examples of formatted stuff like " +
"<br> * this list itself <br> * **bold** <br> * *italic* <br> * ***bolditalic***"
msgCard.ThemeColor = "#DF813D"

// Send the message with default timeout/retry settings.
if err := mstClient.Send(webhookUrl, msgCard); err != nil {
log.Printf("failed to send message: %v", err)
os.Exit(1)
}
}
Loading