Skip to content

Commit

Permalink
CC v5.4.1 Release Changes (#1063)
Browse files Browse the repository at this point in the history
* CC v5.4.1 release
  • Loading branch information
v-royavinash authored Jun 14, 2023
1 parent 229c711 commit 0543bf0
Show file tree
Hide file tree
Showing 82 changed files with 14,975 additions and 37,216 deletions.
4 changes: 2 additions & 2 deletions Build/UserExclusion.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@
<!--<Exclusion Type="FolderPathStart">ABC|XYZ</Exclusion>-->

<!--Each of these file types will be completely skipped for the entire scan -->
<!--<Exclusion Type="FileType">.ABC|.XYZ</Exclusion>-->
<!--<Exclusion Type="FileType">.ABC|.XYZ</Exclusion> -->

<!--The specified file names will be skipped during the scan regardless which folder they are in -->
<!--<Exclusion Type="FileName">ABC.TXT|XYZ.CS</Exclusion>-->
<!--<Exclusion Type="FileName">ABC.TXT|XYZ.CS</Exclusion> -->
</PoliCheckExclusions>
9 changes: 4 additions & 5 deletions Deployment/GCCH/azuredeploy.json
Original file line number Diff line number Diff line change
Expand Up @@ -109,10 +109,10 @@
"customDomainOption": {
"type": "string",
"allowedValues": [
"Custom domain name (recommended)",
"Azure Front Door"
"Custom domain name",
"Azure Front Door (recommended)"
],
"defaultValue": "Azure Front Door",
"defaultValue": "Azure Front Door (recommended)",
"metadata": {
"description": "How the app will be hosted on a domain that is not *.azurewebsites.net. Azure Front Door is an easy option that the template can set up automatically, but it comes with ongoing monthly costs. "
}
Expand Down Expand Up @@ -293,7 +293,7 @@
],
"isSharedPlan": "[contains(variables('sharedSkus'), parameters('hostingPlanSku'))]",
"skuFamily": "[if(equals(parameters('hostingPlanSku'), 'Shared'), 'D', take(parameters('hostingPlanSku'), 1))]",
"useFrontDoor": "[equals(parameters('customDomainOption'), 'Azure Front Door')]",
"useFrontDoor": "[equals(parameters('customDomainOption'), 'Azure Front Door (recommended)')]",
"frontDoorName": "[parameters('baseResourceName')]",
"frontDoorDomain": "[toLower(concat(variables('frontDoorName'), '.azurefd.us'))]",
"ProactivelyInstallUserApp": "[parameters('ProactivelyInstallUserApp')]",
Expand Down Expand Up @@ -648,7 +648,6 @@
"WEBSITE_LOAD_CERTIFICATES": "*",
"APPINSIGHTS_INSTRUMENTATIONKEY": "[concat('@Microsoft.KeyVault(SecretUri=', reference(variables('AppInsightsSecretResourceId'), '2015-06-01').secretUriWithVersion, ')')]",
"WEBSITE_NODE_DEFAULT_VERSION": "16.13.0",
"WEBSITE_NPM_DEFAULT_VERSION": "8.19.2",
"KeyVault:Url": "[variables('keyVaultUrl')]",
"DOTNET_ADD_GLOBAL_TOOLS_TO_PATH": "false",
"REACT_APP_HEADERTEXT": "[parameters('headerText')]",
Expand Down
10 changes: 4 additions & 6 deletions Deployment/azuredeploy.json
Original file line number Diff line number Diff line change
Expand Up @@ -109,10 +109,10 @@
"customDomainOption": {
"type": "string",
"allowedValues": [
"Custom domain name (recommended)",
"Azure Front Door"
"Custom domain name",
"Azure Front Door (recommended)"
],
"defaultValue": "Azure Front Door",
"defaultValue": "Azure Front Door (recommended)",
"metadata": {
"description": "How the app will be hosted on a domain that is not *.azurewebsites.net. Azure Front Door is an easy option that the template can set up automatically, but it comes with ongoing monthly costs. "
}
Expand Down Expand Up @@ -293,7 +293,7 @@
],
"isSharedPlan": "[contains(variables('sharedSkus'), parameters('hostingPlanSku'))]",
"skuFamily": "[if(equals(parameters('hostingPlanSku'), 'Shared'), 'D', take(parameters('hostingPlanSku'), 1))]",
"useFrontDoor": "[equals(parameters('customDomainOption'), 'Azure Front Door')]",
"useFrontDoor": "[equals(parameters('customDomainOption'), 'Azure Front Door (recommended)')]",
"frontDoorName": "[parameters('baseResourceName')]",
"frontDoorDomain": "[toLower(concat(variables('frontDoorName'), '.azurefd.net'))]",
"ProactivelyInstallUserApp": "[parameters('ProactivelyInstallUserApp')]",
Expand Down Expand Up @@ -638,7 +638,6 @@
"DOTNET_ADD_GLOBAL_TOOLS_TO_PATH": "false",
"REACT_APP_HEADERTEXT": "[parameters('headerText')]",
"REACT_APP_HEADERIMAGE": "[parameters('headerLogoUrl')]"

}
},
{
Expand Down Expand Up @@ -919,7 +918,6 @@
"name": "[variables('keyvaultName')]",
"apiVersion": "2016-10-01",
"location": "[parameters('location')]",

"tags": {
"displayName": "KeyVault"
},
Expand Down
10 changes: 5 additions & 5 deletions Deployment/azuredeploywithcert.json
Original file line number Diff line number Diff line change
Expand Up @@ -115,10 +115,10 @@
"customDomainOption": {
"type": "string",
"allowedValues": [
"Custom domain name (recommended)",
"Azure Front Door"
"Custom domain name",
"Azure Front Door (recommended)"
],
"defaultValue": "Azure Front Door",
"defaultValue": "Azure Front Door (recommended)",
"metadata": {
"description": "How the app will be hosted on a domain that is not *.azurewebsites.net. Azure Front Door is an easy option that the template can set up automatically, but it comes with ongoing monthly costs. "
}
Expand Down Expand Up @@ -299,7 +299,7 @@
],
"isSharedPlan": "[contains(variables('sharedSkus'), parameters('hostingPlanSku'))]",
"skuFamily": "[if(equals(parameters('hostingPlanSku'), 'Shared'), 'D', take(parameters('hostingPlanSku'), 1))]",
"useFrontDoor": "[equals(parameters('customDomainOption'), 'Azure Front Door')]",
"useFrontDoor": "[equals(parameters('customDomainOption'), 'Azure Front Door (recommended)')]",
"frontDoorName": "[parameters('baseResourceName')]",
"frontDoorDomain": "[toLower(concat(variables('frontDoorName'), '.azurefd.net'))]",
"ProactivelyInstallUserApp": "[parameters('ProactivelyInstallUserApp')]",
Expand Down Expand Up @@ -995,7 +995,7 @@
"tenantId": "[reference(concat('Microsoft.Web/sites/', variables('botAppName')), '2018-02-01', 'Full').identity.tenantId]",
"objectId": "[parameters('objectId')]",
"permissions": {
"certificates": [ "get", "list", "create", "update" ]
"certificates": ["get", "list", "create", "update"]
}
}
],
Expand Down
4 changes: 2 additions & 2 deletions Deployment/deploy.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -1101,7 +1101,7 @@ function logout {
if(($null -eq $deploymentOutput) -or ( $null -eq $deploymentOutput.properties) -or ($null -eq $deploymentOutput.properties.Outputs) -or ($deploymentOutput.properties.Outputs.keyVaultName) -or ($deploymentOutput.properties.Outputs.keyVaultName.Value))
{
$keyVaultName = $parameters.BaseResourceName.Value + 'vault'
if($parameters.customDomainOption.Value -eq 'Azure Front Door')
if($parameters.customDomainOption.Value -eq 'Azure Front Door (recommended)')
{
$appdomainName = $parameters.BaseResourceName.Value.ToLower() + '.azurefd.net'
}
Expand Down Expand Up @@ -1138,7 +1138,7 @@ function logout {
if(($null -eq $deploymentOutput) -or ( $null -eq $deploymentOutput.properties) -or ($null -eq $deploymentOutput.properties.Outputs) -or ($deploymentOutput.properties.Outputs.keyVaultName) -or ($deploymentOutput.properties.Outputs.keyVaultName.Value))
{
$keyVaultName = $parameters.BaseResourceName.Value + 'vault'
if($parameters.customDomainOption.Value -eq 'Azure Front Door')
if($parameters.customDomainOption.Value -eq 'Azure Front Door (recommended)')
{
$appdomainName = $parameters.BaseResourceName.Value.ToLower() + '.azurefd.net'
}
Expand Down
2 changes: 1 addition & 1 deletion Deployment/parameters.json
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@
"Description": "If this is an upgrade for old version of the app template, then value should be true. Otherwise, false is default (First-time deployment)."
},
"customDomainOption": {
"Value": "Azure Front Door",
"Value": "Azure Front Door (recommended)",
"Description": "How the app will be hosted on a domain that is not *.azurewebsites.net. Azure Front Door is an easy option that the template can set up automatically, but it comes with ongoing monthly costs."
},
"proactivelyInstallUserApp": {
Expand Down
2 changes: 1 addition & 1 deletion Manifest/manifest_authors.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"$schema": "https://developer.microsoft.com/en-us/json-schemas/teams/v1.5/MicrosoftTeams.schema.json",
"manifestVersion": "1.5",
"version": "5.4.0",
"version": "5.4.1",
"id": "1c07cd26-a088-4db8-8928-ace382fa219f",
"packageName": "com.microsoft.teams.companycommunicator.authors",
"developer": {
Expand Down
2 changes: 1 addition & 1 deletion Manifest/manifest_users.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"$schema": "https://developer.microsoft.com/en-us/json-schemas/teams/v1.5/MicrosoftTeams.schema.json",
"manifestVersion": "1.5",
"version": "5.4.0",
"version": "5.4.1",
"id": "148a66bb-e83d-425a-927d-09f4299a9274",
"packageName": "com.microsoft.teams.companycommunicator",
"developer": {
Expand Down
5 changes: 3 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,15 @@ Company Communicator is a custom Teams app that enables corporate teams to creat

The app provides an easy interface for designated users to create, preview, collaborate and send messages. It's also a foundation for building custom targeted communication capabilities, such as custom telemetry on how many users acknowledged or interacted with a message.

![Company Communicator compose message screen](https://github.com/OfficeDev/microsoft-teams-company-communicator-app/wiki/images/CompanyCommunicatorCompose.png)
![Company Communicator compose message screen](https://github.com/OfficeDev/microsoft-teams-company-communicator-app/wiki/images/company-communicator-compose.png)

## Key features

* **Message creation:** Easily create messages by using a team tab where team members who are permissioned can collaborate and create messages.
* **Audience selection:** Pick from four options to target audience. Send to general channel of selected teams, send in 1:1 chat to members of selected teams, send to all users who have the app installed or send to M365 groups, distribution lists or security groups.
* **Message metrics:** Export messages delivery report.
* **Localization:** Supports multiple locales.
* **Accessibility Compliant:** Company Communicator v5.4.1 is in compliant with Microsoft accessibility standards for Web, Windows and Mac OS.
* **Feedback:** Submit your feedback to the product team.

## Get started
Expand All @@ -31,7 +32,7 @@ When you're ready to try out Company Communicator, or to use it in your own orga

## Migration

If you already have older version of Company Communicator installed, then please use this [v5 migration guide](https://github.com/OfficeDev/microsoft-teams-apps-company-communicator/wiki/v5-migration-guide). Please note that deploying the major version update, like Company Communicator version 5.3 involves more than syncing the App Service and Azure Functions, so plan to review the migration guide before migrating to latest.
If you already have older version of Company Communicator installed, then please use this [v5 migration guide](https://github.com/OfficeDev/microsoft-teams-apps-company-communicator/wiki/v5-migration-guide). Please note that deploying the major version update, like the latest version of Company Communicator involves more than syncing the App Service and Azure Functions, so plan to review the migration guide before migrating to latest.

Migrating to newer versions.

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
// <copyright file="CCBotFrameworkHttpAdapter.cs" company="Microsoft">
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
// </copyright>

namespace Microsoft.Teams.Apps.CompanyCommunicator.Common.Adapter
{
using System;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Bot.Builder;
using Microsoft.Bot.Builder.Integration.AspNet.Core;
using Microsoft.Bot.Connector.Authentication;
using Microsoft.Bot.Schema;
using Microsoft.Teams.Apps.CompanyCommunicator.Common.Secrets;

/// <summary>
/// Bot framework http adapter instance.
/// </summary>
public class CCBotFrameworkHttpAdapter : BotFrameworkHttpAdapter, ICCBotFrameworkHttpAdapter
{
private readonly ICertificateProvider certificateProvider;

/// <summary>
/// Initializes a new instance of the <see cref="CCBotFrameworkHttpAdapter"/> class.
/// </summary>
/// <param name="credentialProvider">credential provider.</param>
/// <param name="certificateProvider">certificate provider.</param>
public CCBotFrameworkHttpAdapter(
ICredentialProvider credentialProvider,
ICertificateProvider certificateProvider)
: base(credentialProvider)
{
this.certificateProvider = certificateProvider;
}

/// <inheritdoc/>
public async Task CreateConversationUsingCertificateAsync(string channelId, string serviceUrl, AppCredentials appCredentials, ConversationParameters conversationParameters, BotCallbackHandler callback, CancellationToken cancellationToken)
{
var cert = await this.certificateProvider.GetCertificateAsync(appCredentials.MicrosoftAppId);
var options = new CertificateAppCredentialsOptions()
{
AppId = appCredentials.MicrosoftAppId,
ClientCertificate = cert,
};

await this.CreateConversationAsync(channelId, serviceUrl, new CertificateAppCredentials(options) as AppCredentials, conversationParameters, callback, cancellationToken);
}

/// <inheritdoc/>
public async Task CreateConversationUsingSecretAsync(string channelId, string serviceUrl, MicrosoftAppCredentials credentials, ConversationParameters conversationParameters, BotCallbackHandler callback, CancellationToken cancellationToken)
{
await this.CreateConversationAsync(channelId, serviceUrl, credentials, conversationParameters, callback, cancellationToken);
}

/// <inheritdoc/>
protected override async Task<AppCredentials> BuildCredentialsAsync(string appId, string oAuthScope = null)
{
appId = appId ?? throw new ArgumentNullException(nameof(appId));

if (this.certificateProvider.IsCertificateAuthenticationEnabled())
{
var cert = await this.certificateProvider.GetCertificateAsync(appId);
var options = new CertificateAppCredentialsOptions()
{
AppId = appId,
ClientCertificate = cert,
OauthScope = oAuthScope,
};

var certificateAppCredentials = new CertificateAppCredentials(options) as AppCredentials;
return certificateAppCredentials;
}
else
{
return await base.BuildCredentialsAsync(appId, oAuthScope);
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,11 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="AdaptiveCards" Version="1.0.6" />
<PackageReference Include="Azure.Core" Version="1.19.0" />
<PackageReference Include="Azure.Core" Version="1.25.0" />
<PackageReference Include="Azure.Identity" Version="1.3.0" />
<PackageReference Include="Azure.Messaging.ServiceBus" Version="7.1.2" />
<PackageReference Include="Azure.Security.KeyVault.Certificates" Version="4.2.0" />
<PackageReference Include="Azure.Storage.Blobs" Version="12.8.3" />
<PackageReference Include="Azure.Storage.Blobs" Version="12.13.0" />
<PackageReference Include="Microsoft.AspNetCore.Http" Version="2.1.22" />
<PackageReference Include="Microsoft.Azure.Cosmos.Table" Version="1.0.1" />
<PackageReference Include="Microsoft.Azure.ServiceBus" Version="5.1.3" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
<AdditionalFiles Include="..\stylecop.json" Link="stylecop.json" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Azure.Storage.Blobs" Version="12.8.3" />
<PackageReference Include="Azure.Storage.Blobs" Version="12.13.0" />
<PackageReference Include="Microsoft.Azure.Functions.Extensions" Version="1.1.0" />
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.DurableTask" Version="2.6.0" />
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.ServiceBus" Version="4.3.1" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
<FrameworkReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Azure.Storage.Blobs" Version="12.8.3" />
<PackageReference Include="Azure.Storage.Blobs" Version="12.13.0" />
<PackageReference Include="CsvHelper" Version="15.0.5" />
<PackageReference Include="Microsoft.Azure.Functions.Extensions" Version="1.1.0" />
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.DurableTask" Version="2.6.0" />
Expand Down
Loading

0 comments on commit 0543bf0

Please sign in to comment.