Skip to content
Draft
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
3 changes: 2 additions & 1 deletion bot/connector-teams/src/main/kotlin/TeamsConnector.kt
Original file line number Diff line number Diff line change
Expand Up @@ -69,12 +69,13 @@ internal class TeamsConnector(
private val path: String,
val appId: String,
val appPassword: String,
val tenantId: String = "botframework.com",
) : ConnectorBase(teamsConnectorType, setOf(CAROUSEL)) {
companion object {
private val logger = KotlinLogging.logger {}
}

private var tokenHandler = TokenHandler(appId, appPassword)
private var tokenHandler = TokenHandler(appId, appPassword, tenantId)
private val client = TeamsClient(tokenHandler)
private val jwkHandler = JWKHandler()
private val executor: Executor by injector.instance()
Expand Down
7 changes: 7 additions & 0 deletions bot/connector-teams/src/main/kotlin/TeamsConnectorProvider.kt
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ import kotlin.reflect.KClass
internal object TeamsConnectorProvider : ConnectorProvider {
private const val APP_ID = "appId"
private const val PASSWORD = "password"
private const val TENANT_ID = "tenantId"

override val connectorType: ConnectorType get() = teamsConnectorType

Expand All @@ -46,6 +47,7 @@ internal object TeamsConnectorProvider : ConnectorProvider {
path = path,
appId = parameters.getValue(APP_ID),
appPassword = parameters.getValue(PASSWORD),
tenantId = parameters[TENANT_ID]?.takeIf { it.isNotBlank() } ?: "botframework.com",
)
}
}
Expand All @@ -64,6 +66,11 @@ internal object TeamsConnectorProvider : ConnectorProvider {
PASSWORD,
true,
),
ConnectorTypeConfigurationField(
"Tenant ID (optional, for Single Tenant bots)",
TENANT_ID,
false,
),
),
resourceAsString("/teams.svg"),
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,14 @@ import retrofit2.http.Field
import retrofit2.http.FormUrlEncoded
import retrofit2.http.Headers
import retrofit2.http.POST
import retrofit2.http.Path

interface LoginMicrosoftOnline {
@Headers("Host:login.microsoftonline.com", "Content-Type:application/x-www-form-urlencoded")
@POST("/botframework.com/oauth2/v2.0/token")
@POST("{tenantId}/oauth2/v2.0/token")
@FormUrlEncoded
fun login(
@Path("tenantId") tenantId: String,
@Field("grant_type") grantType: String = "client_credentials",
@Field("client_id") clientId: String,
@Field("client_secret") clientSecret: String,
Expand Down
7 changes: 6 additions & 1 deletion bot/connector-teams/src/main/kotlin/token/TokenHandler.kt
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,11 @@ import kotlin.concurrent.fixedRateTimer
* Handle the generation and the refresh of the token header
* This token is mandatory in request from bot to teams via microsoft-api
*/
class TokenHandler(private val appId: String, private val password: String) {
class TokenHandler(
private val appId: String,
private val password: String,
private val tenantId: String = "botframework.com",
) {
private val logger = KotlinLogging.logger {}

@Volatile
Expand Down Expand Up @@ -90,6 +94,7 @@ class TokenHandler(private val appId: String, private val password: String) {
private fun fetchToken() {
val response =
loginApi.login(
tenantId = tenantId,
clientId = appId,
clientSecret = password,
).execute()
Expand Down
Loading