Skip to content
This repository was archived by the owner on Mar 13, 2020. It is now read-only.

Commit 16732c7

Browse files
committed
Added calendar
1 parent 29fc144 commit 16732c7

6 files changed

Lines changed: 87 additions & 4 deletions

File tree

‎app.js‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ require('dotenv').config();
1010
var index = require('./routes/index');
1111
var authorize = require('./routes/authorize');
1212
var mail = require('./routes/mail');
13+
var calendar = require('./routes/calendar');
1314

1415
var app = express();
1516

@@ -28,6 +29,7 @@ app.use(express.static(path.join(__dirname, 'public')));
2829
app.use('/', index);
2930
app.use('/authorize', authorize);
3031
app.use('/mail', mail);
32+
app.use('/calendar', calendar);
3133

3234
// catch 404 and forward to error handler
3335
app.use(function(req, res, next) {

‎routes/calendar.js‎

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
var express = require('express');
2+
var router = express.Router();
3+
var authHelper = require('../helpers/auth');
4+
var graph = require('@microsoft/microsoft-graph-client');
5+
6+
/* GET /calendar */
7+
router.get('/', async function(req, res, next) {
8+
let parms = { title: 'Calendar', active: { calendar: true } };
9+
10+
const accessToken = await authHelper.getAccessToken(req.cookies, res);
11+
const userName = req.cookies.graph_user_name;
12+
13+
if (accessToken && userName) {
14+
parms.user = userName;
15+
16+
// Initialize Graph client
17+
const client = graph.Client.init({
18+
authProvider: (done) => {
19+
done(null, accessToken);
20+
}
21+
});
22+
23+
// Set start of the calendar view to today at midnight
24+
const start = new Date(new Date().setHours(0,0,0));
25+
// Set end of the calendar view to 7 days from start
26+
const end = new Date(new Date(start).setDate(start.getDate() + 7));
27+
28+
try {
29+
// Get the first 10 events for the coming week
30+
const result = await client
31+
.api(`/me/calendarView?startDateTime=${start.toISOString()}&endDateTime=${end.toISOString()}`)
32+
.top(10)
33+
.select('subject,start,end,attendees')
34+
.orderby('start/dateTime DESC')
35+
.get();
36+
37+
parms.events = result.value;
38+
res.render('calendar', parms);
39+
} catch (err) {
40+
parms.message = 'Error retrieving events';
41+
parms.error = { status: `${err.code}: ${err.message}` };
42+
parms.debug = JSON.stringify(err.body, null, 2);
43+
res.render('error', parms);
44+
}
45+
46+
} else {
47+
// Redirect to home
48+
res.redirect('/');
49+
}
50+
});
51+
52+
module.exports = router;

‎routes/mail.js‎

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ var router = express.Router();
33
var authHelper = require('../helpers/auth');
44
var graph = require('@microsoft/microsoft-graph-client');
55

6-
/* GET home page. */
6+
/* GET /mail */
77
router.get('/', async function(req, res, next) {
88
let parms = { title: 'Inbox', active: { inbox: true } };
99

@@ -30,6 +30,7 @@ router.get('/', async function(req, res, next) {
3030
.get();
3131

3232
parms.messages = result.value;
33+
res.render('mail', parms);
3334
} catch (err) {
3435
parms.message = 'Error retrieving messages';
3536
parms.error = { status: `${err.code}: ${err.message}` };
@@ -41,8 +42,6 @@ router.get('/', async function(req, res, next) {
4142
// Redirect to home
4243
res.redirect('/');
4344
}
44-
45-
res.render('mail', parms);
4645
});
4746

4847
module.exports = router;

‎sample.env‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
APP_ID="YOUR APP ID HERE"
22
APP_PASSWORD="YOUR APP PASSWORD HERE"
3-
APP_SCOPES="openid profile offline_access User.Read Mail.Read"
3+
APP_SCOPES="openid profile offline_access User.Read Mail.Read Calendars.Read"
44
REDIRECT_URI="http://localhost:3000/authorize"

‎views/calendar.hbs‎

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<h2>Calendar</h2>
2+
<table class="table">
3+
<thead class="thead-light">
4+
<th scope="col">Subject</th>
5+
<th scope="col">Start</th>
6+
<th scope="col">End</th>
7+
<th scope="col">Attendees</th>
8+
</thead>
9+
<tbody>
10+
{{#each events}}
11+
<tr>
12+
<td>{{this.subject}}</td>
13+
<td>{{this.start.dateTime}} ({{this.start.timeZone}})</td>
14+
<td>{{this.end.dateTime}} ({{this.end.timeZone}})</td>
15+
<td>
16+
<ul class="list-unstyled">
17+
{{#each this.attendees}}
18+
<li class="border" title="{{this.emailAddress.address}}">
19+
{{this.emailAddress.name}}
20+
</li>
21+
{{/each}}
22+
</ul>
23+
</td>
24+
</tr>
25+
{{/each}}
26+
</tbody>
27+
</table>

‎views/layout.hbs‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@
2424
<li class="nav-item{{#if active.inbox}} active{{/if}}">
2525
<a class="nav-link" href="/mail">Inbox</a>
2626
</li>
27+
<li class="nav-item{{#if active.calendar}} active{{/if}}">
28+
<a class="nav-link" href="/calendar">Calendar</a>
29+
</li>
2730
{{/if}}
2831
</ul>
2932
<ul class="navbar-nav justify-content-end">

0 commit comments

Comments
 (0)