Skip to content
This repository has been archived by the owner on Nov 4, 2018. It is now read-only.

Commit

Permalink
user.resourceId and user.name persisted + ical
Browse files Browse the repository at this point in the history
- ResourceId and Name persisted into datasource
- new remoteMethod('calendar') which (for now) get the data from file
system. Should come from url.
  • Loading branch information
dotlouis committed Dec 21, 2014
1 parent 78c2a01 commit 3e7df5d
Show file tree
Hide file tree
Showing 3 changed files with 91 additions and 15 deletions.
95 changes: 80 additions & 15 deletions common/models/custom-user.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,20 @@
var request = require('request');
var cheerio = require('cheerio');
var fs = require('fs');
var ical = require('ical');

String.prototype.capitalize = function( lowercase, all ) {
if( all ) {
return this.split( " " ).map( function( currentValue, index, array ) {
return currentValue.capitalize( lowercase );
}, this ).join( " " ).split( "-" ).map( function( currentValue, index, array ) {
return currentValue.capitalize( false );
}, this ).join( "-" );
}
else {
return lowercase ? this.charAt( 0 ).toUpperCase() + this.slice( 1 ).toLowerCase() : this.charAt( 0 ).toUpperCase() + this.slice( 1 );
}
};

module.exports = function(CustomUser) {

Expand All @@ -8,41 +23,44 @@ module.exports = function(CustomUser) {
next();
};

CustomUser.scrapeResourceNumber = function(univId, callback){
CustomUser.scrapeResourceId = function(user, callback){
request({
url: 'http://www.univ-orleans.fr/EDTWeb/edt',
qs: {
project: '2014-2015',
action: 'displayWeeksPeople',
person: univId
person: user.username
}},
function(error, response, body){
if (error)
callback(error);
else if (response.statusCode != 200)
callback(response.statusCode);
callback("ENT is unreacheable ("+response.statusCode+")");
else {
// we look for the export url to get the resources and project number
var startOfUrl = body.indexOf('href=\"http://www.univ-orleans.fr/EDTWeb/export?');
var endOfUrl = body.indexOf('\u0026amp;type=ical\" target=\"Export\"');
if(startOfUrl == -1 || endOfUrl == -1)
callback("resource number not found");
callback("ResourceId not found in page");
else{
var exportUrl = body.substring(startOfUrl,endOfUrl);
var project = exportUrl.substring(exportUrl.indexOf('project=')+8, exportUrl.indexOf('\u0026amp;resources='));
var resource = exportUrl.substring(exportUrl.indexOf('resources=')+10);
CustomUser.scrapeName(resource, callback);
var resourceId = exportUrl.substring(exportUrl.indexOf('resources=')+10);
user.updateAttribute("resourceId", resourceId, function(error, user){
CustomUser.scrapeName(user, callback);
// CustomUser.scrapeCalendar(user, project, callback);
});
}
}
}
);
};

CustomUser.scrapeName = function(resourceNumber, callback){
CustomUser.scrapeName = function(user, callback){
request({
url: 'https://aderead6.univ-orleans.fr/jsp/custom/modules/infos/members.jsp',
qs: {
uniqueId: resourceNumber,
uniqueId: user.resourceId,
login: 'etuWeb',
password: '',
projectId: '2'
Expand All @@ -51,29 +69,62 @@ module.exports = function(CustomUser) {
if (error)
callback(error);
else if (response.statusCode != 200)
callback(response.statusCode);
callback("ADE is unreacheable ("+response.statusCode+")");
else {
var $ = cheerio.load(body);
var name = $('span.title').text();
if(name == '')
callback("problem with the name");
else
callback(null, name);
callback("Name not found in page");
else{
user.updateAttribute('name', name.capitalize(true, true), function(error, user){
callback(null, user.name);
});
}
}
}
);
};

CustomUser.scrapeCalendar = function(user, projectNumber){
request({
url: 'http://www.univ-orleans.fr/EDTWeb/export',
qs: {
type: 'ical',
project: projectNumber,
resources: user.resourceId
}},
function(error, response, body){
if(error)
console.log(error);
else if(response.statusCode != 200)
console.log("problem fetching ical");
else
console.log(body);
}
);
}

CustomUser.identity = function(id, callback){
this.findById(id, function(error, user){
if(error)
callback(error);
else
CustomUser.scrapeName(user, callback);
});

};

CustomUser.calendar = function(id, callback){
fs.readFile('/Users/louis/Drive/EDT-Univ-Orleans.ics', 'utf8', function (err,data) {
if (err) {
console.log(err);
callback(err);
}
else{
console.log(user);
CustomUser.scrapeResourceNumber(user.username, callback);
var schedule = ical.parseICS(data);
callback(null, schedule);
}
});

};

CustomUser.remoteMethod('identity', {
Expand All @@ -92,4 +143,18 @@ module.exports = function(CustomUser) {
http: {verb: 'get', path: '/:id/identity'}
});

CustomUser.remoteMethod('calendar', {
description: "Scrapes user's calendar",
accepts:[
{
arg: 'id',
type: 'any',
required: true,
description: "Model id"
}
],
returns: {arg: 'plop', type: 'string'},
http: {verb: 'get', path: '/:id/calendar'}
});

};
10 changes: 10 additions & 0 deletions common/models/custom-user.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@
"properties": {
"name": {
"type": "string"
},
"resourceId": {
"type": "number"
}
},
"validations": [],
Expand All @@ -16,6 +19,13 @@
"principalId": "$owner",
"permission": "ALLOW",
"property": "identity"
},
{
"accessType": "EXECUTE",
"principalType": "ROLE",
"principalId": "$owner",
"permission": "ALLOW",
"property": "calendar"
}
],
"methods": []
Expand Down
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
"cheerio": "^0.18.0",
"compression": "^1.0.3",
"errorhandler": "^1.1.1",
"ical": "^0.3.1",
"loopback": "^2.8.0",
"loopback-boot": "^2.4.0",
"loopback-connector-mongodb": "^1.4.5",
Expand Down

0 comments on commit 3e7df5d

Please sign in to comment.