diff options
| author | Jules Laplace <jules@okfoc.us> | 2016-11-14 11:49:32 -0500 |
|---|---|---|
| committer | Jules Laplace <jules@okfoc.us> | 2016-11-14 11:49:32 -0500 |
| commit | 4d6690ccc48266e7755829d32bf0440177d8c391 (patch) | |
| tree | c7f895f65316c8853bf7a916320b32be5bb45e2a | |
initial stuff
| -rw-r--r-- | .gitignore | 43 | ||||
| -rw-r--r-- | LNT-1.txt | 29 | ||||
| -rw-r--r-- | certs/lvh.me.cert | 18 | ||||
| -rw-r--r-- | certs/lvh.me.key | 27 | ||||
| -rw-r--r-- | index.js | 5 | ||||
| -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 | ||||
| -rw-r--r-- | package.json | 21 | ||||
| -rw-r--r-- | public/index.html | 0 |
11 files changed, 331 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..fc30368 --- /dev/null +++ b/.gitignore @@ -0,0 +1,43 @@ +lib-cov +*.seed +*.log +*.csv +*.dat +*.out +*.pid +*.gz + +pids +logs +results + +.DS_Store + +bower_components +node_modules + +.bundle +db/*.sqlite3 +log/*.log +tmp/ +.sass-cache +.#* +*~ +*.orig +*# +*.swp +*.mp4 +*.db + +config.json + +app.concat.js +app.min.js + +static.concat.js +static.min.js + +.env + +!init.sql + diff --git a/LNT-1.txt b/LNT-1.txt new file mode 100644 index 0000000..7a26d10 --- /dev/null +++ b/LNT-1.txt @@ -0,0 +1,29 @@ + Jollo LNT license + Version 1 - February 2015 + + Copyright, 2015. JOLLO NET NA. + The Jollo IRC Network. <https://jollo.org/> + + Vu, fare wanderer, confronted with raw, programmatic instruction + dans la forme la plus pure. A hesitation, troubled to the terms + qui ce license affirme. Par un voyage du explorer le mechanisme + et ponder la fabrication. Voila! La remide: egress sans risque. + + Sans trace (Leave No Trace) via sept principales: + + 0. Modifique language en advance. L'Apposer Jollo LNT license + with copies en distribuer. + + 1. Non responsible pour neglige programme du problematique. + + 2. Non sympathie pour neglige programme du problematique. + + 3. Non permission l'modifique under any circumstance. + + 4. Non permission distribution under any circumstance. + + 5. Respect les programmatic instructions. + + 6. Non interfere avec l'harmonie d'une amitie. + +
\ No newline at end of file diff --git a/certs/lvh.me.cert b/certs/lvh.me.cert new file mode 100644 index 0000000..42eb16b --- /dev/null +++ b/certs/lvh.me.cert @@ -0,0 +1,18 @@ +-----BEGIN CERTIFICATE----- +MIIC9TCCAd2gAwIBAgIJAO5Vh/rrbA1JMA0GCSqGSIb3DQEBBQUAMBExDzANBgNV +BAMMBmx2aC5tZTAeFw0xNjA2MTUxNjI0NTZaFw0yNjA2MTMxNjI0NTZaMBExDzAN +BgNVBAMMBmx2aC5tZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMrC +BwQaROMsTCdSEjkkQITSoeJUaCfQ8Fl16zNQQQqo1eXvQ5u3bBML9+IrloToHtFg +FlSY51vX3EDMir4NDhkh1Z8to5Xwy5/rv+wOeWw32cTvs8uSVhluKHxwkP7wg1cE +50eUril+mCW3qq551fsLH5OGWwmHolBfD0zu909Gc3u/0ifPo7ZfJx5BZgVS5fcg +4mIiYHiuGlgK7paQMLpNmqoBCaNCsDLzH6schM6pVUIfOJTJ7RuWyMLHa2tlHLT5 +K8FThT9IlqvavtQnj059U886+SNLH1r0I6UnVaMSrrzFOGFj78Nk8L4icHS+bYWI +1Zf5YD6TWXcudtLN4NUCAwEAAaNQME4wHQYDVR0OBBYEFHKFJ/7cRpUMJQbuH+h8 +BSRZOacAMB8GA1UdIwQYMBaAFHKFJ/7cRpUMJQbuH+h8BSRZOacAMAwGA1UdEwQF +MAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAHZJVVrKu0mPiu10qbrd6Np+36teBtzM +S3XWGcBauZw9cIsZS2S45M5JNfr4xuDUYmjUx7GTWjMqwHspw/BmIsL2hWFodGuf +fQ7cVefvy/FlG54C5PLnElYkcin3IazowuIk28WAnrFwGJ54cZm2HWcDjLK4ya1X +2BIPRbPHIPNMBi+hfEz3xd1x8IMkqxzvs79myW1350y8srAequ77yUHCDYagE4/J +Juto9PBIzSBvK2INxlF2/LbQnafift2bGTgFvf0gjpJJIC6jHR/MeOnKx9tK2UqR +g5JOfbatD3i3lzzhBrpz/kDbz/fA4pbLpAyMGRLoN3SIiUo+QsfADM8= +-----END CERTIFICATE----- diff --git a/certs/lvh.me.key b/certs/lvh.me.key new file mode 100644 index 0000000..08c2804 --- /dev/null +++ b/certs/lvh.me.key @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEowIBAAKCAQEAysIHBBpE4yxMJ1ISOSRAhNKh4lRoJ9DwWXXrM1BBCqjV5e9D +m7dsEwv34iuWhOge0WAWVJjnW9fcQMyKvg0OGSHVny2jlfDLn+u/7A55bDfZxO+z +y5JWGW4ofHCQ/vCDVwTnR5SuKX6YJbeqrnnV+wsfk4ZbCYeiUF8PTO73T0Zze7/S +J8+jtl8nHkFmBVLl9yDiYiJgeK4aWArulpAwuk2aqgEJo0KwMvMfqxyEzqlVQh84 +lMntG5bIwsdra2UctPkrwVOFP0iWq9q+1CePTn1Tzzr5I0sfWvQjpSdVoxKuvMU4 +YWPvw2TwviJwdL5thYjVl/lgPpNZdy520s3g1QIDAQABAoIBAQCtzAMXkSzbTW05 +hy/3qwtizunUh2WAO6jKBjnFklUuPeqbXawmHeOVr/ya8aHj6tP/xM1fVnF6WF2D +bdC/d5FOGaJy/zvpmq3wNrQcM4wBJx6ToKQNKzKCOdqaUCL5ZFAwlxNoWBmxl8Hz +EqxLQkQZHD/ExLXkRU7sdY838t4qJEJxaaulx2WmESApjcGVX2aXhJbCflL85wdf +kjfkh4v1WhJwi9hVTFbnHzkuw78xq1mXxEysOrPCz7ASpE7KyZQd4GNtvvDvnbPk +VaR54N9WL2e067sGP3zdm+wznrnl7aZkFZCVkuANNiUAkFTcNfOlhM5azVZSQ6kE +k8veqtIBAoGBAO8JDm+y3blb7qS4/IMmKs2iUtZszttVEurFtDCIHTaqY8YfWzlo +FgF/Vd3RcMYbckw+borXQDgfrFs6Erozb5htlfihZiZGONl6vDZ2Kus5XoKwTDqP +s6AMXke1jddSXV4iVogvOzOhGqStq2LTIE8+xzd0kfna0aVbFCsrZTHNAoGBANkl +3A1xI7yAiuAv1TRf/ZrQtQuPu/r9R+YeEhi69yrIW4pEXeFJqb8qEjWcJU0mFDQ8 +79/nEKuW6h+Bd6gucS7vlDEXdVxtcB1tvXHEHVZTB6PSW4gshE6KevtvzhNUZHhn +/plAEeMkcwu5TxJi732YYZKepc8Ydte6HwhqkYMpAoGAagNwPaXspGrben74rwnc +bfsSFjuHussOasVoVyXnHvmO6q25fcpmCB/7azeadqJxnNMLn9Q7jSiu/n7RE3gA +hHAF1ZFvhoYabIn8s4LRIiX9fqTGCir1lYQmxFMHJ3pGIpvEGP4pmYpYELVdj6Tn +bX4ASN4QZ+nelSHB3iuO4/kCgYBwxgzGnl+k4k09qRndHY0j/ghIfNlvvGK+zBcx +6Me83FlOMbtf6VXTBhJ27SUiMAiGKK+bZPFva+0jd6WhHp2BdsNLy5cT7XIwlnGw +x91Em9J37iPDUPtVnu3H74Ti3Q1gywGarX+cq61kBVVfgypF3AGwl9wc9eOinfLH ++DCiIQKBgBnSdOtGto/c8GZynswjzZ36wrpGkEdSy6Uh/6jn9hipefS2Hw9XFcJr +LILXiFzFWUGkHyICUsbyZfsaVb3Ym0KttqyNT8Phn+602k/dyecRqapK2amQx3Du +423OrkbdZo5RXtgqj2Y6z3eGIDO9Ds8VUSQQ+O5tVr6b+YrVgPJB +-----END RSA PRIVATE KEY----- diff --git a/index.js b/index.js new file mode 100644 index 0000000..0563f80 --- /dev/null +++ b/index.js @@ -0,0 +1,5 @@ + +require('dotenv').config() +var app = require('./lib') +app.init() + 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() + }) +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..7d4663a --- /dev/null +++ b/package.json @@ -0,0 +1,21 @@ +{ + "name": "panda", + "version": "1.0.0", + "description": "panda irc bot", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "git@ghghgh.us:panda.git" + }, + "author": "ryz@asdf.us", + "private": true, + "license": "SEE LICENSE IN LNT-1.txt", + "dependencies": { + "dotenv": "^2.0.0", + "express": "^4.14.0", + "node-irc": "0.0.4" + } +} diff --git a/public/index.html b/public/index.html new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/public/index.html |
