Because why pay money for something you can do yourself?
MeetEasier is a web application that visualizes meeting room availability. It works using Exchange Web Services (EWS) with Exchange room lists in Office 365.
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.
- 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 thesingle-room
component - Added
console.log
toserver.js
to know when the server is running correctly - Updated styles slightly
- v0.1
- Initial release
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
- Optional: Install IISNode
- I've also included a
web.config
file for an IIS install
- I've also included a
- In root directory, open a terminal or cmd:
$ npm install
- Navigate to
ui-react/
. In thepackage.json
file, change: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"proxy" : "http://localhost:8080"
server.js
. - In the root directory, open a terminal or cmd:
$ npm run build
- In the root directory, open a terminal or cmd:
$ npm start
- If you want to start the react development server, in the root directory run:
$ npm start-ui-dev
app/
: Routes for EWS APIsconfig/
: All EWS functionalityscss/
: All stylesstatic/
: All global static filesui-react/
: Front end React routes and components
There are three main directories in the ui-react/src/
folder:
components/
: Components separated in folders by functionconfig/
: Customizable config file (see defails below in Customization section)layouts/
: Layout components for the two different layouts used.
flightboard/
: All components related to the flightboard or "all meeting" layoutglobal
: Components that will be used by both layoutssingle-room
: All components related to the Single Room layout
board/
: Actual flightboard component itselfclock/
: Clock component for the upper right hand of the displaynavbar/
: Top navigation/title bar pieceroom-filter/
: Room list filter in the navbar
not-found/
: A "not found" page if an error or "404" occurssocket/
: A service component to run the web socket connection for updating the flightboard and single room display
clock/
: Clock component for the upper right hand of the displaydisplay/
: All other features of the single room display
flightboard.config.js
: Simple customization config explained in the Customization section
flightboard/
: Layout for flightboard displaysingle-room/
: Layout for single room display
-
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
- 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 rungrunt
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.
- All React components can be locally styled by adding a new
- 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 areerror
,warn
,info
,verbose
,debug
,silly
). Default value isinfo
. Severities equal or lower thandebug
will log responses of the EWS requests to the console.
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 .