Cisco Meeting Server Outlook Add-In

Get CMS Meeting Information while scheduling Outlook meeting

Cisco Meeting Server is an on-premies meeting server. This Add-In is created using CMS API's πŸ‘€, some Python 🐍 and some JavaScript π’₯. We have released a new version, better than our PoC version, keeping simple deployments, easy of use in mind🧠 .

Feel free to provide us any feedbacks on cmsdevelopers@cisco.com ❀️

Let's dive 🐬 in...

Disclaimer:

  • PLEASE DO NOT SCALE TEST THIS ADD-IN WHEN YOUR CMS CLUSTER IS BUSY SERVING MEETINGS
  • DO NOT DEPLOY THIS MIDDLEWARE IN DMZ, AS WE HAVE NOT EVALUATED ANY SECURITY REQUIREMENT FOR THIS SOLUTION.
  • NO CISCO TAC SUPPORT WILL BE PROVIDED FOR THIS ADD-IN. PLEASE REACH OUT TO cmsdevelopers@cisco.com IF YOU INTEND TO DEPLOY IN CERTAIN RESTRICTED ENVIRONMENT.
  • DOCKER IMAGES CAN BE PROVIDED IF YOU HAVE AIRGAP NETWORK AND CANNOT CREATE IMAGES. PLEASE REACH OUT TO cmsdevelopers@cisco.com. THESE IMAGES WILL BE VERIFIED AGAINST DOCKER-SCAN-PLUGIN AVAILABLE FROM DOCKER HUB. THEY WILL NOT BE CISCO APPROVED DOCKER IMAGES.
  • PLEASE DO NOT ATTEMPT TO TRY THIS ON ANY PRODUCTION SYSTEM, UNTIL YOU HAVE DONE EXTENSIVE TESTING YOURSELF (trust your testing)
  • YOU DO NOT NEED ANY ADDITIONAL LICENSES TO MAKE THIS ADD-IN WORK WITH CMS. WE USE CMS pmp AND smp LICENSE FOR CREATING SPACES

Solution Highlights:

From version 1 to version 2, we have add some flexibility and simplicity to deployments

  • This version provides:

    • Capability to get Meeting Information from existing CMS Space
    • Capability to create a new Space on-demand and get Meeting Information
    • Ability to get Instant Meeting without login into CMS Add-In
  • A middleware application needs to be deployed which

    • Acts like a bridge between Outlook Client and your CMS Environment
    • It provides you with all logs for troubleshooting
    • It does not store any credentials
    • Stores user meeting formation in Redis Cache DB, to save un-necessary API Requests to CMS.
  • The login session in Add-in is valid for 24 hours, as a result user may need to login every 24 hour.

  • This Add-In is tested and works in air-gap environments also.

Pre-requisites:

  • An Ubuntu machine with minimum 2GB RAM, 2vCPU, 50GB hard disk.

Middleware Setup

  • Install docker, docker-compose and openssl. Logout and Login after running these commands
sudo apt-get update && sudo apt-get install docker.io openssl
sudo usermod -aG docker $USER

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version
  • Internal CA Signed Certificate (Outlook Add-In only communicates via Https, hence we need certificate to be signed by CA, which your organisation trusts)
  • A hostname for the middleware (everybody needs a name 😝)
  • Network reachability between Outlook clients to Middleware to CMS Infrastructure

Add-In Support

  • This Add-in is only supported on following versions of Outlook:
    • Outlook 2013 or later on Windows
    • Outlook 2016 or later on Mac
    • Outlook on the web for Exchange 2016 or later
    • Outlook on the web for Exchange 2013
    • Outlook.com

Add-In Config Parameters

  • In version 2, we have added some configs to increase the flexibility

Modify config.env found in addInBackend Folder:

WEB_ADMIN=<cms web admin URL>
WEB_ADMIN_USERNAME=<API username>
WEB_ADMIN_PASSWORD=<API password>
WEB_BRIDGES_OPTIONS=<List of web-bridges>
INSTANT_MEETING_WEB_BRIDGE=<web-bridge hostname for instant meeting>
SPACE_TEMPLATE=<space template, to be used when creating instant meeting>
CALL_ID_PREFIX=<call-id prefix for space created for instant meeting>
JID_ATTRIBUTE=<if outlook domain is different than CMS domain>
ALLOWED_DOMAINS=<middleware hostname>
PROVISIONED_COSPACES=<True, if user have provionsioned co-spaces>
INVITATION_LANG=<Language support for invitation>

Sample config.env for reference (backend):

WEB_ADMIN=https://abc.cisco.com
WEB_ADMIN_USERNAME=admin
WEB_ADMIN_PASSWORD=admin
WEB_BRIDGES_OPTIONS=["web.cisco.com","10.48.90.99"]
INSTANT_MEETING_WEB_BRIDGE=web.cisco.com
SPACE_TEMPLATE=Provisioned Team Space
CALL_ID_PREFIX=423423
JID_ATTRIBUTE=None
ALLOWED_DOMAINS=middleware.cisco.com
PROVISIONED_COSPACES=0
INVITATION_LANG=en_GB

Modify config.env found in addInFrontend Folder:

BACKEND_URL=https://<middleware hostname>/addin/v1

Sample config.env for reference(frontend):

BACKEND_URL=https://middleware.cisco.com/addin/v1

CMS Readiness

  • In order to use this Add-In effectively, make sure you have
    • coSpace Template created on your CMS
    • CallLegProfiles assigned to you coSpace Template
    • User provisioned coSpaces when using web app for users

Deployment Steps [Online]

Stage 1: Generate Certificates

  1. Get a hostname for your middleware service, eg: middleware.cisco.com
  2. Add DNS entry for this hostname in your DNS server OR your system's /etc/host file
  3. Login to your linux machine and follow below steps:
    1. Clone this repository: git clone https://github.com/ciscocmsdevnet/cms-outlook-add-in.git
    2. Create a folder certs in this git repo: mkdir certs
    3. Generate certificate in this certs folder:
      1. Generate a CSR: sudo openssl req -new -newkey rsa:2048 -nodes -keyout certificate.key -out certificate.csr
      2. Specify necessary details required for the certificate (Country, State, hostname etc). Below snippet is just for reference [Snapshot 1]
      3. You would get key file and csr file in this certs folder: certificate.key and certificate.csr
      4. Get the CSR signed by you internal CA and copy it under same folder.

Note: Make sure CA signed certificate ends with .cer extension. If incase you receive .crt certificate from your CA, refer this link on how to convert (How can I convert a certificate file from .crt to .cer? | SonicWall)

Snapshot 1
image

Stage 2: Deploy Middleware

You need to create docker images from the code base directly. B

  1. Login to same linux server and go to repository folder
  2. Issue command: docker-compose build. This command will create new docker images
  3. Modify config.env in addInBackend folder. Refer Add-In Config Parameters section
  4. Modify config.env in addInFrontend folder. Refer Add-In Config Parameters section
  5. Lets run the service:
    1. docker-compose up -d
    2. Make sure all containers are up by : docker-compose ps

image

Stage 3: Modify Outlook Manifest files

  1. Update manifest file with your middleware hostname. In the repository refer manifest_reference.xml. Replace [Hostname] with your middleware hostname

Stage 4: Add Add-In to Outlook Clients

  1. Add this Add-in using this manifest file in your outlook client. Refer this link on how to add Add-in through file.(https://docs.microsoft.com/en-us/office/dev/add-ins/outlook/sideload-outlook-add-ins-for-testing?tabs=windows)

Deployment Steps [Offline]

  • For deployments with no internet access to create images, follow below steps:
  1. Reach out to cmsdevelopers@cisco.com to get access to docker images. A Cisco box link will be created for you to download images
  2. Load the images: docker load --input cmsschedular.tar
  3. create a file backend-config.env and copy backend mentioned in Add-In Config Parameters. Please use values relevant to your environment
  4. create file frontend-config.env and copy frontend configs mentioned Add-In Config Parameters.Please use values relevant to your environment
  5. Follow Stage 1: Generate Certificates steps
  6. Lets run the service:
    1. docker-compose up -d
    2. Make sure all containers are up by : docker-compose ps

image

Known issues

  • This solution is not scale tested or stress tested to understand the performance.

Getting help

  • In case of any questions around Add-in, reach out to cmsdevelopers@cisco.com

Getting involved

  • General instructions on how to contribute should be stated with a link to CONTRIBUTING file.
  • Do drop us a note on cmsdevelopers@cisco.com for any feature request, we would also love ❀️ to merge your code in main branch

Credits

  1. Evgenii Fedotov
  2. Saurabh Khaneja

Demo Recording

addIn.mp4

View code on GitHub

Code Exchange Community

Get help, share code, and collaborate with other developers in the Code Exchange community.View Community
Disclaimer:
Cisco provides Code Exchange for convenience and informational purposes only, with no support of any kind. This page contains information and links from third-party websites that are governed by their own separate terms. Reference to a project or contributor on this page does not imply any affiliation with or endorsement by Cisco.