Example #1
0
          function(err, window) {
                if (!err) {
                    //call gethtmlnode here?

                    var windowJSON = dom2json.toJSON(window.document);
                    var data = !windowJSON ? '' : JSON.stringify(windowJSON);
                    //console.log(prettyjson.render(windowJSON));
                    view = req.params.flavour == 'force directed' ? 'html2graph' : 'html2' + req.params.flavour;

                    res.render(view, { 
                        title: 'Html to Graph',
                        hud: 'The Force Directed Graph for <br>' + validator.escape(url),
                        data: data
                    });

                    window.close();
                }
                else {
                    console.log('[jsdom] ' + err + ', retrieving dom for [' + url + ']');
                }

            }
Example #2
0
Controllers.handle404 = function(req, res) {
	var relativePath = nconf.get('relative_path');
	var isLanguage = new RegExp('^' + relativePath + '/language/.*/.*.json');
	var isClientScript = new RegExp('^' + relativePath + '\\/src\\/.+\\.js');

	if (plugins.hasListeners('action:meta.override404')) {
		return plugins.fireHook('action:meta.override404', {
			req: req,
			res: res,
			error: {}
		});
	}

	if (isClientScript.test(req.url)) {
		res.type('text/javascript').status(200).send('');
	} else if (isLanguage.test(req.url)) {
		res.status(200).json({});
	} else if (req.path.startsWith(relativePath + '/uploads') || (req.get('accept') && req.get('accept').indexOf('text/html') === -1) || req.path === '/favicon.ico') {
		meta.errors.log404(req.path || '');
		res.sendStatus(404);
	} else if (req.accepts('html')) {
		if (process.env.NODE_ENV === 'development') {
			winston.warn('Route requested but not found: ' + req.url);
		}

		meta.errors.log404(req.path.replace(/^\/api/, '') || '');
		res.status(404);

		if (res.locals.isAPI) {
			return res.json({path: validator.escape(req.path.replace(/^\/api/, '') || ''), title: '[[global:404.title]]'});
		}

		req.app.locals.middleware.buildHeader(req, res, function() {
			res.render('404', {path: validator.escape(req.path || ''), title: '[[global:404.title]]'});
		});
	} else {
		res.status(404).type('txt').send('Not found');
	}
};
Example #3
0
  socket.on("message_to_server", function(data){
    //This way we have sanitized our messages before adding them to our chatlog
    var escaped_message = sanitize.escape(data["message"]);
    if(data['name'].valueOf().trim()!="Nobody" && data['name'].valueOf().trim()!="Select a person to PM"){
    //  var id = people[data['name']];
      var name = data['name'];

      var id = null;
      for(var socketid in people){
        if(people[socketid].valueOf() == name.trim()){
          id = socketid;
      
        }
      }
      //var id = 
      console.log(id);
      
      io.sockets.sockets[id].emit("message_to_client", {message: "<b style='color:"  + name_color[socket.id]  + "'>" + people[socket.id] +"(Private Message)</b> : " +escaped_message});
      io.sockets.sockets[socket.id].emit("message_to_client", {message: "<b style='color:"  + name_color[socket.id]  + "'>" + people[socket.id] +"(Private Message to " + name + ")</b> : " +escaped_message});
      //Now let's add this message to our MongoDB


    }else{
    
      io.sockets.emit("message_to_client", {message: "<b style='color:"  + name_color[socket.id]  + "'>" + people[socket.id] +"</b> : " +escaped_message});
            var newMessage = Message({
        content : escaped_message,
        username :people[socket.id],
        color : name_color[socket.id]
      });
      newMessage.save(function(err) {
        console.log("saved post");
      });
    }
    
  
  
    
  });
Example #4
0
function uploadFile(uid, uploadedFile, callback) {
	if (plugins.hasListeners('filter:uploadFile')) {
		return plugins.fireHook('filter:uploadFile', {file: uploadedFile, uid: uid}, callback);
	}

	if (parseInt(meta.config.allowFileUploads, 10) !== 1) {
		return callback(new Error('[[error:uploads-are-disabled]]'));
	}

	if (!uploadedFile) {
		return callback(new Error('[[error:invalid-file]]'));
	}

	if (uploadedFile.size > parseInt(meta.config.maximumFileSize, 10) * 1024) {
		return callback(new Error('[[error:file-too-big, ' + meta.config.maximumFileSize + ']]'));
	}

	if (meta.config.hasOwnProperty('allowedFileExtensions')) {
		var allowed = file.allowedExtensions();
		var extension = path.extname(uploadedFile.name);
		if (allowed.length > 0 && allowed.indexOf(extension) === -1) {
			return callback(new Error('[[error:invalid-file-type, ' + allowed.join('&#44; ') + ']]'));
		}
	}

	var filename = uploadedFile.name || 'upload';

	filename = Date.now() + '-' + validator.escape(filename).substr(0, 255);
	file.saveFileToLocal(filename, 'files', uploadedFile.path, function(err, upload) {
		if (err) {
			return callback(err);
		}

		callback(null, {
			url: nconf.get('relative_path') + upload.url,
			name: uploadedFile.name
		});
	});
}
var addComment = function(req, callback) {
    "use strict";

    var model = {
        question: req.body.question,
        area: req.body.area,
        text: validator.escape(req.body.text),
        commenter: req.user.id
    };

    /** check if the question id is valid */

    commentRepository.insert(model, function(err, doc) {
        if(err) {
            return callback(err);
        }

        doc.commenter = _.pick(req.user, [ "displayName", "avatar" ]);

        callback(null, formatComment(req, doc.toObject()));
    });
};
Example #6
0
			function (results, next) {
				postData.user = results.userInfo[0];
				postData.topic = results.topicInfo;
				postData.index = parseInt(results.topicInfo.postcount, 10) - 1;

				// Username override for guests, if enabled
				if (parseInt(meta.config.allowGuestHandles, 10) === 1 && parseInt(postData.uid, 10) === 0 && data.handle) {
					postData.user.username = validator.escape(String(data.handle));
				}

				postData.votes = 0;
				postData.bookmarked = false;
				postData.display_edit_tools = true;
				postData.display_delete_tools = true;
				postData.display_moderator_tools = true;
				postData.display_move_tools = true;
				postData.selfPost = false;
				postData.timestampISO = utils.toISOString(postData.timestamp);
				postData.topic.title = String(postData.topic.title);

				next(null, postData);
			},
Example #7
0
tagsController.getTag = function(req, res, next) {
	var tag = validator.escape(req.params.tag);
	var uid = req.user ? req.user.uid : 0;
	var end = (parseInt(meta.config.topicsPerList, 10) || 20) - 1;
	topics.getTagTids(tag, 0, end, function(err, tids) {
		if (err) {
			return next(err);
		}

		if (Array.isArray(tids) && !tids.length) {
			topics.deleteTag(tag);
			return res.render('tag', {topics: [], tag:tag});
		}

		topics.getTopics('tag:' + tag + ':topics', uid, tids, function(err, data) {
			if (err) {
				return next(err);
			}

			res.locals.metaTags = [
				{
					name: "title",
					content: tag
				},
				{
					property: 'og:title',
					content: tag
				},
				{
					property: "og:url",
					content: nconf.get('url') + '/tags/' + tag
				}
			];

			data.tag = tag;
			res.render('tag', data);
		});
	});
};
Example #8
0
        socket.on('newRoom', function(room){
            room.nameRoom = sanitize.escape(room.nameRoom);

            if(app.locals.rooms[room.nameRoom+"_"+me.lang] == undefined){

                app.locals.rooms[room.nameRoom+"_"+me.lang] = {
                    name : room.nameRoom,
                    lang : me.lang,
                    nbPlayers : 0,
                    started: false,
                    wordToGuess: false,
                    listPlayers : {}
                }

                socket.emit('nbRooms', { nb : nbRooms(me.lang) });
                io.sockets.emit('newRoom', { name : room.nameRoom , langRoom: me.lang });
                socket.emit('roomCreated', { name : room.nameRoom });

            }else{
                socket.emit('roomExists', { name : room.nameRoom });
            }
        });
Example #9
0
		function updateField(field, next) {
			if (!(data[field] !== undefined && typeof data[field] === 'string')) {
				return next();
			}

			data[field] = data[field].trim();
			data[field] = validator.escape(data[field]);

			if (field === 'email') {
				return updateEmail(uid, data.email, next);
			} else if (field === 'username') {
				return updateUsername(uid, data.username, next);
			} else if (field === 'signature') {
				data[field] = S(data[field]).stripTags().s;
			} else if (field === 'website') {
				if(data[field].substr(0, 7) !== 'http://' && data[field].substr(0, 8) !== 'https://') {
					data[field] = 'http://' + data[field];
				}
			}

			User.setUserField(uid, field, data[field], next);
		}
Example #10
0
	app.use(function(err, req, res, next) {
		if (err.code === 'EBADCSRFTOKEN') {
			winston.error(req.path + '\n', err.message);
			return res.sendStatus(403);
		}

		if (parseInt(err.status, 10) === 302 && err.path) {
			return res.locals.isAPI ? res.status(302).json(err.path) : res.redirect(err.path);
		}

		winston.error(req.path + '\n', err.stack);

		res.status(err.status || 500);

		if (res.locals.isAPI) {
			res.json({path: validator.escape(req.path || ''), error: err.message});
		} else {
			middleware.buildHeader(req, res, function() {
				res.render('500', {path: validator.escape(req.path || ''), error: validator.escape(err.message)});
			});
		}
	});
Example #11
0
exports.create = function(req, res, next){    
    var tab = validator.trim(req.body.tab);
    tab = validator.escape(tab);
    var html_content = validator.trim(req.body.html_content);
    var allTabs = config.cps_sources.map(function (tPair) {
        return tPair[0];
    });

  // 验证
  var validate_error;
  if (!tab || allTabs.indexOf(tab) === -1) {
    validate_error = '必须选择一个CPS来源。';
  } else if (html_content === '') {
    validate_error = 'CPS内容不可为空';
  }
    
  // END 验证

    if (validate_error) {
        res.status(422);
        return res.render('cps/edit', {
          validateError: validate_error,
          title: '新增CPS',
          cps_sources: config.cps_sources,
          tab: tab
        });
    }

    var cps = new CPS();
    cps.source = tab;
    cps.html_content = html_content;
    cps.save(function (err, cps){
        if (err) {
            return next(err);
        }
        res.redirect('/cps/edit?save=success');
    });
};
Example #12
0
  socket.on("join", function(name){



    var escaped_name = sanitize.escape(name);
    people[socket.id] = escaped_name;

    //
    client_name_color = "rgb("+Math.floor(Math.random() * 255) + "," + Math.floor(Math.random() * 255)+ "," + Math.floor(Math.random() * 255) + ")";
    //






    name_color[socket.id] = client_name_color;
    socket.emit("update", "Succesfully connected to server.");
    io.sockets.emit("update", "<b id='client_name_" +  socket.id.replace('/#', '')  + "'>" + name + " has joined the chat.");
    io.sockets.emit("update-people", {peep:people,colors:name_color});


 

    //let's loop through the messages doc to get them all in an array and append them


   Message.find({}, function(err,docs){
       console.log(docs);
       for(var i =0; i< docs.length;i++){
          io.sockets.emit("message_to_client", {message: "<b style='color:"  + docs[i].color  + "'>" + docs[i].username +"</b> : " +docs[i].content});
       }
    });


    
  
  });
Example #13
0
	}, function (err, results) {
		if (err) {
			return next(err);
		}

		// Minimise data set for assignees so tjs does less work
		results.assignees = results.assignees.map(function (userObj) {
			return {
				uid: userObj.uid,
				username: userObj.username,
			};
		});

		// If res.locals.cids is populated, then slim down the categories list
		if (res.locals.cids) {
			results.categories = results.categories.filter(function (category) {
				return res.locals.cids.indexOf(String(category.cid)) !== -1;
			});
		}

		var pageCount = Math.max(1, Math.ceil(results.flagData.count / itemsPerPage));

		results.categories.forEach(function (category) {
			category.selected = parseInt(category.cid, 10) === parseInt(cid, 10);
		});

		var data = {
			posts: results.flagData.posts,
			assignees: results.assignees,
			analytics: results.analytics,
			categories: results.categories,
			byUsername: validator.escape(String(byUsername)),
			sortByCount: sortBy === 'count',
			sortByTime: sortBy === 'time',
			pagination: pagination.create(page, pageCount, req.query),
		};
		res.render('admin/manage/flags', data);
	});
Example #14
0
		users.forEach(function(user) {
			if (!user) {
				return;
			}

			user.username = validator.escape(user.username ? user.username.toString() : '');

			if (user.password) {
				user.password = undefined;
			}

			if (!parseInt(user.uid, 10)) {
				user.uid = 0;
				user.username = '******';
				user.userslug = '';
				user.picture = '';
				user['icon:text'] = '?';
				user['icon:bgColor'] = '#aaa';
			}

			if (user.picture && user.picture === user.uploadedpicture) {
				user.picture = user.uploadedpicture = user.picture.startsWith('http') ? user.picture : nconf.get('relative_path') + user.picture;
			} else if (user.uploadedpicture) {
				user.uploadedpicture = user.uploadedpicture.startsWith('http') ? user.uploadedpicture : nconf.get('relative_path') + user.uploadedpicture;
			}

			for(var i=0; i<fieldsToRemove.length; ++i) {
				user[fieldsToRemove[i]] = undefined;
			}

			// User Icons
			if (user.hasOwnProperty('picture') && user.username && parseInt(user.uid, 10)) {
				user['icon:text'] = (user.username[0] || '').toUpperCase();
				user['icon:bgColor'] = iconBackgrounds[Array.prototype.reduce.call(user.username, function(cur, next) {
					return cur + next.charCodeAt();
				}, 0) % iconBackgrounds.length];
			}
		});
Example #15
0
File: title.js Project: HanRJ/mooc
	Meta.title.build = function (urlFragment, language, locals, callback) {
		var uri = '';
		var fallbackTitle = validator.escape(Meta.config.browserTitle || Meta.config.title || 'Node');
		try {
			uri = decodeURIComponent(urlFragment);
		} catch(e) {
			winston.error('Invalid url fragment : ' + urlFragment, e.stack);
			return callback(null, fallbackTitle);
		}

		Meta.title.parseFragment(uri, language, locals, function(err, title) {
			if (err) {
				title = fallbackTitle;
			} else {
				if (title) {
					title = validator.escape(title);
				}
				title = (title ? title + ' | ' : '') + fallbackTitle;
			}

			callback(null, title);
		});
	};
Example #16
0
			function(results, next) {
				postData.user = results.userInfo[0];
				results.topicInfo.title = validator.escape(results.topicInfo.title);
				postData.topic = results.topicInfo;
				postData.content = results.content;

				if (results.settings.followTopicsOnReply) {
					threadTools.follow(postData.tid, uid);
				}
				postData.index = results.postIndex - 1;
				postData.favourited = false;
				postData.votes = 0;
				postData.display_moderator_tools = true;
				postData.display_move_tools = true;
				postData.selfPost = false;
				postData.relativeTime = utils.toISOString(postData.timestamp);

				if (parseInt(uid, 10)) {
					Topics.notifyFollowers(postData.topic, postData, uid);
				}

				next(null, postData);
			}
Example #17
0
			postData.forEach(function(postObj, i) {
				if (postObj) {
					postObj.deleted = parseInt(postObj.deleted, 10) === 1;
					postObj.user = parseInt(postObj.uid, 10) ? results.userData[postObj.uid] : _.clone(results.userData[postObj.uid]);
					postObj.editor = postObj.editor ? results.editors[postObj.editor] : null;
					postObj.favourited = results.favourites[i];
					postObj.upvoted = results.voteData.upvotes[i];
					postObj.downvoted = results.voteData.downvotes[i];
					postObj.votes = postObj.votes || 0;
					postObj.display_moderator_tools = results.privileges[i].editable;
					postObj.display_move_tools = results.privileges[i].move && postObj.index !== 0;
					postObj.selfPost = parseInt(uid, 10) === parseInt(postObj.uid, 10);

					if(postObj.deleted && !results.privileges[i].view_deleted) {
						postObj.content = '[[topic:post_is_deleted]]';
					}

					// Username override for guests, if enabled
					if (parseInt(meta.config.allowGuestHandles, 10) === 1 && parseInt(postObj.uid, 10) === 0 && postObj.handle) {
						postObj.user.username = validator.escape(postObj.handle);
					}
				}
			});
Example #18
0
				async.map(posts, function(post, next) {
					post.user = results.users[post.uid];
					post.topic = results.topics[post.tid];
					post.category = results.categories[post.topic.cid];

					post.topic.title = validator.escape(post.topic.title);
					post.relativeTime = utils.toISOString(post.timestamp);

					if (!post.content || !options.parse) {
						post.content = stripTags(post.content);
						return next(null, post);
					}

					postTools.parse(post.content, function(err, content) {
						if (err) {
							return next(err);
						}

						post.content = stripTags(content);

						next(null, post);
					});
				}, function(err, posts) {
exports.renderIndex = function (req, res) {

  var safeUserObject = null;
  if (req.user) {
    safeUserObject = {
      displayName: validator.escape(req.user.displayName),
      provider: validator.escape(req.user.provider),
      username: validator.escape(req.user.username),
      company: validator.escape(req.user.company),
      created: req.user.created.toString(),
      roles: req.user.roles,
      profileImageURL: req.user.profileImageURL,
      email: validator.escape(req.user.email),
      lastName: validator.escape(req.user.lastName),
      firstName: validator.escape(req.user.firstName),
      additionalProvidersData: req.user.additionalProvidersData
    };
  }

  res.render('modules/core/server/views/index', {
    user: safeUserObject
  });
};
exports.me = function (req, res) {
  // Sanitize the user - short term solution. Copied from core.server.controller.js
  // TODO create proper passport mock: See https://gist.github.com/mweibel/5219403
  var safeUserObject = null;
  if (req.user) {
    safeUserObject = {
      displayName: validator.escape(req.user.displayName),
      provider: validator.escape(req.user.provider),
      username: validator.escape(req.user.username),
      created: req.user.created.toString(),
      roles: req.user.roles,
      profileImageURL: req.user.profileImageURL,
      email: validator.escape(req.user.email),
      lastName: validator.escape(req.user.lastName),
      firstName: validator.escape(req.user.firstName),
      additionalProvidersData: req.user.additionalProvidersData
    };
  }

  res.json(safeUserObject || null);
};
Example #21
0
		function (topicData, next) {
			var description = '';

			if (topicData.posts[0] && topicData.posts[0].content) {
				description = S(topicData.posts[0].content).stripTags().decodeHTMLEntities().s;
			}

			if (description.length > 255) {
				description = description.substr(0, 255) + '...';
			}

			description = validator.escape(description);
			description = description.replace(/&apos;/g, '&#x27;');

			var ogImageUrl = '';
			if (topicData.thumb) {
				ogImageUrl = topicData.thumb;
			} else if(topicData.posts.length && topicData.posts[0] && topicData.posts[0].user && topicData.posts[0].user.picture){
				ogImageUrl = topicData.posts[0].user.picture;
			} else if(meta.config['brand:logo']) {
				ogImageUrl = meta.config['brand:logo'];
			} else {
				ogImageUrl = '/logo.png';
			}

			if (ogImageUrl.indexOf('http') === -1) {
				ogImageUrl = nconf.get('url') + ogImageUrl;
			}

			description = description.replace(/\n/g, ' ');

			res.locals.metaTags = [
				{
					name: "title",
					content: topicData.title
				},
				{
					name: "description",
					content: description
				},
				{
					property: 'og:title',
					content: topicData.title.replace(/&amp;/g, '&')
				},
				{
					property: 'og:description',
					content: description
				},
				{
					property: "og:type",
					content: 'article'
				},
				{
					property: "og:url",
					content: nconf.get('url') + '/topic/' + topicData.slug
				},
				{
					property: 'og:image',
					content: ogImageUrl
				},
				{
					property: "og:image:url",
					content: ogImageUrl
				},
				{
					property: "article:published_time",
					content: utils.toISOString(topicData.timestamp)
				},
				{
					property: 'article:modified_time',
					content: utils.toISOString(topicData.lastposttime)
				},
				{
					property: 'article:section',
					content: topicData.category ? topicData.category.name : ''
				}
			];

			res.locals.linkTags = [
				{
					rel: 'alternate',
					type: 'application/rss+xml',
					href: nconf.get('url') + '/topic/' + tid + '.rss'
				},
				{
					rel: 'canonical',
					href: nconf.get('url') + '/topic/' + topicData.slug
				}
			];

			if (topicData.category) {
				res.locals.linkTags.push({
					rel: 'up',
					href: nconf.get('url') + '/category/' + topicData.category.slug
				});
			}

			next(null, topicData);
		}
Example #22
0
   app.post('/register', function(req, res, next){
      log('/post register body: '  + JSON.stringify(req.body));

      if(!req.session.reg || !req.session.reg.referrer || (req.session.reg.referrer!=='registerstart' && req.session.reg.referrer!=='registerpost')){
          res.redirect('/register');  // start over....
          return;
      }
      if(req.body.cancel && req.body.cancel=="cancel"){
          // BYE bye!
          res.redirect(req.session.reg.cancelUrl);
          req.session.reg = {};
          req.session.save();
          return;
      }
      if(!req.body.register || req.body.register !=="register"){
          // at this point, the ony button that the user could have been pressed, is 'Register'
          res.redirect('/register');  // start over....
          return;
      }

      req.session.reg.referrer='registerpost';
      if(!req.session.reg.requestedLanguage){
            req.session.reg.requestedLanguage='en';
      }


      var formErrors=new Array();

      req.body.email = validator.escape(req.body.email);
      if(!validator.isEmail(req.body.email)){
          if(req.session.reg.requestedLanguage==='es'){
            formErrors.push('Dirección email no válida');
          } else if(req.session.reg.requestedLanguage==='fr'){
              formErrors.push('Adresse de messagerie invalide');
          } else if(req.session.reg.requestedLanguage==='de'){
              formErrors.push('Diese E-mail Adresse ist nicht gültig');
          } else if(req.session.reg.requestedLanguage==='it'){
              formErrors.push('Indirizzo email non valido');
          } else if(req.session.reg.requestedLanguage==='pt'){
            formErrors.push('Endereço de e-mail inválido');
          } else {
            formErrors.push('Invalid email address');
          }
      }

      req.body.password = validator.escape(req.body.password);
      var pwError=false;
      if(req.body.password.length < 8){
          pwError=true;
      }
      if(!req.body.password.match(/\d/ig)){
          pwError=true;
      }
      if(!req.body.password.match(/[A-Z]/g)){
          pwError=true;
      }

      if(pwError){
          if(req.session.reg.requestedLanguage==='es'){
            formErrors.push('La contraseña no cumple los criterios');
          } else if(req.session.reg.requestedLanguage==='fr'){
              formErrors.push('Le mot de passe ne répond pas aux critères demandés');
          } else if(req.session.reg.requestedLanguage==='de'){
              formErrors.push('Das angegebene Kennwort erfüllt nicht die Mindestanforderungen');
          } else if(req.session.reg.requestedLanguage==='it'){
              formErrors.push('La password non rispetta i criteri');
          } else if(req.session.reg.requestedLanguage==='pt'){
            formErrors.push('A palavra-passe não cumpre os critérios');
          } else {
            formErrors.push('Password does not meet criteria');
          }

      }
      req.body.password2 = validator.escape(req.body.password2);
      if(req.body.password !== req.body.password2){
          if(req.session.reg.requestedLanguage==='es'){
            formErrors.push('La confirmación de la contraseña es erronea');
          } else if(req.session.reg.requestedLanguage==='fr'){
              formErrors.push('La confirmation du mot de passe est erronée');
          } else if(req.session.reg.requestedLanguage==='de'){
              formErrors.push('Die Doppelprüfung auf das Kennwort ist gescheitert');
          } else if(req.session.reg.requestedLanguage==='it'){
              formErrors.push('Doppio controllo sulla password fallito');
          } else if(req.session.reg.requestedLanguage==='pt'){
            formErrors.push('A confirmação da palavra-passe está incorreta');
          } else {
            formErrors.push('Doublecheck on password failed');
          }
      }

      if(req.body.password === req.body.email){
          if(req.session.reg.requestedLanguage==='es'){
            formErrors.push('La contraseña no puede ser la misma que el email');
          } else if(req.session.reg.requestedLanguage==='fr'){
              formErrors.push('Le mot de passe ne peut pas être le même que l’adresse de messagerie');
          } else if(req.session.reg.requestedLanguage==='de'){
              formErrors.push('Das Kennwort darf nicht gleich Ihrer zugehörigen E-mail Adresse sein');
          } else if(req.session.reg.requestedLanguage==='it'){
              formErrors.push('La password non può essere uguale alla email');
          } else if(req.session.reg.requestedLanguage==='pt'){
            formErrors.push('A palavra-passe não pode ser igual ao e-mail');
          } else {
            formErrors.push('Password cannot be the same as email');
          }
      }

      if(!req.body.accept ){
          if(req.session.reg.requestedLanguage==='es'){
            formErrors.push('Las condiciones de servicio deben ser aceptadas');
          } else if(req.session.reg.requestedLanguage==='fr'){
              formErrors.push('Les conditions d’utilisation doivent être acceptées');
          } else if(req.session.reg.requestedLanguage==='de'){
              formErrors.push('Bitte akzeptieren Sie die Nutzungsbedingungen');
          } else if(req.session.reg.requestedLanguage==='it'){
              formErrors.push('I termini di servizio devono essere accettati');
          } else if(req.session.reg.requestedLanguage==='pt'){
            formErrors.push('Os termos do serviço têm que ser aceites');
          } else {
            formErrors.push('Term of service must be accepted');
          }
      }

      req.body.nickname = utils.sanitizeNickname(req.body.nickname);

      // email cannot be in use
      models.EcoUser.findOne({emailcanonical: utils.createCanonicalEmail(req.body.email)}).exec(function (err, user) {
          if(err || user) {
            if(req.session.reg.requestedLanguage==='es'){
              formErrors.push('La dirección email ya está siendo usada');
            } else if(req.session.reg.requestedLanguage==='fr'){
                formErrors.push('Cette adresse de messagerie est déjà utilisée');
            } else if(req.session.reg.requestedLanguage==='de'){
                formErrors.push('Diese E-mail Adresse wurde schon benutzt bei ECO');
            } else if(req.session.reg.requestedLanguage==='it'){
                formErrors.push('L’indirizzo email è già utilizzato');
            } else if(req.session.reg.requestedLanguage==='pt'){
              formErrors.push('O endereço do e-mail já está sendo usado');
            } else {
              formErrors.push('The emailaddress is already in use');
            }
          }

          if(formErrors.length>0){
            log('/post reg errors in registerform');
                res.render(req.session.reg.requestedLanguage +'/reg.ejs',{errors:formErrors, formfields: utils.createFormFields(req)});
          } else {
              async.waterfall([
                  function(callback) {
                    // save user
                    var sha256 = crypto.createHash('sha256');
                    sha256.update(req.body.password);

                    var user = new models.EcoUser({
                      nickname: (req.body.nickname !==''?req.body.nickname:''),
                      email: req.body.email,
                      email_verified: false,
                      password: sha256.digest('hex'),
                      lastLoggedIn: null,
                      loggedIn: false,
                      stayLoggedIn: true,
                      confirmed:false,
                      language:req.session.reg.requestedLanguage,
                      registeredOn:new Date(),
                      emailcanonical:utils.createCanonicalEmail(req.body.email)
                    });

                    var uniqueUserName= ((!user.nickname||user.nickname=='')? utils.extractUserFromEmailAddress(user.email): user.nickname);
                    uniqueUserName = utils.sanitizeUniqueUserName(uniqueUserName);
                    models.Sequence.genId('users',function(err, sequence){
                       if(err){
                            log('Error saving user. Error: ' + JSON.stringify(err));
                            error = new Error('Error creating sequence.');
                            callback(error,null);
                       } else {
                        uniqueUserName+=sequence;
                        user.uniqueUserName =uniqueUserName;
                        user.save(function (err, theUser){
                          if (err) {
                              log('Error saving user. Error: ' + JSON.stringify(err));
                              error = new Error('Error saving userdata.');
                              callback(error,null);
                          } else {
                            callback(null,theUser.toObject());
                          }
                        });
                       }
                    });
                  },
                  function(user,callback) {
                    var confirmation = new models.RegisterConfirmation({
                      _user: user._id,
                      language: req.session.reg.requestedLanguage,
                      createdOn: new Date(),
                      confirmedOn: null,
                      loginUrl: req.session.reg.loginUrl,
                      initiator: req.session.reg.initiator
                    });

                    confirmation.save(function (err, theConfirmation){
                        if (err) {
                            log('Error saving registerconfirmation. Error: ' + JSON.stringify(err));
                            error = new Error('Error saving userdata.');
                            callback(error,null);
                        } else {
                          callback(null,user,theConfirmation.toObject());
                        }
                    });
                  }], function (err,user,confirmation, callback) {
                        if (err){
                            req.session.reg = {};
                            req.session.save();
                            return next(err);
                        }

                        // send confirmation email
                        if(req.session.reg.requestedLanguage==='es'){
                          var textMessage = "¡Bienvenido a ECO! \n\nVd. acaba de crear una cuenta en ECO.\nPara confirmar que es realmente Vd., por favor active su cuenta haciendo click sobre enlace siguiente.\n\nSi Vd. no creó ninguna cuenta y no tiene idea de lo que es ECO, alguien debió entrar en su cuenta email o cometió un error. En ese caso le pedimos perdón por los inconvenientes y le rogamos que ignore este mensaje.\n\nPuede activar su cuenta aquí: " + appSettings.accountActivationUrl + "?id=" + confirmation._id.toString() +"\n\n\n\nQue tenga un buen día.\n\nEl equipo ECO.";
                          var subject= '¡Bienvenido a ECO! ';
                        } else if(req.session.reg.requestedLanguage==='fr'){
                          var textMessage = "Bienvenue dans ECO ! \n\nVous venez de créer votre compte sur ECO.\nAfin de confirmer votre inscription, merci d’activer votre compte en cliquant sur le lien suivant.\n\nSi vous n’avez pas créé de compte ECO et n’avez pas connaissance du projet ECO, merci d’ignorer ce message et de l’effacer. Nous vous prions d’accepter nos excuses pour les désagréments engendrés.\n\nActivez votre compte ici: " + appSettings.accountActivationUrl + "?id=" + confirmation._id.toString() +"\n\n\n\nNous vous souhaitons une bonne journée.\n\nL’équipe ECO";
                          var subject= 'Bienvenue dans ECO !';
                        } else if(req.session.reg.requestedLanguage==='de'){
                          var textMessage = "Wilkommen auf ECO!\n\nSie haben gerade ein Konto auf ECO erstellt. \nBitte bestätigen Sie das Konto und klicken Sie bitte auf folgenden Link.\n\nWenn Sie nicht dieses ECO-Konto erstellt haben, und auch keinen Bezug zum ECO-Learning Projekt haben, ignorieren und löschen Sie bitte diese E-Mail. Wir entschuldigen uns für die aufgetretenen Unannehmlichkeiten.\n\nAktivieren Sie Ihren Account hier: " + appSettings.accountActivationUrl + "?id=" + confirmation._id.toString() +"\n\n\n\nMit freundlichen Grüßen,\n\nIhr ECO-Team";
                          var subject= 'Willkommen auf ECO! ';
                        } else if(req.session.reg.requestedLanguage==='it'){
                          var textMessage = "Benvenuto in ECO! \n\nHai appena creato un’utenza su ECO.\nPer confermare che si tratta di te, per favore attiva la tua utenza cliccando sul link qui sotto.\n\nSe non hai creato un’utenza e non hai idea di cosa sia ECO, qualcuno potrebbe avere abusato del tuo indirizzo e-mail o fatto un errore di battitura. In questo caso ci scusiamo per l’inconveniente e ti chiediamo per favore di ignorare il messaggio.\n\nAttiva la tua utenza qui: " + appSettings.accountActivationUrl + "?id=" + confirmation._id.toString() +"\n\n\n\nTi auguriamo una buona giornata,\n\nIl team ECO";
                          var subject= 'Benvenuto in ECO! ';
                        } else if(req.session.reg.requestedLanguage==='pt'){
                          var textMessage = "Bem vindo ao ECO! \n\nAcabou de criar uma conta no ECO.\nPara confirmar e iniciar a sua conta, por favor carregue no link abaixo.\n\nSe não criou a sua conta no ECO e não tem conhecimento sobre o Projeto ECO, por favor ignore e apague este e-mail. Pedimos desculpas pelo incómodo.\n\nAtive a sua conta aqui : " + appSettings.accountActivationUrl + "?id=" + confirmation._id.toString() +"\n\n\n\nTenha um bom dia!\n\nA equipa do ECO";
                          var subject= 'Bem vindo ao ECO! ';
                        } else {
                          var textMessage = "Welcome on ECO! \n\nYou have just created an account on ECO.\nTo confirm and initiate your account, please click on link below.\n\nIf you have not created an ECO account and have no knowledge in reference to the ECO-learning project, please ignore and delete this email. We apologise for the inconvenience.\n\nActivate your account here: " + appSettings.accountActivationUrl + "?id=" + confirmation._id.toString() +"\n\n\n\nHave a nice day,\n\nThe ECO team";
                          var subject= 'Welcome on ECO! ';
                        }

                        mail.sendSingleTextMail(appSettings.idpMailFrom, user.email, subject, textMessage);
                        res.render(req.session.reg.requestedLanguage+'/regok.ejs',{email:user.email});

                        // Auto-Add total consent for EcoPortal PROD
                        var consent = new models.Consent({
                            _user: user._id,
                            _client: "53a5821c5ae078a98af6f127",
                            createdOn: new Date(),
                            scope: "openid profile email address eco"
                        });

                        consent.save(function (err, theConsent){
                          if (err) {
                              log('Error saving EcoPortal auto-consent. Error: ' + JSON.stringify(err),true);
                          }
                        });

                        // send xapistatement regarding user finishing registration
                        log('post /token: send xapistatement');
                        try {
                            utils.sendxApiStatement({
                              actor: user._id,
                              verb: "http://adlnet.gov/expapi/verbs/registered",
                              object: {
                                  id:"https://idp.ecolearning.eu/register"
                              },
                            });
                        } catch (e) {
                          log('post /token: error in sending xapistatement',true);
                        }


                        // we are done!
                        req.session.reg = {};
                        req.session.save();
              }); //end waterfall
          } // end if
      }); // end findone
});  // end app.post('/register'
Example #23
0
		function (results, next) {
			if (!results.userData) {
				return callback(new Error('[[error:invalid-uid]]'));
			}

			var userData = results.userData;
			var userSettings = results.userSettings;
			var isAdmin = results.isAdmin;
			var isGlobalModerator = results.isGlobalModerator;
			var isModerator = results.isModerator;
			var isSelf = parseInt(callerUID, 10) === parseInt(userData.uid, 10);

			userData.joindateISO = utils.toISOString(userData.joindate);
			userData.lastonlineISO = utils.toISOString(userData.lastonline || userData.joindate);
			userData.age = Math.max(0, userData.birthday ? Math.floor((new Date().getTime() - new Date(userData.birthday).getTime()) / 31536000000) : 0);

			userData.emailClass = 'hide';

			if (!isAdmin && !isGlobalModerator && !isSelf && (!userSettings.showemail || parseInt(meta.config.hideEmail, 10) === 1)) {
				userData.email = '';
			} else if (!userSettings.showemail) {
				userData.emailClass = '';
			}

			if (!isAdmin && !isGlobalModerator && !isSelf && (!userSettings.showfullname || parseInt(meta.config.hideFullname, 10) === 1)) {
				userData.fullname = '';
			}

			if (isAdmin || isSelf || ((isGlobalModerator || isModerator) && !results.isTargetAdmin)) {
				userData.ips = results.ips;
			}

			if (!isAdmin && !isGlobalModerator && !isModerator) {
				userData.moderationNote = undefined;
			}

			userData.yourid = callerUID;
			userData.theirid = userData.uid;
			userData.isTargetAdmin = results.isTargetAdmin;
			userData.isAdmin = isAdmin;
			userData.isGlobalModerator = isGlobalModerator;
			userData.isModerator = isModerator;
			userData.isAdminOrGlobalModerator = isAdmin || isGlobalModerator;
			userData.isAdminOrGlobalModeratorOrModerator = isAdmin || isGlobalModerator || isModerator;
			userData.isSelfOrAdminOrGlobalModerator = isSelf || isAdmin || isGlobalModerator;
			userData.canEdit = results.canEdit;
			userData.canBan = results.canBanUser;
			userData.canChangePassword = isAdmin || (isSelf && parseInt(meta.config['password:disableEdit'], 10) !== 1);
			userData.isSelf = isSelf;
			userData.isFollowing = results.isFollowing;
			userData.showHidden = isSelf || isAdmin || (isGlobalModerator && !results.isTargetAdmin);
			userData.groups = Array.isArray(results.groups) && results.groups.length ? results.groups[0] : [];
			userData.disableSignatures = meta.config.disableSignatures !== undefined && parseInt(meta.config.disableSignatures, 10) === 1;
			userData['reputation:disabled'] = parseInt(meta.config['reputation:disabled'], 10) === 1;
			userData['downvote:disabled'] = parseInt(meta.config['downvote:disabled'], 10) === 1;
			userData['email:confirmed'] = !!parseInt(userData['email:confirmed'], 10);
			userData.profile_links = filterLinks(results.profile_links.concat(results.profile_menu.links), {
				self: isSelf,
				other: !isSelf,
				moderator: isModerator,
				globalMod: isGlobalModerator,
				admin: isAdmin,
			});

			userData.sso = results.sso.associations;
			userData.status = user.getStatus(userData);
			userData.banned = parseInt(userData.banned, 10) === 1;
			userData.website = validator.escape(String(userData.website || ''));
			userData.websiteLink = !userData.website.startsWith('http') ? 'http://' + userData.website : userData.website;
			userData.websiteName = userData.website.replace(validator.escape('http://'), '').replace(validator.escape('https://'), '');
			userData.followingCount = parseInt(userData.followingCount, 10) || 0;
			userData.followerCount = parseInt(userData.followerCount, 10) || 0;

			userData.email = validator.escape(String(userData.email || ''));
			userData.fullname = validator.escape(String(userData.fullname || ''));
			userData.location = validator.escape(String(userData.location || ''));
			userData.signature = validator.escape(String(userData.signature || ''));
			userData.aboutme = validator.escape(String(userData.aboutme || ''));
			userData.birthday = validator.escape(String(userData.birthday || ''));
			userData.moderationNote = validator.escape(String(userData.moderationNote || ''));

			if (userData['cover:url']) {
				userData['cover:url'] = userData['cover:url'].startsWith('http') ? userData['cover:url'] : (nconf.get('relative_path') + userData['cover:url']);
			} else {
				userData['cover:url'] = require('../../coverPhoto').getDefaultProfileCover(userData.uid);
			}

			userData['cover:position'] = validator.escape(String(userData['cover:position'] || '50% 50%'));
			userData['username:disableEdit'] = !userData.isAdmin && parseInt(meta.config['username:disableEdit'], 10) === 1;
			userData['email:disableEdit'] = !userData.isAdmin && parseInt(meta.config['email:disableEdit'], 10) === 1;

			next(null, userData);
		},
Example #24
0
 return recursivelyIterate(this.val, function(str) {
     return stringValidator.escape(stringValidator.unescape(str));
 });
Example #25
0
	User.create = function(userData, callback) {
		var gravatar = User.createGravatarURLFromEmail(userData.email);
		var timestamp = Date.now();
		var password = userData.password;

		userData = {
			'username': userData.username.trim(),
			'email': userData.email,
			'joindate': timestamp,
			'picture': gravatar,
			'gravatarpicture': gravatar,
			'fullname': '',
			'location': '',
			'birthday': '',
			'website': '',
			'signature': '',
			'uploadedpicture': '',
			'profileviews': 0,
			'reputation': 0,
			'postcount': 0,
			'lastposttime': 0,
			'banned': 0,
			'status': 'online'
		};

		userData.userslug = utils.slugify(userData.username);

		if (userData.email !== undefined) {
			userData.email = userData.email.trim();
			userData.email = validator.escape(userData.email);
		}

		async.parallel({
			emailValid: function(next) {
				if (userData.email) {
					next(!utils.isEmailValid(userData.email) ? new Error('[[error:invalid-email]]') : null);
				} else {
					next();
				}
			},
			userNameValid: function(next) {
				next((!utils.isUserNameValid(userData.username) || !userData.userslug) ? new Error('[[error:invalid-username]]') : null);
			},
			passwordValid: function(next) {
				if (password) {
					next(!utils.isPasswordValid(password) ? new Error('[[error:invalid-password]]') : null);
				} else {
					next();
				}
			},
			renamedUsername: function(next) {
				meta.userOrGroupExists(userData.userslug, function(err, exists) {
					if (err) {
						return next(err);
					}

					if (exists) {
						var	newUsername = '';
						async.forever(function(next) {
							newUsername = userData.username + (Math.floor(Math.random() * 255) + 1);
							User.exists(newUsername, function(err, exists) {
								if (err) {
									return callback(err);
								}
								if (!exists) {
									next(newUsername);
								} else {
									next();
								}
							});
						}, function(username) {
							next(null, username);
						});
					} else {
						next();
					}
				});
			},
			emailAvailable: function(next) {
				if (userData.email) {
					User.email.available(userData.email, function(err, available) {
						if (err) {
							return next(err);
						}
						next(!available ? new Error('[[error:email-taken]]') : null);
					});
				} else {
					next();
				}
			},
			customFields: function(next) {
				plugins.fireHook('filter:user.custom_fields', userData, next);
			},
			userData: function(next) {
				plugins.fireHook('filter:user.create', userData, next);
			}
		}, function(err, results) {
			if (err) {
				return callback(err);
			}

			userData = utils.merge(results.userData, results.customFields);

			var userNameChanged = !!results.renamedUsername;

			if (userNameChanged) {
				userData.username = results.renamedUsername;
				userData.userslug = utils.slugify(results.renamedUsername);
			}

			db.incrObjectField('global', 'nextUid', function(err, uid) {
				if (err) {
					return callback(err);
				}

				userData.uid = uid;

				db.setObject('user:'******'username:uid', userData.username, uid);
					db.setObjectField('userslug:uid', userData.userslug, uid);

					if (userData.email !== undefined) {
						db.setObjectField('email:uid', userData.email.toLowerCase(), uid);
						if (parseInt(uid, 10) !== 1 && parseInt(meta.config.requireEmailConfirmation, 10) === 1) {
							User.email.verify(uid, userData.email);
						}
					}

					plugins.fireHook('action:user.create', userData);
					db.incrObjectField('global', 'userCount');

					db.sortedSetAdd('users:joindate', timestamp, uid);
					db.sortedSetAdd('users:postcount', 0, uid);
					db.sortedSetAdd('users:reputation', 0, uid);

					groups.join('registered-users', uid);

					if (userNameChanged) {
						notifications.create({
							bodyShort: '[[user:username_taken_workaround, ' + userData.username + ']]',
							bodyLong: '',
							image: 'brand:logo',
							datetime: Date.now()
						}, function(err, nid) {
							if (!err) {
								notifications.push(nid, uid);
							}
						});
					}

					if (password) {
						User.hashPassword(password, function(err, hash) {
							if(err) {
								return callback(err);
							}

							User.setUserField(uid, 'password', hash);
							callback(null, uid);
						});
					} else {
						callback(null, uid);
					}
				});
			});
		});
	};
Example #26
0
    return new Promise( (resolve, reject) => {

        let objRet = {};

        if (status !== utils.OPERATION_STATUS.DELETE &&
            status !== utils.OPERATION_STATUS.SELECT) {
            course['identify'] = validator.trim(validator.escape(course['identify'].toString() || ''));
            course['name'] = validator.trim(validator.escape(course['name'].toString() || ''));
            course['active'] = validator.trim(validator.escape(course['active'].toString() || ''));
            course['description'] = validator.trim(validator.escape(course['description'].toString() || ''));
            course['duration']['start'] = validator.trim(course['duration']['start'].toString() || '');
            course['duration']['end'] = validator.trim(course['duration']['end'].toString() || '');
            course['course_type']['_id'] = validator.trim(validator.escape(course['course_type']['_id'].toString() || ''));
            course['course_type']['description'] = validator.trim(validator.escape(course['course_type']['description'].toString() || ''));

            if (validator.isNull(course['description']))
                objRet['description'] = 'Descrição é de preenchimento obrigatório.';

            if (validator.isNull(course['identify']))
                objRet['identify'] = 'Identificador é de preenchimento obrigatório.';

            if (validator.isNull(course['name']))
                objRet['description'] = 'Nome do curso é de preenchimento obrigatório.';

            if (validator.isNull(course['duration']['start']))
                objRet['start'] = 'Data de início é de preenchimento obrigatório.';
            else if (!validator.isDate(course['duration']['start']))
                objRet['start'] = 'Data de início informada não é válida.';

            if (validator.isNull(course['duration']['end']))
                objRet['end'] = 'Data de término é de preenchimento obrigatório.';
            else if (!validator.isDate(course['duration']['end']))
                objRet['end'] = 'Data de término informada não é válida.';

            if (validator.isNull(course['course_type']['description']))
                objRet['course_type_description'] = 'Tipo do curso é de preenchimento obrigatório.';

            if (validator.isNull(course['course_type']['_id']))
                objRet['course_type__id'] = 'id do Tipo do curso é de preenchimento obrigatório.';
            else if (!validator.isMongoId(course['course_type']['_id']))
                objRet['course_type__id'] = 'id do Tipo do curso informado não é válida.';

            if ((!validator.isNull(course['active'])) && (!validator.isIn(course['active'], [0, 1])))
                objRet['active'] = 'Status informado não é válido.';

        }

        if (status === utils.OPERATION_STATUS.UPDATE ||
            status === utils.OPERATION_STATUS.SELECT ||
            status === utils.OPERATION_STATUS.DELETE) {
            course['_id'] = validator.trim(validator.escape(course['_id'].toString() || ''));

            let idNull = validator.isNull(course['_id']);

            if (idNull)
                objRet['_id'] = 'Id do curso é de preenchimento obrigatório.';
            else if (!validator.isMongoId(course['_id']))
                objRet['_id'] = 'Id do curso informado é inválido.';
        }

        if (Object.keys(objRet).length !== 0)
            reject(objRet);
        else {
            objRet = null;
            resolve(course);
        }
    });
Example #27
0
    return new Promise( (resolve, reject) => {
        let objRet = {};
        if (status === utils.OPERATION_STATUS.NEW ||
            status === utils.OPERATION_STATUS.UPDATE) {
            item['day'] = validator.trim(validator.escape(item['day'].toString() || ''));
            item['subject'] = validator.trim(validator.escape(item['subject'].toString() || ''));
            item['duration']['start'] = validator.trim(item['duration']['start'].toString() || '');
            item['duration']['end'] = validator.trim(item['duration']['end'].toString() || '');

            if (validator.isNull(item['subject']))
                objRet['subject'] = 'Id da matéria é de preenchimento obrigatório.';
            else if (!validator.isMongoId(item['subject']))
                objRet['subject'] = 'Id da matéria informado é inválido.';

            if (validator.isNull(item['day']))
                objRet['day'] = 'Dia da semana é de preenchimento obrigatório.';
            else if (!validator.isInt(item['day']))
                objRet['day'] = 'Dia da semana informado é inválido.';
            else if (!validator.isIn(item['day'], [1, 2, 3, 4, 5, 6, 7]))
                objRet['day'] = 'Dia da semana informado é inválido.';

            if (validator.isNull(item['duration']['start']))
                objRet['start'] = 'Data de início é de preenchimento obrigatório.';
            else if (!validator.isDate(item['duration']['start']))
                objRet['start'] = 'Data de início informada não é válida.';


            if (validator.isNull(item['duration']['end']))
                objRet['end'] = 'Data de término é de preenchimento obrigatório.';
            else if (!validator.isDate(item['duration']['end']))
                objRet['end'] = 'Data de término informada não é válida.';
        }
        if (status === utils.OPERATION_STATUS.DELETE) {

            item['_idschedule'] = validator.trim(validator.escape(item['_idschedule'].toString() || ''));
            if (validator.isNull(item['_idschedule']))
                objRet['_idschedule'] = 'Id do item do cronograma é de preenchimento obrigatório.';
            else if (!validator.isMongoId(item['_idschedule']))
                objRet['_idschedule'] = 'Id do item do cronograma informado é inválido.';


            item['_idsubject'] = validator.trim(validator.escape(item['_idsubject'].toString() || ''));
            if (validator.isNull(item['_idsubject']))
                objRet['_idsubject'] = 'Id da matéria é de preenchimento obrigatório.';
            else if (!validator.isMongoId(item['_idsubject']))
                objRet['_idsubject'] = 'Id da matéria informado é inválido.';
        }

        item['_id'] = validator.trim(validator.escape(item['_id'].toString() || ''));
        if (validator.isNull(item['_id']))
            objRet['_id'] = 'Id do Curso é de preenchimento obrigatório.';
        else if (!validator.isMongoId(item['_id']))
            objRet['_id'] = 'Id do Curso informado é inválido.';


        if (Object.keys(objRet).length !== 0)
            reject(objRet);
        else {
            objRet = null;
            resolve(item);
        }
    });
Example #28
0
apiController.getConfig = function(req, res, next) {
	function filterConfig() {
		plugins.fireHook('filter:config.get', config, function(err, config) {
			if (res.locals.isAPI) {
				res.status(200).json(config);
			} else {
				next(err, config);
			}
		});
	}

	var config = {};
	config.relative_path = nconf.get('relative_path');
	config.socketioTransports = nconf.get('socket.io:transports') || ['polling', 'websocket'];
	config.websocketAddress = nconf.get('socket.io:address') || '';
	config.version = nconf.get('version');
	config.siteTitle = validator.escape(meta.config.title || meta.config.browserTitle || 'NodeBB');
	config.browserTitle = validator.escape(meta.config.browserTitle || meta.config.title || 'NodeBB');
	config.showSiteTitle = parseInt(meta.config.showSiteTitle, 10) === 1;
	config.postDelay = meta.config.postDelay;
	config.minimumTitleLength = meta.config.minimumTitleLength;
	config.maximumTitleLength = meta.config.maximumTitleLength;
	config.minimumPostLength = meta.config.minimumPostLength;
	config.maximumPostLength = meta.config.maximumPostLength;
	config.hasImageUploadPlugin = plugins.hasListeners('filter:uploadImage');
	config.maximumProfileImageSize = meta.config.maximumProfileImageSize;
	config.minimumUsernameLength = meta.config.minimumUsernameLength;
	config.maximumUsernameLength = meta.config.maximumUsernameLength;
	config.minimumPasswordLength = meta.config.minimumPasswordLength;
	config.maximumSignatureLength = meta.config.maximumSignatureLength;
	config.maximumAboutMeLength = meta.config.maximumAboutMeLength || 1000;
	config.useOutgoingLinksPage = parseInt(meta.config.useOutgoingLinksPage, 10) === 1;
	config.allowGuestSearching = parseInt(meta.config.allowGuestSearching, 10) === 1;
	config.allowGuestUserSearching = parseInt(meta.config.allowGuestUserSearching, 10) === 1;
	config.allowGuestHandles = parseInt(meta.config.allowGuestHandles, 10) === 1;
	config.allowFileUploads = parseInt(meta.config.allowFileUploads, 10) === 1;
	config.allowProfileImageUploads = parseInt(meta.config.allowProfileImageUploads) === 1;
	config.allowTopicsThumbnail = parseInt(meta.config.allowTopicsThumbnail, 10) === 1;
	config.allowAccountDelete = parseInt(meta.config.allowAccountDelete, 10) === 1;
	config.privateUserInfo = parseInt(meta.config.privateUserInfo, 10) === 1;
	config.privateTagListing = parseInt(meta.config.privateTagListing, 10) === 1;
	config.usePagination = parseInt(meta.config.usePagination, 10) === 1;
	config.disableSocialButtons = parseInt(meta.config.disableSocialButtons, 10) === 1;
	config.disableChat = parseInt(meta.config.disableChat, 10) === 1;
	config.maxReconnectionAttempts = meta.config.maxReconnectionAttempts || 5;
	config.reconnectionDelay = meta.config.reconnectionDelay || 1500;
	config.minimumTagsPerTopic = meta.config.minimumTagsPerTopic || 0;
	config.maximumTagsPerTopic = meta.config.maximumTagsPerTopic || 5;
	config.minimumTagLength = meta.config.minimumTagLength || 3;
	config.maximumTagLength = meta.config.maximumTagLength || 15;
	config.topicsPerPage = meta.config.topicsPerPage || 20;
	config.postsPerPage = meta.config.postsPerPage || 20;
	config.maximumFileSize = meta.config.maximumFileSize;
	config['theme:id'] = meta.config['theme:id'];
	config['theme:src'] = meta.config['theme:src'];
	config.defaultLang = meta.config.defaultLang || 'en_GB';
	config.userLang = req.query.lang || config.defaultLang;
	config.environment = process.env.NODE_ENV;
	config.loggedIn = !!req.user;
	config['cache-buster'] = meta.config['cache-buster'] || '';
	config['script-buster'] = meta.js.hash || '';
	config['css-buster'] = meta.css.hash || '';
	config.requireEmailConfirmation = parseInt(meta.config.requireEmailConfirmation, 10) === 1;
	config.topicPostSort = meta.config.topicPostSort || 'oldest_to_newest';
	config.categoryTopicSort = meta.config.categoryTopicSort || 'newest_to_oldest';
	config.csrf_token = req.csrfToken();
	config.searchEnabled = plugins.hasListeners('filter:search.query');

	if (!req.user) {
		return filterConfig();
	}

	user.getSettings(req.user.uid, function(err, settings) {
		if (err) {
			return next(err);
		}

		config.usePagination = settings.usePagination;
		config.topicsPerPage = settings.topicsPerPage;
		config.postsPerPage = settings.postsPerPage;
		config.notificationSounds = settings.notificationSounds;
		config.userLang = req.query.lang || settings.userLang || config.defaultLang;
		config.openOutgoingLinksInNewTab = settings.openOutgoingLinksInNewTab;
		config.topicPostSort = settings.topicPostSort || config.topicPostSort;
		config.categoryTopicSort = settings.categoryTopicSort || config.categoryTopicSort;
		config.topicSearchEnabled = settings.topicSearchEnabled || false;

		filterConfig();
	});
};
Example #29
0
apiController.getConfig = function(req, res, next) {
	var config = {};
	config.environment = process.env.NODE_ENV;
	config.relative_path = nconf.get('relative_path');
	config.version = nconf.get('version');
	config.siteTitle = validator.escape(meta.config.title || meta.config.browserTitle || 'NodeBB');
	config.browserTitle = validator.escape(meta.config.browserTitle || meta.config.title || 'NodeBB');
	config.titleLayout = (meta.config.titleLayout || '{pageTitle} | {browserTitle}').replace(/{/g, '&#123;').replace(/}/g, '&#125;');
	config.showSiteTitle = parseInt(meta.config.showSiteTitle, 10) === 1;
	config.minimumTitleLength = meta.config.minimumTitleLength;
	config.maximumTitleLength = meta.config.maximumTitleLength;
	config.minimumPostLength = meta.config.minimumPostLength;
	config.maximumPostLength = meta.config.maximumPostLength;
	config.minimumTagsPerTopic = meta.config.minimumTagsPerTopic || 0;
	config.maximumTagsPerTopic = meta.config.maximumTagsPerTopic || 5;
	config.minimumTagLength = meta.config.minimumTagLength || 3;
	config.maximumTagLength = meta.config.maximumTagLength || 15;
	config.hasImageUploadPlugin = plugins.hasListeners('filter:uploadImage');
	config.useOutgoingLinksPage = parseInt(meta.config.useOutgoingLinksPage, 10) === 1;
	config.allowGuestSearching = parseInt(meta.config.allowGuestSearching, 10) === 1;
	config.allowGuestUserSearching = parseInt(meta.config.allowGuestUserSearching, 10) === 1;
	config.allowGuestHandles = parseInt(meta.config.allowGuestHandles, 10) === 1;
	config.allowFileUploads = parseInt(meta.config.allowFileUploads, 10) === 1;
	config.allowTopicsThumbnail = parseInt(meta.config.allowTopicsThumbnail, 10) === 1;
	config.usePagination = parseInt(meta.config.usePagination, 10) === 1;
	config.disableChat = parseInt(meta.config.disableChat, 10) === 1;
	config.socketioTransports = nconf.get('socket.io:transports') || ['polling', 'websocket'];
	config.websocketAddress = nconf.get('socket.io:address') || '';
	config.maxReconnectionAttempts = meta.config.maxReconnectionAttempts || 5;
	config.reconnectionDelay = meta.config.reconnectionDelay || 1500;
	config.topicsPerPage = meta.config.topicsPerPage || 20;
	config.postsPerPage = meta.config.postsPerPage || 20;
	config.maximumFileSize = meta.config.maximumFileSize;
	config['theme:id'] = meta.config['theme:id'];
	config['theme:src'] = meta.config['theme:src'];
	config.defaultLang = meta.config.defaultLang || 'en_GB';
	config.userLang = req.query.lang ? validator.escape(req.query.lang) : config.defaultLang;
	config.loggedIn = !!req.user;
	config['cache-buster'] = meta.config['cache-buster'] || '';
	config.requireEmailConfirmation = parseInt(meta.config.requireEmailConfirmation, 10) === 1;
	config.topicPostSort = meta.config.topicPostSort || 'oldest_to_newest';
	config.categoryTopicSort = meta.config.categoryTopicSort || 'newest_to_oldest';
	config.csrf_token = req.csrfToken();
	config.searchEnabled = plugins.hasListeners('filter:search.query');
	config.bootswatchSkin = 'default';

	async.waterfall([
		function (next) {
			if (!req.user) {
				return next(null, config);
			}
			user.getSettings(req.uid, function(err, settings) {
				if (err) {
					return next(err);
				}
				config.usePagination = settings.usePagination;
				config.topicsPerPage = settings.topicsPerPage;
				config.postsPerPage = settings.postsPerPage;
				config.notificationSounds = settings.notificationSounds;
				config.userLang = (req.query.lang ? validator.escape(req.query.lang) : null) || settings.userLang || config.defaultLang;
				config.openOutgoingLinksInNewTab = settings.openOutgoingLinksInNewTab;
				config.topicPostSort = settings.topicPostSort || config.topicPostSort;
				config.categoryTopicSort = settings.categoryTopicSort || config.categoryTopicSort;
				config.topicSearchEnabled = settings.topicSearchEnabled || false;
				config.delayImageLoading = settings.delayImageLoading !== undefined ? settings.delayImageLoading : true;
				config.bootswatchSkin = settings.bootswatchSkin || config.bootswatchSkin;
				next(null, config);
			});
		},
		function (config, next) {
			plugins.fireHook('filter:config.get', config, next);
		}
	], function(err, config) {
		if (err) {
			return next(err);
		}

		if (res.locals.isAPI) {
			res.json(config);
		} else {
			next(null, config);
		}
	});
};
Example #30
0
		async.map(users, function (user, next) {
			if (!user) {
				return next(null, user);
			}

			db.parseIntFields(user, intFields, requestedFields);

			if (user.hasOwnProperty('username')) {
				user.username = validator.escape(user.username ? user.username.toString() : '');
			}

			if (user.hasOwnProperty('email')) {
				user.email = validator.escape(user.email ? user.email.toString() : '');
			}

			if (!parseInt(user.uid, 10)) {
				user.uid = 0;
				user.username = (user.hasOwnProperty('oldUid') && parseInt(user.oldUid, 10)) ? '[[global:former_user]]' : '[[global:guest]]';
				user.userslug = '';
				user.picture = User.getDefaultAvatar();
				user['icon:text'] = '?';
				user['icon:bgColor'] = '#aaa';
				user.groupTitle = '';
			}

			if (user.hasOwnProperty('groupTitle')) {
				parseGroupTitle(user);
			}

			if (user.picture && user.picture === user.uploadedpicture) {
				user.uploadedpicture = user.picture.startsWith('http') ? user.picture : nconf.get('relative_path') + user.picture;
				user.picture = user.uploadedpicture;
			} else if (user.uploadedpicture) {
				user.uploadedpicture = user.uploadedpicture.startsWith('http') ? user.uploadedpicture : nconf.get('relative_path') + user.uploadedpicture;
			}
			if (meta.config.defaultAvatar && !user.picture) {
				user.picture = User.getDefaultAvatar();
			}

			if (user.hasOwnProperty('status') && user.lastonline) {
				user.status = User.getStatus(user);
			}

			for (var i = 0; i < fieldsToRemove.length; i += 1) {
				user[fieldsToRemove[i]] = undefined;
			}

			// User Icons
			if (user.hasOwnProperty('picture') && user.username && parseInt(user.uid, 10) && !meta.config.defaultAvatar) {
				user['icon:text'] = (user.username[0] || '').toUpperCase();
				user['icon:bgColor'] = iconBackgrounds[Array.prototype.reduce.call(user.username, function (cur, next) {
					return cur + next.charCodeAt();
				}, 0) % iconBackgrounds.length];
			}

			if (user.hasOwnProperty('joindate')) {
				user.joindateISO = utils.toISOString(user.joindate);
			}

			if (user.hasOwnProperty('lastonline')) {
				user.lastonlineISO = utils.toISOString(user.lastonline) || user.joindateISO;
			}

			if (user.hasOwnProperty('banned') || user.hasOwnProperty('banned:expire')) {
				var result = User.bans.calcExpiredFromUserData(user);
				var unban = result.banned && result.banExpired;
				user.banned_until = unban ? 0 : user['banned:expire'];
				user.banned_until_readable = user.banned_until && !unban ? utils.toISOString(user.banned_until) : 'Not Banned';
				if (unban) {
					return User.bans.unban(user.uid, function (err) {
						if (err) {
							return next(err);
						}
						user.banned = false;
						next(null, user);
					});
				}
			}
			next(null, user);
		}, function (err, users) {