Skip to content

Commit

Permalink
twitter推送功能(需梯子)
Browse files Browse the repository at this point in the history
  • Loading branch information
鄢继雄 authored and 鄢继雄 committed Apr 28, 2017
1 parent cb33bc7 commit 43f6e0e
Show file tree
Hide file tree
Showing 13 changed files with 347 additions and 78 deletions.
16 changes: 0 additions & 16 deletions .editorconfig

This file was deleted.

164 changes: 164 additions & 0 deletions .eslintrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,164 @@
{
"env": {
"node": true,
"es6": true
},
globals: {
"DisabledUserError": true
},
"rules": {
"no-var": 2,
"no-const-assign": 2,
"strict": [2, "global"],

"comma-dangle": [2, "never"],
"no-cond-assign": [2, "except-parens"],
"no-console": 0,
"no-control-regex": 2,
"no-debugger": 2,
"no-dupe-args": 2,
"no-dupe-keys": 2,
"no-duplicate-case": 0,
"no-empty-character-class": 2,
"no-empty": 2,
"no-extra-boolean-cast": 2,
"no-extra-parens": 0,
"no-extra-semi": 2,
"no-func-assign": 2,
"no-inner-declarations": [2, "functions"],
"no-invalid-regexp": 2,
"no-irregular-whitespace": 2,
"no-negated-in-lhs": 2,
"no-obj-calls": 2,
"no-regex-spaces": 2,
"no-reserved-keys": 0,
"no-sparse-arrays": 2,
"no-unexpected-multiline": 2,
"no-unreachable": 2,
"use-isnan": 2,
"valid-typeof": 2,

"accessor-pairs": 0,
"block-scoped-var": 0,
"complexity": 0,
"consistent-return": 0,
"curly": [2, "all"],
"default-case": 0,
"dot-notation": [2, { "allowKeywords": true, "allowPattern": "" }],
"dot-location": [2, "property"],
"eqeqeq": 2,
"guard-for-in": 0,
"no-caller": 2,
"no-div-regex": 2,
"no-else-return": 2,
"no-eq-null": 0,
"no-eval": 2,
"no-extend-native": 2,
"no-extra-bind": 2,
"no-fallthrough": 0,
"no-floating-decimal": 2,
"no-implied-eval": 2,
"no-iterator": 2,
"no-labels": 2,
"no-lone-blocks": 2,
"no-loop-func": 2,
"no-multi-spaces": 2,
"no-multi-str": 2,
"no-native-reassign": 2,
"no-new-func": 2,
"no-new-wrappers": 2,
"no-new": 2,
"no-octal-escape": 2,
"no-octal": 2,
"no-param-reassign": 0,
"no-process-env": 0,
"no-proto": 2,
"no-redeclare": 2,
"no-return-assign": 2,
"no-script-url": 2,
"no-self-compare": 2,
"no-sequences": 2,
"no-throw-literal": 2,
"no-unused-expressions": 0,
"no-void": 0,
"no-with": 2,
"radix": 2,
"vars-on-top": 2,
"wrap-iife": [2, "inside"],
"yoda": [2, "never"],

"no-catch-shadow": 0,
"no-delete-var": 2,
"no-label-var": 2,
"no-shadow-restricted-names": 2,
"no-shadow": 0,
"no-undef-init": 2,
"no-undef": 2,
"no-unused-vars": [2, { "vars": "local", "args": "after-used" }],
no-use-before-define: [2, "nofunc"],

"handle-callback-err": 2,
"no-mixed-requires": 2,
"no-new-require": 2,
"no-path-concat": 2,
"no-process-exit": 0,
"no-restricted-modules": [2, ""], // add any unwanted Node.js core modules

"array-bracket-spacing": [2, "never"],
"brace-style": [2],
"comma-spacing": [2, { "before": false, "after": true }],
"comma-style": [2, "last"],
"computed-property-spacing": 0,
"consistent-this": 0,
"eol-last": 2,
"func-style": 0,
"indent": [2, 2],
"key-spacing": [2, { "beforeColon": false, "afterColon": true }],
"linebreak-style": 0,
"max-nested-callbacks": [0, 3],
"new-cap": 0,
"new-parens": 2,
"newline-after-var": 0,
"no-array-constructor": 2,
"no-continue": 0,
"no-inline-comments": 0,
"no-mixed-spaces-and-tabs": 2,
"no-multiple-empty-lines": [2, { "max": 1 }],
"no-nested-ternary": 0,
"no-new-object": 2,
"no-spaced-func": 2,
"no-ternary": 0,
"no-trailing-spaces": 2,
"no-underscore-dangle": 0,
"no-unneeded-ternary": 2,
"object-curly-spacing": [2, "always"],
"one-var": [2, "never"],
"padded-blocks": [0, "never"],
"quote-props": [0, "as-needed"],
"quotes": [2, "single"],
"semi-spacing": [2, { "before": false, "after": true }],
"semi": [2, "always"],
"sort-vars": 0,
"space-after-keywords": 0,
"space-before-blocks": [2, "always"],
"space-before-function-paren": [2, { "anonymous": "always", "named": "never" }],
"space-in-parens": [2, "never"],
"space-infix-ops": 2,
"keyword-spacing": 2,
"space-unary-ops": 0,
"spaced-comment": [2, "always"],
"wrap-regex": 2,

"constructor-super": 2,
"generator-star-spacing": [2, { "before": true, "after": false }],
"no-this-before-super": 2,
"object-shorthand": [2, "always"],
"prefer-const": 2,

"max-depth": [0, 3],
"max-len": [2, 140, 2],
"max-params": 0,
"max-statements": 0,
"no-bitwise": 2,
}
}
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,9 @@ gaoqi-blog

# changelog

## 1.0.6 / 2017-02-06
* twitter发送新帖

## 1.0.5 / 2017-01-04
* 百度分享
* 文章收藏
Expand Down
106 changes: 49 additions & 57 deletions app.js
Original file line number Diff line number Diff line change
@@ -1,41 +1,42 @@
/*!
/**
gaoqi-blog app.js
*/


var config = require('./config');
var path = require('path');
var Loader = require('loader');
var LoaderConnect = require('loader-connect')
var express = require('express');
var session = require('express-session');
var errorhandler = require('errorhandler');
var RedisStore = require('connect-redis')(session);
var redisClient = require('./common/redis.js');
var passport = require('passport');
'use strict';

const config = require('./config');
const path = require('path');
const Loader = require('loader');
const LoaderConnect = require('loader-connect');
const express = require('express');
const session = require('express-session');
const errorhandler = require('errorhandler');
const RedisStore = require('connect-redis')(session);
const redisClient = require('./common/redis.js');
const passport = require('passport');
require('./models');
var auth = require('./middleware/auth');
var online = require('./middleware/online');
var GitHubStrategy = require('passport-github').Strategy;
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var compress = require('compression');
var busboy = require('connect-busboy');
var _ = require('lodash');
var csurf = require('csurf');
var cors = require('cors');
var render = require('./common/render');
var cutter = require('./common/cutter');
var responseTimeMiddleware = require('./middleware/statsd').responseTime;

var webRouter = require('./web_router');
var webApi = require('./web_api');

var app = express();
const auth = require('./middleware/auth');
const online = require('./middleware/online');
const GitHubStrategy = require('passport-github').Strategy;
const cookieParser = require('cookie-parser');
const bodyParser = require('body-parser');
const compress = require('compression');
const busboy = require('connect-busboy');
const _ = require('lodash');
const csurf = require('csurf');
const cors = require('cors');
const render = require('./common/render');
const cutter = require('./common/cutter');
const responseTimeMiddleware = require('./middleware/statsd').responseTime;

const webRouter = require('./web_router');
const webApi = require('./web_api');

const app = express();

// 静态文件目录
var staticDir = path.join(__dirname, 'public');
var assets = {};
const staticDir = path.join(__dirname, 'public');
let assets = {};
if (process.env.NODE_ENV === 'production') {
try {
assets = require('./assets.json');
Expand All @@ -61,20 +62,20 @@ app.use(require('method-override')());
app.use(cookieParser(config.session_secret));
app.use(compress());
app.use(session({
secret: config.session_secret,
store: new RedisStore({
client: redisClient,
port: config.redis_port,
host: config.redis_host
}),
resave: true,
saveUninitialized: true
secret: config.session_secret,
store: new RedisStore({
client: redisClient,
port: config.redis_port,
host: config.redis_host
}),
resave: true,
saveUninitialized: true
}));
app.use(passport.initialize());

// custom middleware 过滤未登陆
app.use(auth.authUser);
//缓存已登录用户标识在线
// 缓存已登录用户标识在线
app.use(online.cacheOnline);

// 静态资源
Expand All @@ -94,7 +95,7 @@ if (!config.debug) {
app.set('view cache', true);
}

//github oauth
// github oauth
passport.serializeUser(function (user, done) {
done(null, user);
});
Expand All @@ -107,9 +108,9 @@ passport.use(new GitHubStrategy(config.GITHUB_OAUTH, function (accessToken, refr

// set static, dynamic helpers
_.extend(app.locals, {
config: config,
Loader: Loader,
assets: assets
config,
Loader,
assets
});
_.extend(app.locals, render);
_.extend(app.locals, cutter);
Expand All @@ -128,32 +129,23 @@ app.use(busboy({
app.use(responseTimeMiddleware({
host: '121.40.129.45',
requestKey: 'gaoqi_blog'
}))
}));

app.use('/', webRouter);
app.use('/api', cors(), webApi);

// webRouter.stack.forEach(function(item) {
// console.log(Object.keys(item.route.methods)[0].toUpperCase(), ' ', item.route.path);
// });

// webApi.stack.forEach(function(item) {
// console.log(Object.keys(item.route.methods)[0].toUpperCase(), ' ', item.route.path);
// })

// error handler
if (config.debug) {
app.use(errorhandler());
} else {
app.use(function (err, req, res, next) {
app.use(function (err, req, res) {
console.log(err);
return res.status(500).send('500 status');
});
}

app.listen(process.env.PORT || config.port, function () {
console.log("GaoqiBlog listening on port %s in %s mode", process.env.PORT || config.port, app.settings.env);
console.log('GaoqiBlog listening on port %s in %s mode', process.env.PORT || config.port, app.settings.env);
});


module.exports = app;
41 changes: 41 additions & 0 deletions common/meta.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
/**
* meta
* @authors yanjixiong
* @date 2017-04-28 20:53:52
*/

'use strict';

const config = require('../config');
const render = require('./render');
const cutter = require('./cutter');

/**
* 生成twitter的head meta信息
* @param {[type]} category 分类
* @param {[type]} author 作者
* @param {[type]} post 文章
* @return {[type]} [description]
*/
exports.getTwitterMeta = function getTwitterMeta(category, author, post) {
let categoryName = '';

config.tabs.forEach(function (tab) {
if (tab[0] === category) {
categoryName = tab[1];
}
});

const meta = [
'<meta name="twitter:card" content="summary" />',
'<meta name="twitter:description" content="' + categoryName + ' - @' +
author.login_name + ' - ' +
cutter.shorter(render.cleanMarkdown(post.content), 70) + '" />',
'<meta name="twitter:title" content=" ' + post.title + ' - ' + config.name + '" />',
'<meta name="twitter:image" content="' + author.avatar + '" />',
'<meta name="twitter:site" content="@gaoqi-blog" />',
'<meta name="twitter:creator" content="@gaoqi-blog" />'
];

return meta.join('\n');
};
Loading

0 comments on commit 43f6e0e

Please sign in to comment.