mirror of
https://github.com/MichMich/MagicMirror.git
synced 2025-06-27 19:53:36 +00:00
Added support for more authentication methods for the default calendar module
HTTP Basic, Digest and OAuth2/Bearer authentications are now supported by the calendar module
This commit is contained in:
parent
bd0de83d31
commit
9848f80630
BIN
modules/default/calendar.zip
Normal file
BIN
modules/default/calendar.zip
Normal file
Binary file not shown.
@ -58,12 +58,16 @@ config: {
|
|||||||
{
|
{
|
||||||
url: 'http://www.calendarlabs.com/templates/ical/US-Holidays.ics',
|
url: 'http://www.calendarlabs.com/templates/ical/US-Holidays.ics',
|
||||||
symbol: 'calendar',
|
symbol: 'calendar',
|
||||||
|
auth: {
|
||||||
|
user: 'username',
|
||||||
|
pass: 'superstrongpassword',
|
||||||
|
method: 'basic'
|
||||||
|
}
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
````
|
````
|
||||||
|
|
||||||
|
|
||||||
#### Calendar configuration options:
|
#### Calendar configuration options:
|
||||||
| Option | Description
|
| Option | Description
|
||||||
| --------------------- | -----------
|
| --------------------- | -----------
|
||||||
@ -71,7 +75,14 @@ config: {
|
|||||||
| `symbol` | The symbol to show in front of an event. This property is optional. <br><br> **Possible values:** See [Font Awesome](http://fontawesome.io/icons/) website.
|
| `symbol` | The symbol to show in front of an event. This property is optional. <br><br> **Possible values:** See [Font Awesome](http://fontawesome.io/icons/) website.
|
||||||
| `color` | The font color of an event from this calendar. This property should be set if the config is set to colored: true. <br><br> **Possible values:** HEX, RGB or RGBA values (#efefef, rgb(242,242,242), rgba(242,242,242,0.5)).
|
| `color` | The font color of an event from this calendar. This property should be set if the config is set to colored: true. <br><br> **Possible values:** HEX, RGB or RGBA values (#efefef, rgb(242,242,242), rgba(242,242,242,0.5)).
|
||||||
| `repeatingCountTitle` | The count title for yearly repating events in this calendar. <br><br> **Example:** `'Birthday'`
|
| `repeatingCountTitle` | The count title for yearly repating events in this calendar. <br><br> **Example:** `'Birthday'`
|
||||||
| `user` | The username for HTTP Basic authentication.
|
|
||||||
| `pass` | The password for HTTP Basic authentication.
|
|
||||||
| `maximumEntries` | The maximum number of events shown. Overrides global setting. **Possible values:** `0` - `100`
|
| `maximumEntries` | The maximum number of events shown. Overrides global setting. **Possible values:** `0` - `100`
|
||||||
| `maximumNumberOfDays` | The maximum number of days in the future. Overrides global setting
|
| `maximumNumberOfDays` | The maximum number of days in the future. Overrides global setting
|
||||||
|
| `auth` | The object containing options for authentication against the calendar.
|
||||||
|
|
||||||
|
|
||||||
|
#### Calendar authentication options:
|
||||||
|
| Option | Description
|
||||||
|
| --------------------- | -----------
|
||||||
|
| `user` | The username for HTTP authentication.
|
||||||
|
| `pass` | The password for HTTP authentication. (If you use Bearer authentication, this should be your BearerToken.)
|
||||||
|
| `method` | Which authentication method should be used. HTTP Basic, Digest and Bearer authentication methods are supported. Basic authentication is used by default if this option is omitted. **Possible values:** `digest`, `basic`, `bearer` **Default value:** `basic`
|
||||||
|
@ -72,10 +72,18 @@ Module.register("calendar", {
|
|||||||
|
|
||||||
var calendarConfig = {
|
var calendarConfig = {
|
||||||
maximumEntries: calendar.maximumEntries,
|
maximumEntries: calendar.maximumEntries,
|
||||||
maximumNumberOfDays: calendar.maximumNumberOfDays,
|
maximumNumberOfDays: calendar.maximumNumberOfDays
|
||||||
};
|
};
|
||||||
|
|
||||||
this.addCalendar(calendar.url, calendar.user, calendar.pass, calendarConfig);
|
// we check user and password here for backwards compatibility with old configs
|
||||||
|
if(calendar.user && calendar.pass){
|
||||||
|
calendar.auth = {
|
||||||
|
user: calendar.user,
|
||||||
|
pass: calendar.pass
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.addCalendar(calendar.url, calendar.auth, calendarConfig);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.calendarData = {};
|
this.calendarData = {};
|
||||||
@ -313,14 +321,13 @@ Module.register("calendar", {
|
|||||||
*
|
*
|
||||||
* argument url string - Url to add.
|
* argument url string - Url to add.
|
||||||
*/
|
*/
|
||||||
addCalendar: function (url, user, pass, calendarConfig) {
|
addCalendar: function (url, auth, calendarConfig) {
|
||||||
this.sendSocketNotification("ADD_CALENDAR", {
|
this.sendSocketNotification("ADD_CALENDAR", {
|
||||||
url: url,
|
url: url,
|
||||||
maximumEntries: calendarConfig.maximumEntries || this.config.maximumEntries,
|
maximumEntries: calendarConfig.maximumEntries || this.config.maximumEntries,
|
||||||
maximumNumberOfDays: calendarConfig.maximumNumberOfDays || this.config.maximumNumberOfDays,
|
maximumNumberOfDays: calendarConfig.maximumNumberOfDays || this.config.maximumNumberOfDays,
|
||||||
fetchInterval: this.config.fetchInterval,
|
fetchInterval: this.config.fetchInterval,
|
||||||
user: user,
|
auth: auth
|
||||||
pass: pass
|
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
var ical = require("./vendor/ical.js");
|
var ical = require("./vendor/ical.js");
|
||||||
var moment = require("moment");
|
var moment = require("moment");
|
||||||
|
|
||||||
var CalendarFetcher = function(url, reloadInterval, maximumEntries, maximumNumberOfDays, user, pass) {
|
var CalendarFetcher = function(url, reloadInterval, maximumEntries, maximumNumberOfDays, auth) {
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
var reloadTimer = null;
|
var reloadTimer = null;
|
||||||
@ -32,11 +32,23 @@ var CalendarFetcher = function(url, reloadInterval, maximumEntries, maximumNumbe
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
if (user && pass) {
|
if (auth) {
|
||||||
|
if(auth.method === 'bearer'){
|
||||||
opts.auth = {
|
opts.auth = {
|
||||||
user: user,
|
bearer: auth.pass
|
||||||
pass: pass,
|
}
|
||||||
sendImmediately: true
|
|
||||||
|
}else{
|
||||||
|
opts.auth = {
|
||||||
|
user: auth.user,
|
||||||
|
pass: auth.pass
|
||||||
|
};
|
||||||
|
|
||||||
|
if(auth.method === 'digest'){
|
||||||
|
opts.auth.sendImmediately = false;
|
||||||
|
}else{
|
||||||
|
opts.auth.sendImmediately = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -47,7 +59,7 @@ var CalendarFetcher = function(url, reloadInterval, maximumEntries, maximumNumbe
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
//console.log(data);
|
// console.log(data);
|
||||||
newEvents = [];
|
newEvents = [];
|
||||||
|
|
||||||
var limitFunction = function(date, i) {return i < maximumEntries;};
|
var limitFunction = function(date, i) {return i < maximumEntries;};
|
||||||
|
@ -8,14 +8,22 @@
|
|||||||
|
|
||||||
var CalendarFetcher = require("./calendarfetcher.js");
|
var CalendarFetcher = require("./calendarfetcher.js");
|
||||||
|
|
||||||
var url = "https://calendar.google.com/calendar/ical/pkm1t2uedjbp0uvq1o7oj1jouo%40group.calendar.google.com/private-08ba559f89eec70dd74bbd887d0a3598/basic.ics";
|
var url = "https://calendar.google.com/calendar/ical/pkm1t2uedjbp0uvq1o7oj1jouo%40group.calendar.google.com/private-08ba559f89eec70dd74bbd887d0a3598/basic.ics"; // Standard test URL
|
||||||
|
// var url = "https://www.googleapis.com/calendar/v3/calendars/primary/events/"; // URL for Bearer auth (must be configured in Google OAuth2 first)
|
||||||
var fetchInterval = 60 * 60 * 1000;
|
var fetchInterval = 60 * 60 * 1000;
|
||||||
var maximumEntries = 10;
|
var maximumEntries = 10;
|
||||||
var maximumNumberOfDays = 365;
|
var maximumNumberOfDays = 365;
|
||||||
|
var user = "magicmirror";
|
||||||
|
var pass = "MyStrongPass";
|
||||||
|
|
||||||
|
var auth = {
|
||||||
|
user: user,
|
||||||
|
pass: pass
|
||||||
|
};
|
||||||
|
|
||||||
console.log("Create fetcher ...");
|
console.log("Create fetcher ...");
|
||||||
|
|
||||||
fetcher = new CalendarFetcher(url, fetchInterval, maximumEntries, maximumNumberOfDays);
|
fetcher = new CalendarFetcher(url, fetchInterval, maximumEntries, maximumNumberOfDays, auth);
|
||||||
|
|
||||||
fetcher.onReceive(function(fetcher) {
|
fetcher.onReceive(function(fetcher) {
|
||||||
console.log(fetcher.events());
|
console.log(fetcher.events());
|
||||||
|
@ -24,7 +24,7 @@ module.exports = NodeHelper.create({
|
|||||||
socketNotificationReceived: function(notification, payload) {
|
socketNotificationReceived: function(notification, payload) {
|
||||||
if (notification === "ADD_CALENDAR") {
|
if (notification === "ADD_CALENDAR") {
|
||||||
//console.log('ADD_CALENDAR: ');
|
//console.log('ADD_CALENDAR: ');
|
||||||
this.createFetcher(payload.url, payload.fetchInterval, payload.maximumEntries, payload.maximumNumberOfDays, payload.user, payload.pass);
|
this.createFetcher(payload.url, payload.fetchInterval, payload.maximumEntries, payload.maximumNumberOfDays, payload.auth);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -36,7 +36,7 @@ module.exports = NodeHelper.create({
|
|||||||
* attribute reloadInterval number - Reload interval in milliseconds.
|
* attribute reloadInterval number - Reload interval in milliseconds.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
createFetcher: function(url, fetchInterval, maximumEntries, maximumNumberOfDays, user, pass) {
|
createFetcher: function(url, fetchInterval, maximumEntries, maximumNumberOfDays, auth) {
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
if (!validUrl.isUri(url)) {
|
if (!validUrl.isUri(url)) {
|
||||||
@ -47,7 +47,7 @@ module.exports = NodeHelper.create({
|
|||||||
var fetcher;
|
var fetcher;
|
||||||
if (typeof self.fetchers[url] === "undefined") {
|
if (typeof self.fetchers[url] === "undefined") {
|
||||||
console.log("Create new calendar fetcher for url: " + url + " - Interval: " + fetchInterval);
|
console.log("Create new calendar fetcher for url: " + url + " - Interval: " + fetchInterval);
|
||||||
fetcher = new CalendarFetcher(url, fetchInterval, maximumEntries, maximumNumberOfDays, user, pass);
|
fetcher = new CalendarFetcher(url, fetchInterval, maximumEntries, maximumNumberOfDays, auth);
|
||||||
|
|
||||||
fetcher.onReceive(function(fetcher) {
|
fetcher.onReceive(function(fetcher) {
|
||||||
//console.log('Broadcast events.');
|
//console.log('Broadcast events.');
|
||||||
|
Loading…
x
Reference in New Issue
Block a user