diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/client.js | 28 | ||||
| -rw-r--r-- | lib/index.js | 17 | ||||
| -rw-r--r-- | lib/server.js | 77 | ||||
| -rw-r--r-- | lib/upload.js | 66 |
4 files changed, 188 insertions, 0 deletions
diff --git a/lib/client.js b/lib/client.js new file mode 100644 index 0000000..913731d --- /dev/null +++ b/lib/client.js @@ -0,0 +1,28 @@ + +var irc = require('node-irc') + +var client = irc.Client( irc.jollo.org, process.env.IRC_NICK, { + userName: process.env.IRC_NAME + realName: process.env.IRC_REALNAME, + port: 5000, + localAddress: null, + debug: false, + showErrors: false, + autoRejoin: false, + autoConnect: true, + channels: ["#sally","#afxchat"], + secure: true, + selfSigned: false, + certExpired: false, + floodProtection: false, + floodProtectionDelay: 1000, + sasl: false, + retryCount: 10, + retryDelay: 2000, + stripColors: false, + channelPrefixes: "&#", + messageSplit: 512, + encoding: '' +}) + +module.exports = client diff --git a/lib/index.js b/lib/index.js new file mode 100644 index 0000000..b604082 --- /dev/null +++ b/lib/index.js @@ -0,0 +1,17 @@ + +require('dotenv').config() + +var client = require('./client') +var server = require('./server') + +var router = server.init() + +router.post("/service/image", multer_upload.single('image'), function(req, res){ + upload.put("image", req.file, { + unacceptable: function(err){ + res.json({ error: err }) + }, + success: function(url){ + } + }) +}) diff --git a/lib/server.js b/lib/server.js new file mode 100644 index 0000000..8adb8d2 --- /dev/null +++ b/lib/server.js @@ -0,0 +1,77 @@ +var fs = require('fs') +var path = require('path') +var app, express = require('express') +var http = require('http') +var https = require('https') +var upload = require("./lib/upload") +var expressLiquid = require('express-liquid') + +var app, server, io + +var multer = require('multer') +var storage = multer.memoryStorage() +var multer_upload = multer({ storage: storage }) + +var site = {} +site.init = function(){ + app = site.app = express() + app.disable('x-powered-by') + app.use(require('cookie-parser')()) + app.use(require('body-parser').urlencoded({ extended: true })) + app.set('trust proxy', 1) + app.use(session({ + store: sessionStore, + secret: 'orAngEDju1CeZlOl', + name: 'orange-juice', + resave: false, + saveUninitialized: true, + cookie: { secure: true } + })) + app.use(express.static( path.join(__dirname, '../public'))) +/* + app.set('views', path.join(__dirname, '/views')) + app.set('view engine', 'liquid') + app.engine('liquid', expressLiquid({ + traceError: false + })) + app.use(expressLiquid.middleware) +*/ + + var csrfMiddleware = csrf() + + if (OK_PRODUCTION) { + server = site.server = site.http(app) + } + else { + server = site.server = site.https(app) + } + + io = site.io = require('socket.io')(server) + io.on('connection', function(socket){ + // client.on('event', function(data){}) + // client.on('disconnect', function(){}) + }) + + var router = app.Router () + return router +} +site.http = function(app){ + var server = http.createServer(app).listen(process.env.PORT, function () { + var port = server.address().port + console.log('Server listening at https://lvh.me:%s', port) + }) + return server +} +site.https = function(app){ + var credentials = { + key: fs.readFileSync('./certs/lvh.me.key', 'utf8'), + cert: fs.readFileSync('./certs/lvh.me.cert', 'utf8'), + } + var server = https.createServer(credentials, app).listen(process.env.PORT, function () { + var port = server.address().port + console.log('Server listening at https://lvh.me:%s', port) + }) + return server +} + +module.exports = site
\ No newline at end of file diff --git a/lib/upload.js b/lib/upload.js new file mode 100644 index 0000000..62ed9de --- /dev/null +++ b/lib/upload.js @@ -0,0 +1,66 @@ + +var crypto = require('crypto') +var knox = require('knox') + +var s3 = module.exports.s3 = knox.createClient({ + key: process.env.S3_KEY, + secret: process.env.S3_SECRET, + bucket: process.env.S3_BUCKET, +}); + +var acceptableuploadTypes = { + 'image/gif': 'gif', + 'image/jpeg': 'jpg', + 'image/png': 'png' +} + +module.exports.put = function (key, file, opt) { + var fileSize, fileType, filename + var err + var now = new Date() + + var extension = acceptableuploadTypes[file.mimetype] + filename = crypto.createHash('md5').update(file.buffer).digest('hex') + "." + extension; + + var remote_path = process.env.S3_DIR + filename + + if (! extension) { + err = "Unacceptable filetype" + } + else if (file.size < 10) { + err = "File too small" + } + else if (file.size > 2097152) { // 2mb limit + err = "File too large. Uploads can be a maximum of 2 mb." + } + + if (err) { + console.error(">>>", err) + opt.unacceptable && opt.unacceptable(err) + return + } + + opt.acceptable && opt.acceptable(err) + + console.log("upload > ", remote_path) + s3.putBuffer(file.buffer, remote_path, { + 'Content-Length': file.size, + 'Content-Type': file.mimetype, + 'x-amz-acl': 'public-read', + }, function(err, s3res) { + if (err || s3res.statusCode !== 200) { + console.error(s3res.statusCode, err) + if (s3res && s3res.resume) { + s3res.resume() + } + return + } + + var file_url = s3res.url || s3res.req.url + + opt.success && opt.success(file_url) + }).on('error', function(err, s3res){ + console.error("error", err) + s3res && s3res.resume && s3res.resume() + }) +} |
