fix linting errors
This commit is contained in:
448
nextcloud.js
448
nextcloud.js
@@ -1,247 +1,241 @@
|
|||||||
module.exports = function (RED) {
|
module.exports = function (RED) {
|
||||||
let dav = require('dav')
|
const dav = require('dav')
|
||||||
let webdav = require('webdav')
|
const webdav = require('webdav')
|
||||||
const fs = require('fs')
|
const fs = require('fs')
|
||||||
const ICAL = require('ical.js');
|
const ICAL = require('ical.js')
|
||||||
let moment = require('moment');
|
const moment = require('moment')
|
||||||
|
|
||||||
function NextcloudConfigNode(n) {
|
function NextcloudConfigNode (n) {
|
||||||
RED.nodes.createNode(this, n)
|
RED.nodes.createNode(this, n)
|
||||||
this.address = n.address
|
this.address = n.address
|
||||||
|
}
|
||||||
|
RED.nodes.registerType('nextcloud-credentials', NextcloudConfigNode, {
|
||||||
|
credentials: {
|
||||||
|
user: { type: 'text' },
|
||||||
|
pass: { type: 'password' }
|
||||||
}
|
}
|
||||||
RED.nodes.registerType('nextcloud-credentials', NextcloudConfigNode, {
|
})
|
||||||
credentials: {
|
|
||||||
user: { type: 'text' },
|
function NextcloudCalDav (n) {
|
||||||
pass: { type: 'password' }
|
RED.nodes.createNode(this, n)
|
||||||
}
|
this.server = RED.nodes.getNode(n.server)
|
||||||
|
this.calendar = n.calendar
|
||||||
|
this.future = n.future || true
|
||||||
|
this.futureWeeks = n.futureWeeks || 4
|
||||||
|
const node = this
|
||||||
|
|
||||||
|
node.on('input', (msg) => {
|
||||||
|
// dav.debug.enabled = true;
|
||||||
|
const xhr = new dav.transport.Basic(
|
||||||
|
new dav.Credentials({
|
||||||
|
username: node.server.credentials.user,
|
||||||
|
password: node.server.credentials.pass
|
||||||
|
})
|
||||||
|
)
|
||||||
|
// Server + Basepath
|
||||||
|
let calDavUri = node.server.address + '/remote.php/dav/calendars/'
|
||||||
|
// User
|
||||||
|
calDavUri += node.server.credentials.user + '/'
|
||||||
|
dav.createAccount({ server: calDavUri, xhr: xhr, loadCollections: true, loadObjects: false })
|
||||||
|
.then(function (account) {
|
||||||
|
if (!account.calendars) {
|
||||||
|
node.error('Nextcloud:CalDAV -> no calendars found.')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// account instanceof dav.Account
|
||||||
|
account.calendars.forEach(function (calendar) {
|
||||||
|
// Wenn Kalender gesetzt ist, dann nur diesen abrufen
|
||||||
|
let c = msg.calendar || node.calendar
|
||||||
|
if (!c || !c.length || (c && c.length && c === calendar.displayName)) {
|
||||||
|
dav.listCalendarObjects(calendar, { xhr: xhr })
|
||||||
|
.then(function (calendarEntries) {
|
||||||
|
let icsList = { 'payload': { 'name': calendar.displayName, 'data': [] } }
|
||||||
|
calendarEntries.forEach(function (calendarEntry) {
|
||||||
|
try {
|
||||||
|
let jCalData = ICAL.parse(calendarEntry.calendarData)
|
||||||
|
let component = new ICAL.Component(jCalData)
|
||||||
|
let vevent = component.getFirstSubcomponent('vevent')
|
||||||
|
var event = new ICAL.Event(vevent)
|
||||||
|
icsList.payload.data.push(convertEvent(event))
|
||||||
|
} catch (error) {
|
||||||
|
node.error('Error parsing calendar data: ' + error)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
node.send(icsList)
|
||||||
|
}, function () {
|
||||||
|
node.error('Nextcloud:CalDAV -> get ics went wrong.')
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}, function () {
|
||||||
|
node.error('Nextcloud:CalDAV -> get calendars went wrong.')
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
function NextcloudCalDav(n) {
|
function convertEvent (event) {
|
||||||
RED.nodes.createNode(this, n)
|
const retVal = {}
|
||||||
this.server = RED.nodes.getNode(n.server)
|
retVal.start = event.startDate.toString()
|
||||||
this.calendar = n.calendar
|
retVal.end = event.endDate.toString()
|
||||||
this.future = n.future || true;
|
retVal.summary = event.summary || ''
|
||||||
this.futureWeeks = n.futureWeeks || 4;
|
retVal.description = event.description || ''
|
||||||
let node = this
|
retVal.attendees = event.attendees
|
||||||
|
retVal.duration = event.duration
|
||||||
|
retVal.location = event.location || ''
|
||||||
|
retVal.organizer = event.organizer || ''
|
||||||
|
retVal.uid = event.uid || ''
|
||||||
|
retVal.isRecurring = event.isRecurring()
|
||||||
|
return retVal
|
||||||
|
}
|
||||||
|
}
|
||||||
|
RED.nodes.registerType('nextcloud-caldav', NextcloudCalDav)
|
||||||
|
|
||||||
node.on('input', function (msg) {
|
function NextcloudCardDav (n) {
|
||||||
|
RED.nodes.createNode(this, n)
|
||||||
|
this.server = RED.nodes.getNode(n.server)
|
||||||
|
this.addressBook = n.addressBook
|
||||||
|
const node = this
|
||||||
|
|
||||||
//dav.debug.enabled = true;
|
node.on('input', (msg) => {
|
||||||
const xhr = new dav.transport.Basic(
|
const xhr = new dav.transport.Basic(
|
||||||
new dav.Credentials({
|
new dav.Credentials({
|
||||||
username: node.server.credentials.user,
|
username: node.server.credentials.user,
|
||||||
password: node.server.credentials.pass
|
password: node.server.credentials.pass
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
// Server + Basepath
|
|
||||||
let calDavUri = node.server.address + '/remote.php/dav/calendars/'
|
// Server + Basepath
|
||||||
// User
|
let cardDavUri = node.server.address + '/remote.php/dav/addressbooks/users/'
|
||||||
calDavUri += node.server.credentials.user + '/'
|
// User
|
||||||
dav.createAccount({ server: calDavUri, xhr: xhr, loadCollections: true, loadObjects: false })
|
cardDavUri += node.server.credentials.user + '/'
|
||||||
.then(function (account) {
|
// ToDo Filter ?
|
||||||
if (!account.calendars) {
|
dav.createAccount({ server: cardDavUri, xhr: xhr, accountType: 'carddav' })
|
||||||
node.error('Nextcloud:CalDAV -> no calendars found.')
|
.then(function (account) {
|
||||||
return
|
if (!account.addressBooks) {
|
||||||
|
node.error('Nextcloud:CardDAV -> no addressbooks found.')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// account instanceof dav.Account
|
||||||
|
account.addressBooks.forEach(function (addressBook) {
|
||||||
|
// Wenn Adressbuch gesetzt ist, dann nur diesen abrufen
|
||||||
|
let c = msg.addressBook || node.addressBook
|
||||||
|
if (!c || !c.length || (c && c.length && c === addressBook.displayName)) {
|
||||||
|
dav.listVCards(addressBook, { xhr: xhr })
|
||||||
|
.then(function (addressBookEntries) {
|
||||||
|
let vcfList = { 'payload': { 'name': addressBook.displayName, 'data': [] } }
|
||||||
|
addressBookEntries.forEach(function (addressBookEntry) {
|
||||||
|
const keyValue = addressBookEntry.addressData.split('\n')
|
||||||
|
let vcfJson = {}
|
||||||
|
for (let x = 0; x < keyValue.length; x++) {
|
||||||
|
const temp = keyValue[x].split(':')
|
||||||
|
vcfJson[temp[0]] = temp[1]
|
||||||
}
|
}
|
||||||
// account instanceof dav.Account
|
vcfList.payload.data.push(vcfJson)
|
||||||
account.calendars.forEach(function (calendar) {
|
})
|
||||||
// Wenn Kalender gesetzt ist, dann nur diesen abrufen
|
node.send(vcfList)
|
||||||
let c = msg.calendar || node.calendar
|
|
||||||
if (!c || !c.length || (c && c.length && c === calendar.displayName)) {
|
|
||||||
dav.listCalendarObjects(calendar, { xhr: xhr })
|
|
||||||
.then(function (calendarEntries) {
|
|
||||||
let icsList = { 'payload': { 'name': calendar.displayName, 'data': [] } }
|
|
||||||
calendarEntries.forEach(function (calendarEntry) {
|
|
||||||
try {
|
|
||||||
let jCalData = ICAL.parse(calendarEntry.calendarData);
|
|
||||||
let component = new ICAL.Component(jCalData);
|
|
||||||
let vevent = component.getFirstSubcomponent('vevent');
|
|
||||||
var event = new ICAL.Event(vevent);
|
|
||||||
icsList.payload.data.push(convertEvent(event));
|
|
||||||
} catch (error) {
|
|
||||||
node.error("Error parsing calendar data: " + error);
|
|
||||||
}
|
|
||||||
})
|
|
||||||
node.send(icsList);
|
|
||||||
}, function () {
|
|
||||||
node.error('Nextcloud:CalDAV -> get ics went wrong.')
|
|
||||||
})
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}, function () {
|
}, function () {
|
||||||
node.error('Nextcloud:CalDAV -> get calendars went wrong.')
|
node.error('Nextcloud:CardDAV -> get cards went wrong.')
|
||||||
})
|
})
|
||||||
})
|
|
||||||
|
|
||||||
function convertEvent(event) {
|
|
||||||
let retVal = {};
|
|
||||||
retVal.start = event.startDate.toString();
|
|
||||||
retVal.end = event.endDate.toString();
|
|
||||||
retVal.summary = event.summary || '';
|
|
||||||
retVal.description = event.description || '';
|
|
||||||
retVal.attendees = event.attendees;
|
|
||||||
retVal.duration = event.duration;
|
|
||||||
retVal.location = event.location || '';
|
|
||||||
retVal.organizer = event.organizer || '';
|
|
||||||
retVal.uid = event.uid || '';
|
|
||||||
retVal.isRecurring = event.isRecurring();
|
|
||||||
return retVal;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
RED.nodes.registerType('nextcloud-caldav', NextcloudCalDav)
|
|
||||||
|
|
||||||
|
|
||||||
function NextcloudCardDav(n) {
|
|
||||||
RED.nodes.createNode(this, n)
|
|
||||||
this.server = RED.nodes.getNode(n.server)
|
|
||||||
this.addressBook = n.addressBook
|
|
||||||
let node = this
|
|
||||||
|
|
||||||
node.on('input', function (msg) {
|
|
||||||
const xhr = new dav.transport.Basic(
|
|
||||||
new dav.Credentials({
|
|
||||||
username: node.server.credentials.user,
|
|
||||||
password: node.server.credentials.pass
|
|
||||||
})
|
|
||||||
)
|
|
||||||
|
|
||||||
// Server + Basepath
|
|
||||||
let cardDavUri = node.server.address + '/remote.php/dav/addressbooks/users/'
|
|
||||||
// User
|
|
||||||
cardDavUri += node.server.credentials.user + '/'
|
|
||||||
// ToDo Filter ?
|
|
||||||
dav.createAccount({ server: cardDavUri, xhr: xhr, accountType: 'carddav' })
|
|
||||||
.then(function (account) {
|
|
||||||
if (!account.addressBooks) {
|
|
||||||
node.error('Nextcloud:CardDAV -> no addressbooks found.')
|
|
||||||
return
|
|
||||||
}
|
|
||||||
// account instanceof dav.Account
|
|
||||||
account.addressBooks.forEach(function (addressBook) {
|
|
||||||
// Wenn Adressbuch gesetzt ist, dann nur diesen abrufen
|
|
||||||
let c = msg.addressBook || node.addressBook
|
|
||||||
if (!c || !c.length || (c && c.length && c === addressBook.displayName)) {
|
|
||||||
dav.listVCards(addressBook, { xhr: xhr })
|
|
||||||
.then(function (addressBookEntries) {
|
|
||||||
let vcfList = { 'payload': { 'name': addressBook.displayName, 'data': [] } }
|
|
||||||
addressBookEntries.forEach(function (addressBookEntry) {
|
|
||||||
const keyValue = addressBookEntry.addressData.split('\n')
|
|
||||||
let vcfJson = {}
|
|
||||||
for (let x = 0; x < keyValue.length; x++) {
|
|
||||||
const temp = keyValue[x].split(':')
|
|
||||||
vcfJson[temp[0]] = temp[1]
|
|
||||||
}
|
|
||||||
vcfList.payload.data.push(vcfJson)
|
|
||||||
})
|
|
||||||
node.send(vcfList)
|
|
||||||
}, function () {
|
|
||||||
node.error('Nextcloud:CardDAV -> get cards went wrong.')
|
|
||||||
})
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}, function () {
|
|
||||||
node.error('Nextcloud:CardDAV -> get addressBooks went wrong.')
|
|
||||||
})
|
|
||||||
|
|
||||||
})
|
|
||||||
}
|
|
||||||
RED.nodes.registerType('nextcloud-carddav', NextcloudCardDav)
|
|
||||||
|
|
||||||
|
|
||||||
function NextcloudWebDavList(n) {
|
|
||||||
RED.nodes.createNode(this, n)
|
|
||||||
this.server = RED.nodes.getNode(n.server)
|
|
||||||
this.directory = n.directory
|
|
||||||
let node = this
|
|
||||||
|
|
||||||
node.on('input', function (msg) {
|
|
||||||
const webDavUri = node.server.address + '/remote.php/webdav/'
|
|
||||||
const client = webdav(webDavUri, node.server.credentials.user, node.server.credentials.pass)
|
|
||||||
let directory = ''
|
|
||||||
if (msg.directory) {
|
|
||||||
directory = '/' + msg.directory
|
|
||||||
} else if (node.directory && node.directory.length) {
|
|
||||||
directory = '/' + node.directory
|
|
||||||
}
|
}
|
||||||
directory = directory.replace('//', '/')
|
})
|
||||||
|
}, function () {
|
||||||
client.getDirectoryContents(directory)
|
node.error('Nextcloud:CardDAV -> get addressBooks went wrong.')
|
||||||
.then(function (contents) {
|
|
||||||
node.send({ 'payload': contents })
|
|
||||||
}, function (error) {
|
|
||||||
node.error('Nextcloud:WebDAV -> get directory content went wrong.' + JSON.stringify(error))
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
}
|
})
|
||||||
RED.nodes.registerType('nextcloud-webdav-list', NextcloudWebDavList)
|
}
|
||||||
|
RED.nodes.registerType('nextcloud-carddav', NextcloudCardDav)
|
||||||
|
|
||||||
|
function NextcloudWebDavList (n) {
|
||||||
|
RED.nodes.createNode(this, n)
|
||||||
|
this.server = RED.nodes.getNode(n.server)
|
||||||
|
this.directory = n.directory
|
||||||
|
const node = this
|
||||||
|
|
||||||
function NextcloudWebDavOut(n) {
|
node.on('input', (msg) => {
|
||||||
RED.nodes.createNode(this, n)
|
const webDavUri = node.server.address + '/remote.php/webdav/'
|
||||||
this.server = RED.nodes.getNode(n.server)
|
const client = webdav(webDavUri, node.server.credentials.user, node.server.credentials.pass)
|
||||||
this.filename = n.filename
|
let directory = ''
|
||||||
let node = this
|
if (msg.directory) {
|
||||||
|
directory = '/' + msg.directory
|
||||||
|
} else if (node.directory && node.directory.length) {
|
||||||
|
directory = '/' + node.directory
|
||||||
|
}
|
||||||
|
directory = directory.replace('//', '/')
|
||||||
|
|
||||||
node.on('input', function (msg) {
|
client.getDirectoryContents(directory)
|
||||||
const webDavUri = node.server.address + '/remote.php/webdav/'
|
.then(function (contents) {
|
||||||
const client = webdav(webDavUri, node.server.credentials.user, node.server.credentials.pass)
|
node.send({ 'payload': contents })
|
||||||
let filename = ''
|
}, function (error) {
|
||||||
if (msg.filename) {
|
node.error('Nextcloud:WebDAV -> get directory content went wrong.' + JSON.stringify(error))
|
||||||
filename = '/' + msg.filename
|
|
||||||
} else if (node.filename && node.filename.length) {
|
|
||||||
filename = '/' + node.filename
|
|
||||||
} else {
|
|
||||||
node.error('Nextcloud:WebDAV -> no filename specified.')
|
|
||||||
return
|
|
||||||
}
|
|
||||||
filename = filename.replace('//', '/')
|
|
||||||
node.warn(filename)
|
|
||||||
client.getFileContents(filename)
|
|
||||||
.then(function (contents) {
|
|
||||||
node.send({ 'payload': contents })
|
|
||||||
}, function (error) {
|
|
||||||
node.error('Nextcloud:WebDAV -> get file went wrong.' + JSON.stringify(error))
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
}
|
})
|
||||||
RED.nodes.registerType('nextcloud-webdav-out', NextcloudWebDavOut)
|
}
|
||||||
|
RED.nodes.registerType('nextcloud-webdav-list', NextcloudWebDavList)
|
||||||
|
|
||||||
|
function NextcloudWebDavOut (n) {
|
||||||
|
RED.nodes.createNode(this, n)
|
||||||
|
this.server = RED.nodes.getNode(n.server)
|
||||||
|
this.filename = n.filename
|
||||||
|
const node = this
|
||||||
|
|
||||||
function NextcloudWebDavIn(n) {
|
node.on('input', (msg) => {
|
||||||
RED.nodes.createNode(this, n)
|
const webDavUri = node.server.address + '/remote.php/webdav/'
|
||||||
this.server = RED.nodes.getNode(n.server)
|
const client = webdav(webDavUri, node.server.credentials.user, node.server.credentials.pass)
|
||||||
this.directory = n.directory
|
let filename = ''
|
||||||
this.filename = n.filename
|
if (msg.filename) {
|
||||||
let node = this
|
filename = '/' + msg.filename
|
||||||
|
} else if (node.filename && node.filename.length) {
|
||||||
node.on('input', function (msg) {
|
filename = '/' + node.filename
|
||||||
// Read upload file
|
} else {
|
||||||
let filename = node.filename
|
node.error('Nextcloud:WebDAV -> no filename specified.')
|
||||||
if (msg.filename) {
|
return
|
||||||
filename = msg.filename
|
}
|
||||||
}
|
filename = filename.replace('//', '/')
|
||||||
const name = filename.substr((filename.lastIndexOf('/') + 1), filename.length)
|
node.warn(filename)
|
||||||
const file = fs.readFileSync(filename);
|
client.getFileContents(filename)
|
||||||
// Set upload directory
|
.then(function (contents) {
|
||||||
let directory = '/'
|
node.send({ 'payload': contents })
|
||||||
if (msg.directory) {
|
}, function (error) {
|
||||||
directory += msg.directory + '/'
|
node.error('Nextcloud:WebDAV -> get file went wrong.' + JSON.stringify(error))
|
||||||
} else if (node.directory && node.directory.length) {
|
|
||||||
directory += node.directory + '/'
|
|
||||||
}
|
|
||||||
directory = directory.replace('//', '/')
|
|
||||||
|
|
||||||
const webDavUri = node.server.address + '/remote.php/webdav/'
|
|
||||||
const client = webdav(webDavUri, node.server.credentials.user, node.server.credentials.pass)
|
|
||||||
|
|
||||||
client.putFileContents(directory + name, file, { format: 'binary' })
|
|
||||||
.then(function (contents) {
|
|
||||||
console.log(contents)
|
|
||||||
node.send({ 'payload': JSON.parse(contents) })
|
|
||||||
}, function () {
|
|
||||||
node.error('Nextcloud:WebDAV -> send file went wrong.')
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
}
|
})
|
||||||
RED.nodes.registerType('nextcloud-webdav-in', NextcloudWebDavIn)
|
}
|
||||||
|
RED.nodes.registerType('nextcloud-webdav-out', NextcloudWebDavOut)
|
||||||
|
|
||||||
|
function NextcloudWebDavIn (n) {
|
||||||
|
RED.nodes.createNode(this, n)
|
||||||
|
this.server = RED.nodes.getNode(n.server)
|
||||||
|
this.directory = n.directory
|
||||||
|
this.filename = n.filename
|
||||||
|
const node = this
|
||||||
|
|
||||||
|
node.on('input', (msg) => {
|
||||||
|
// Read upload file
|
||||||
|
let filename = node.filename
|
||||||
|
if (msg.filename) {
|
||||||
|
filename = msg.filename
|
||||||
|
}
|
||||||
|
const name = filename.substr((filename.lastIndexOf('/') + 1), filename.length)
|
||||||
|
const file = fs.readFileSync(filename)
|
||||||
|
// Set upload directory
|
||||||
|
let directory = '/'
|
||||||
|
if (msg.directory) {
|
||||||
|
directory += msg.directory + '/'
|
||||||
|
} else if (node.directory && node.directory.length) {
|
||||||
|
directory += node.directory + '/'
|
||||||
|
}
|
||||||
|
directory = directory.replace('//', '/')
|
||||||
|
|
||||||
|
const webDavUri = node.server.address + '/remote.php/webdav/'
|
||||||
|
const client = webdav(webDavUri, node.server.credentials.user, node.server.credentials.pass)
|
||||||
|
|
||||||
|
client.putFileContents(directory + name, file, { format: 'binary' })
|
||||||
|
.then(function (contents) {
|
||||||
|
console.log(contents)
|
||||||
|
node.send({ 'payload': JSON.parse(contents) })
|
||||||
|
}, function () {
|
||||||
|
node.error('Nextcloud:WebDAV -> send file went wrong.')
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
RED.nodes.registerType('nextcloud-webdav-in', NextcloudWebDavIn)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,7 +22,14 @@
|
|||||||
"moment": "^2.22.2",
|
"moment": "^2.22.2",
|
||||||
"webdav": "^1.5.2"
|
"webdav": "^1.5.2"
|
||||||
},
|
},
|
||||||
"devDependencies": {},
|
"devDependencies": {
|
||||||
|
"eslint": "^5.6.0",
|
||||||
|
"eslint-config-standard": "^12.0.0",
|
||||||
|
"eslint-plugin-import": "^2.14.0",
|
||||||
|
"eslint-plugin-node": "^7.0.1",
|
||||||
|
"eslint-plugin-promise": "^4.0.1",
|
||||||
|
"eslint-plugin-standard": "^4.0.0"
|
||||||
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "echo \"Error: no test specified\" && exit 1"
|
"test": "echo \"Error: no test specified\" && exit 1"
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user