Example #1
0
  postNew: async function(req, res, next) {
    req.assert('title', 'Title must be at least 6 characters long').len(6);
    req.assert('markdown', 'Post must be at least 16 characters long').len(16);

    let errors = req.validationErrors();

    if (errors) {
      req.flash('errors', errors);
      return res.redirect('back');
    }

    try {
      let post = new Post();
      let imagesDir = App.getConfig('imagesDir');

      let postData = {
        user_id: req.user.get('id'),
        title: req.body.title,
        category_id: req.body.category,
        meta_description: req.body.meta_description || req.body.title,
        markdown: req.body.markdown,
        published: !!req.body.published,
        featured: !!req.body.featured
      };


      if (req.files && req.files.length) {
        postData.image_url = '/uploads/' + req.files[0].filename;

        Queue.publish('email', JSON.stringify({
          type: 'minify',
          url: 'public/uploads/' + postData.image_url
        }));
      }

      let tags = processTags(req.body.tags);

      post = await post.save(postData, {context: {user_id: req.user.get('id')}, updateTags: tags});

      if (post.get('published')) {
        xmlrpc.ping(post.toJSON());

        TwitBot.tweet('post', {
          id: post.get('id'),
          title: post.get('title'),
          body: 'https://nodeza.co.za/blog/' + post.get('slug')
        });
      }

      req.flash('success', { msg: 'Post successfully created.' });
      res.redirect('/blog/edit/' + post.get('id'));
    }
    catch (error) {
      console.error(error);
      req.flash('error', {msg: 'Database error, post not saved.'});
      res.redirect('back');
    }

  },
Example #2
0
 getSettings: function (req, res) {
   res.render('posts/config', {
     title: 'Posts Config',
     description: 'Posts Config',
     page: 'globalconfig',
     blog: App.getConfig('blog')
   });
 },
Example #3
0
  getBlogCategory: function (req, res, error) {
    let posts = new Posts();
    let slug = req.params.slug;
    let page = parseInt(req.query.p, 10);
    let currentpage = page || 1;
    let settings = App.getConfig('blog');

    if (currentpage < 1) {
      res.redirect('/blog/category/' + slug);
    }

    Category.forge({slug: slug})
    .fetch({columns: ['id', 'name']})
    .then(function (model) {
      let categoryName  = model.get('name');

      return posts.fetchBy('created_at', {
        limit: settings.postsPerPage,
        page: currentpage,
        andWhere: ['category_id', '=', model.get('id')],
        base:'/blog/category/' + slug
      },
      {
        columns: ['slug', 'html', 'title', 'category_id', 'published_at'],
        withRelated: ['category']
      })
      .then(function (collection) {
        res.render('posts/posts', {
          title: 'Blog',
          pagination: posts.pages,
          posts: collection.toJSON(),
          description: 'Node.js tutorials, articles and news',
          page: 'blog',
          tag: '',
          category: categoryName,
          query: {}
        });
      })
      .catch(function (error) {
        req.flash('errors', {'msg': error.message});
        next(error);
      });
    })
    .catch(function (error) {
      req.flash('errors', {'msg': error.message});
      next(error);
    });
  },
Example #4
0
  getRSS: function (req, res, next) {
    let config = App.getConfig('site');
    let Posts = App.getCollection('Posts');

    config.baseUrl = config.baseUrl || 'http://' + req.headers.host;

    let feed = new RSS({
      title: config.siteName,
      description: config.description,
      feed_url: config.baseUrl + '/rss',
      site_url: config.baseUrl,
      language: 'en',
      author: config.siteName
    });

    Posts.forge()
    .fetchBy('published_at', {
      page: 1,
      limit: config.rssLimit
    }, {
      columns: ['id', 'slug', 'title', 'user_id', 'meta_description', 'published_at'],
      withRelated: ['created_by']
    })
    .then(function (collection) {

      collection.forEach(function (post) {
        feed.item({
          guid: post.get('id'),
          title: post.get('title'),
          description: post.get('meta_description'),
          url: config.baseUrl + '/blog/' + post.get('slug'),
          author: post.related('created_by').get('name'),
          date: post.get('published_at')
        });
      });

      res.end(feed.xml());
    })
    .catch(function (error) {
      next(error);
    });
  },
Example #5
0
  getPost: function (req, res, next) {
    let slug = req.params.slug;
    let settings = App.getConfig('blog');
    let opts = {slug: slug};

    if (!req.isAuthenticated()) {
      opts.published = 1;
    }

    return Post.forge(opts)
    .fetch({
      withRelated: ['created_by', 'tags', 'category'],
      require: true
    })
    .then(function (post) {
      let author = post.related('created_by').getJSON(['slug', 'name', 'about']);

      author.gravatar = post.related('created_by').gravatar(48);

      res.render('posts/post', {
        page: 'blog',
        config: settings,
        gravatar: post.related('created_by').gravatar(48),
        title: post.get('title'),
        description: post.get('meta_description') || '',
        author: author,
        category: post.related('category').toJSON(),
        url: 'http://' + req.headers.host + '/blog/' + slug,
        keywords: _.map(post.related('tags').toJSON(), 'name'),
        post: post.toJSON()
      });

      return post.viewed();
    })
    .catch(function (error) {
      req.flash('errors', {'msg': error.message});
      next(error);
    });
  },
Example #6
0
  getBlog: function (req, res, next) {
    let posts = new Posts();
    let currentpage = req.query.p ? parseInt(req.query.p, 10) : 1;
    let settings = App.getConfig('blog');

    res.locals._page = 'blog';

    if (currentpage < 1) {
      res.redirect('/blog');
    }

    posts.fetchBy('published_at', {
      page: currentpage,
      limit: settings.postsPerPage,
      where: ['published_at', '<', new Date()]
    }, {
      columns: ['slug', 'html', 'title', 'category_id', 'published_at','image_url'],
      withRelated: ['category']
    })
    .then(function (collection) {
      res.render('posts/posts', {
        title: settings.title || 'Blog',
        pagination: posts.pages,
        posts: collection.toJSON(),
        description: settings.description || 'Node.js tutorials, articles and news',
        page: 'blog',
        tag: '',
        category: '',
        query: {},
        config: settings
      });
    })
    .catch(function (error) {
      req.flash('errors', {'msg': error.message});
      next(error);
    });
  },
Example #7
0
  getEvent: function (req, res, next) {
    let slug = req.params.slug;
    let event = new nodeEvent({slug: slug});
    let settings = App.getConfig('events');

    event.fetch()
    .then(function (event) {
      res.render('events/event', {
        config: settings,
        title: event.get('title'),
        parseDate: event.parseDate(),
        parseTime: event.parseTime(),
        myEvent: event.toJSON(),
        description: event.get('title'),
        page: 'events'
      });

      return event.viewed();
    })
    .catch(function (error) {
      req.flash('errors', {'msg': error.message});
      next(error);
    });
  },
Example #8
0
File: rss.js Project: NodeZA/nodeza
/*
  This file contains the program for creating an rss feed
*/

const App = require('widget-cms');
const RSS = require('rss');
const config = App.getConfig('site');
const Posts = App.getCollection('Posts');


/*
    Creates rss feed
*/
module.exports = function (req, res) {
  "use strict";

  config.baseUrl = config.baseUrl || 'http://' + req.headers.host;

  let feed = new RSS({
    title: config.siteName,
    description: config.description,
    feed_url: config.baseUrl + '/rss',
    site_url: config.baseUrl,
    language: 'en',
    author: config.siteName
  });

  return Posts.forge()
  .fetchBy('published_at', {
    page: 1,
Example #9
0
"use strict";

const GitHubStrategy = require('passport-github').Strategy;
const LocalStrategy = require('passport-local').Strategy;
const App = require('widget-cms');
const passport = App.passport;
const User = App.getModel('User');
const Tokens = App.getCollection('Tokens');
const Token = App.getModel('Token');
const config = App.getConfig('github');
const githubConfig = App.getConfig('github');


passport.deserializeUser(async function(id, done) {
  try {
    let user = await User.forge({id: id}).fetch({withRelated: ['role', 'tokens','unreadmessages'],require: true});

    done(false, user);
  }
  catch (error) {
    done(error);
  }
});

passport.serializeUser(function(user, done) {
  done(null, user.get('id'));
});


passport.use(new GitHubStrategy(githubConfig, async function (req, accessToken, refreshToken, profile, done) {
  console.log(profile);