Skip to content

MeetEasier is a web application that visualizes meeting room availability. It works using Exchange Web Services (EWS) with Exchange room lists in Office 365.

License

Notifications You must be signed in to change notification settings

am-jo-zt/MeetEasier

 
 

Repository files navigation

MeetEasier

Because why pay money for something you can do yourself?

Description

MeetEasier is a web application that visualizes meeting room availability. It works using Exchange Web Services (EWS) with Exchange room lists in Office 365.

Mockup 1


License

MeetEasier is licensed under the open source GNU General Public License (GPL 3.0).

In the event of wanting to commercially distribute a closed source modification of this code, please contact me.


Updates

  • v0.2
    • Changed domain to accept more than just ".com" extension
    • Changed ui-react/config/flightboard.config.js to handle all text so that the application can be multilingual
    • Added ui-react/config/singleRoom.config.js to do the same for the single-room component
    • Added console.log to server.js to know when the server is running correctly
    • Updated styles slightly
  • v0.1
    • Initial release

Assumptions

This application assumes you have:

  • Exchange Online (Office 365)
  • Conference room mailboxes organized in room lists
  • Exchange Web Services (EWS) enabled
  • A service account with access to all conference room mailboxes and EWS
  • A web server with Node.js installed to run the application

Installation

  1. Optional: Install IISNode
    • I've also included a web.config file for an IIS install
  2. In root directory, open a terminal or cmd:
    $ npm install
    
  3. Navigate to ui-react/. In the package.json file, change:
    "proxy" : "http://localhost:8080"
    
    to whatever the IP of where express is running. Typically you can use something similar to the default but you can change the IP and port as long as it coincides with what is in server.js.
  4. In the root directory, open a terminal or cmd:
    $ npm run build
    
  5. In the root directory, open a terminal or cmd:
    $ npm start
    
  6. If you want to start the react development server, in the root directory run:
    $ npm start-ui-dev
    

Root Folder Structure Explained

  • app/ : Routes for EWS APIs
  • config/ : All EWS functionality
  • scss/ : All styles
  • static/ : All global static files
  • ui-react/ : Front end React routes and components

React /src Folder Structure Explained

There are three main directories in the ui-react/src/ folder:

  • components/ : Components separated in folders by function
  • config/ : Customizable config file (see defails below in Customization section)
  • layouts/ : Layout components for the two different layouts used.

Components

  • flightboard/ : All components related to the flightboard or "all meeting" layout
  • global : Components that will be used by both layouts
  • single-room : All components related to the Single Room layout

components/flightboard/

  • board/ : Actual flightboard component itself
  • clock/ : Clock component for the upper right hand of the display
  • navbar/ : Top navigation/title bar piece
  • room-filter/ : Room list filter in the navbar

components/global/

  • not-found/ : A "not found" page if an error or "404" occurs
  • socket/ : A service component to run the web socket connection for updating the flightboard and single room display

components/single-room/

  • clock/ : Clock component for the upper right hand of the display
  • display/ : All other features of the single room display

Config

  • flightboard.config.js : Simple customization config explained in the Customization section

Layouts

  • flightboard/ : Layout for flightboard display
  • single-room/ : Layout for single room display

Customization

Simple

  • In /config/auth.js, enter your credentials and domain:

    module.exports = {
      // this user MUST have full access to all the room accounts
      'exchange' : {
        'username'  : '[email protected]',
        'password'  : 'PASSWORD',
        'uri'       : 'https://outlook.office365.com/EWS/Exchange.asmx'
      },
      'domain' : 'DOMAIN'
    };
  • Alternatively, username, password and domain and public-URL can be set as environment variable. Keep in mind that if a public-URL has been provided, this environment variable already has to be set during the build-lifecycle

    export [email protected]
    export PASSWORD=password
    export DOMAIN=domain.com
    export PUBLIC_URL=http://meet-easier.domain.com
  • In /ui-react/src/config/flightboard.config.js, manage your customizations:

    module.exports = {
        'title' : 'Conference Room Availability',
        'filterTitle' : 'Locations',
        'filterAllTitle' : 'All Conference Rooms',
        'roomsToSkip' : [
          '[email protected]'
        ],
        'socketEndpoint' : 'http://localhost:8080'
    };
  • Upload your logo to /static/img/logo.png

Advanced

  • All EWS functionality is located in config/ews.
  • To change the interval in which the web socket emits, edit the interval time in config/controller.js. By default, it is set to 1 minute.
  • To update styles, make sure you install grunt first with npm install -g grunt-cli. Then run grunt in the root directory to watch for SCSS changes. Use the .scss files located in the /scss folder.
    • All React components can be locally styled by adding a new .css file and importing it into the component itself if you'd prefer to do it that way.
  • In config/ews/rooms.js, there is a block of code on lines 37-39 that may not be necessary but were added as a convenience. Feel free to use it, comment it out, or remove it completely. It was designed for a use case where the email addresses (ex: [email protected]) do not match the corporate domain (ex: jsmith-enterprise).
    // if the email domain != your corporate domain,
    // replace email domain with domain from auth config
    var email = roomItem.Address;
    email = email.substring(0, email.indexOf('@'));
    email = email + '@' + auth.domain + '.com';
  • To change the log level, set it as an environment variable LOG_LEVEL (allowed values are error, warn, info, verbose, debug, silly). Default value is info. Severities equal or lower than debug will log responses of the EWS requests to the console.

Docker

To build the docker image, run

docker build .

Following environment variables can be set during build time:

  • PUBLIC_URL The public URL under which the application will be available. This has to be set for the websockets of the UI

To build the image with the environment variable, execute following command (with replaced URL):

docker build --build-arg PUBLIC_URL=http://meet-easier.your-domain.com .

Flightboard Layout Mockup

Mockup 3

Single Room Layout Mockup

Mockup 2


Resources & Attributions

About

MeetEasier is a web application that visualizes meeting room availability. It works using Exchange Web Services (EWS) with Exchange room lists in Office 365.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • JavaScript 75.0%
  • CSS 22.8%
  • HTML 2.2%