first commit - seedlinux - web app for indexing opensource torrents with share … | |
Log | |
Files | |
Refs | |
README | |
--- | |
commit ae7071ce130a7c4060c471515a90e9deb2d886c4 | |
Author: Jay Scott <[email protected]> | |
Date: Sun, 25 Jun 2017 16:45:20 +0100 | |
first commit | |
Diffstat: | |
A .gitignore | 58 ++++++++++++++++++++++++++++++ | |
A README.md | 32 +++++++++++++++++++++++++++++… | |
A app.js | 57 +++++++++++++++++++++++++++++… | |
A bin/www | 90 +++++++++++++++++++++++++++++… | |
A package-lock.json | 452 +++++++++++++++++++++++++++++… | |
A package.json | 20 ++++++++++++++++++++ | |
A public/images/logo.png | 0 | |
A public/stylesheets/style.css | 109 +++++++++++++++++++++++++++++… | |
A routes/index.js | 9 +++++++++ | |
A routes/torrents.js | 9 +++++++++ | |
A views/error.twig | 7 +++++++ | |
A views/index.twig | 6 ++++++ | |
A views/layout.twig | 53 ++++++++++++++++++++++++++++++ | |
13 files changed, 902 insertions(+), 0 deletions(-) | |
--- | |
diff --git a/.gitignore b/.gitignore | |
@@ -0,0 +1,58 @@ | |
+# Logs | |
+logs | |
+*.log | |
+npm-debug.log* | |
+yarn-debug.log* | |
+yarn-error.log* | |
+ | |
+# Runtime data | |
+pids | |
+*.pid | |
+*.seed | |
+*.pid.lock | |
+ | |
+# Directory for instrumented libs generated by jscoverage/JSCover | |
+lib-cov | |
+ | |
+# Coverage directory used by tools like istanbul | |
+coverage | |
+ | |
+# nyc test coverage | |
+.nyc_output | |
+ | |
+# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task… | |
+.grunt | |
+ | |
+# Bower dependency directory (https://bower.io/) | |
+bower_components | |
+ | |
+# node-waf configuration | |
+.lock-wscript | |
+ | |
+# Compiled binary addons (http://nodejs.org/api/addons.html) | |
+build/Release | |
+ | |
+# Dependency directories | |
+node_modules/ | |
+jspm_packages/ | |
+ | |
+# Typescript v1 declaration files | |
+typings/ | |
+ | |
+# Optional npm cache directory | |
+.npm | |
+ | |
+# Optional eslint cache | |
+.eslintcache | |
+ | |
+# Optional REPL history | |
+.node_repl_history | |
+ | |
+# Output of 'npm pack' | |
+*.tgz | |
+ | |
+# Yarn Integrity file | |
+.yarn-integrity | |
+ | |
+# dotenv environment variables file | |
+.env | |
diff --git a/README.md b/README.md | |
@@ -0,0 +1,32 @@ | |
+# Seed Linux | |
+ | |
+Seedlinux is a WIP application to list open source torrents that need help wit… | |
+ | |
+### Data import | |
+ | |
+If you are using MongoDB directly installed on your local machine or else wher… | |
+ | |
+ | |
+Pull the latest MongoDB docker image. | |
+ | |
+```bash | |
+docker pull mongo | |
+``` | |
+Run the docker image in a throw away container. | |
+ | |
+```bash | |
+docker run -p 27017:27017 -ti --rm mongo` | |
+``` | |
+Seed the data using mongo-import tool. | |
+ | |
+```bash | |
+mongoimport --db seedlinux --collection torrents --drop --file ./data/dataset.… | |
+``` | |
+ | |
+### Stuff used to make this: | |
+ | |
+ * [Docker](https://hub.docker.com/_/mongo/) image for MongoDB. | |
+ * [MongoDB import](https://docs.mongodb.com/getting-started/shell/import-dat… | |
+ * [ExpressJS](https://expressjs.com) web framework. | |
+ * [Bulma](http://bulma.io/) CSS framework. | |
+ | |
diff --git a/app.js b/app.js | |
@@ -0,0 +1,57 @@ | |
+var express = require('express'); | |
+var path = require('path'); | |
+var favicon = require('serve-favicon'); | |
+var logger = require('morgan'); | |
+var cookieParser = require('cookie-parser'); | |
+var bodyParser = require('body-parser'); | |
+ | |
+var index = require('./routes/index'); | |
+var torrents = require('./routes/torrents'); | |
+ | |
+// MongoDB | |
+var mongo = require('mongodb'); | |
+var monk = require('monk'); | |
+var db = monk('localhost:27017/seedlinux'); | |
+ | |
+var app = express(); | |
+ | |
+// view engine setup | |
+app.set('views', path.join(__dirname, 'views')); | |
+app.set('view engine', 'twig'); | |
+ | |
+// uncomment after placing your favicon in /public | |
+//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); | |
+app.use(logger('dev')); | |
+app.use(bodyParser.json()); | |
+app.use(bodyParser.urlencoded({ extended: false })); | |
+app.use(cookieParser()); | |
+app.use(express.static(path.join(__dirname, 'public'))); | |
+ | |
+// db access | |
+app.use(function(req,res,next){ | |
+ req.db = db; | |
+ next(); | |
+}); | |
+ | |
+app.use('/', index); | |
+app.use('/torrents', torrents); | |
+ | |
+// catch 404 and forward to error handler | |
+app.use(function(req, res, next) { | |
+ var err = new Error('Not Found'); | |
+ err.status = 404; | |
+ next(err); | |
+}); | |
+ | |
+// error handler | |
+app.use(function(err, req, res, next) { | |
+ // set locals, only providing error in development | |
+ res.locals.message = err.message; | |
+ res.locals.error = req.app.get('env') === 'development' ? err : {}; | |
+ | |
+ // render the error page | |
+ res.status(err.status || 500); | |
+ res.render('error'); | |
+}); | |
+ | |
+module.exports = app; | |
diff --git a/bin/www b/bin/www | |
@@ -0,0 +1,90 @@ | |
+#!/usr/bin/env node | |
+ | |
+/** | |
+ * Module dependencies. | |
+ */ | |
+ | |
+var app = require('../app'); | |
+var debug = require('debug')('seedlinux:server'); | |
+var http = require('http'); | |
+ | |
+/** | |
+ * Get port from environment and store in Express. | |
+ */ | |
+ | |
+var port = normalizePort(process.env.PORT || '3000'); | |
+app.set('port', port); | |
+ | |
+/** | |
+ * Create HTTP server. | |
+ */ | |
+ | |
+var server = http.createServer(app); | |
+ | |
+/** | |
+ * Listen on provided port, on all network interfaces. | |
+ */ | |
+ | |
+server.listen(port); | |
+server.on('error', onError); | |
+server.on('listening', onListening); | |
+ | |
+/** | |
+ * Normalize a port into a number, string, or false. | |
+ */ | |
+ | |
+function normalizePort(val) { | |
+ var port = parseInt(val, 10); | |
+ | |
+ if (isNaN(port)) { | |
+ // named pipe | |
+ return val; | |
+ } | |
+ | |
+ if (port >= 0) { | |
+ // port number | |
+ return port; | |
+ } | |
+ | |
+ return false; | |
+} | |
+ | |
+/** | |
+ * Event listener for HTTP server "error" event. | |
+ */ | |
+ | |
+function onError(error) { | |
+ if (error.syscall !== 'listen') { | |
+ throw error; | |
+ } | |
+ | |
+ var bind = typeof port === 'string' | |
+ ? 'Pipe ' + port | |
+ : 'Port ' + port; | |
+ | |
+ // handle specific listen errors with friendly messages | |
+ switch (error.code) { | |
+ case 'EACCES': | |
+ console.error(bind + ' requires elevated privileges'); | |
+ process.exit(1); | |
+ break; | |
+ case 'EADDRINUSE': | |
+ console.error(bind + ' is already in use'); | |
+ process.exit(1); | |
+ break; | |
+ default: | |
+ throw error; | |
+ } | |
+} | |
+ | |
+/** | |
+ * Event listener for HTTP server "listening" event. | |
+ */ | |
+ | |
+function onListening() { | |
+ var addr = server.address(); | |
+ var bind = typeof addr === 'string' | |
+ ? 'pipe ' + addr | |
+ : 'port ' + addr.port; | |
+ debug('Listening on ' + bind); | |
+} | |
diff --git a/package-lock.json b/package-lock.json | |
@@ -0,0 +1,452 @@ | |
+{ | |
+ "name": "seedlinux", | |
+ "version": "0.0.1", | |
+ "lockfileVersion": 1, | |
+ "dependencies": { | |
+ "accepts": { | |
+ "version": "1.3.3", | |
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", | |
+ "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=" | |
+ }, | |
+ "array-flatten": { | |
+ "version": "1.1.1", | |
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.… | |
+ "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" | |
+ }, | |
+ "balanced-match": { | |
+ "version": "1.0.0", | |
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-… | |
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" | |
+ }, | |
+ "basic-auth": { | |
+ "version": "1.1.0", | |
+ "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-1.1.0.tg… | |
+ "integrity": "sha1-RSIe5Cn37h5QNb4/UVM/HN/SmIQ=" | |
+ }, | |
+ "body-parser": { | |
+ "version": "1.17.2", | |
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.17.2… | |
+ "integrity": "sha1-+IkqvI+eYn1Crtr7yma/WrmRBO4=", | |
+ "dependencies": { | |
+ "debug": { | |
+ "version": "2.6.7", | |
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz", | |
+ "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=" | |
+ } | |
+ } | |
+ }, | |
+ "brace-expansion": { | |
+ "version": "1.1.8", | |
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansio… | |
+ "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=" | |
+ }, | |
+ "bson": { | |
+ "version": "1.0.4", | |
+ "resolved": "https://registry.npmjs.org/bson/-/bson-1.0.4.tgz", | |
+ "integrity": "sha1-k8ENOeqltYQVy8QFLz5T5WKwtyw=" | |
+ }, | |
+ "buffer-shims": { | |
+ "version": "1.0.0", | |
+ "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.… | |
+ "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=" | |
+ }, | |
+ "bytes": { | |
+ "version": "2.4.0", | |
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz", | |
+ "integrity": "sha1-fZcZb51br39pNeJZhVSe3SpsIzk=" | |
+ }, | |
+ "concat-map": { | |
+ "version": "0.0.1", | |
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tg… | |
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" | |
+ }, | |
+ "content-disposition": { | |
+ "version": "0.5.2", | |
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-di… | |
+ "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" | |
+ }, | |
+ "content-type": { | |
+ "version": "1.0.2", | |
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.… | |
+ "integrity": "sha1-t9ETrueo3Se9IRM8TcJSnfFyHu0=" | |
+ }, | |
+ "cookie": { | |
+ "version": "0.3.1", | |
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", | |
+ "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" | |
+ }, | |
+ "cookie-parser": { | |
+ "version": "1.4.3", | |
+ "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.… | |
+ "integrity": "sha1-D+MfoZ0AC5X0qt8fU/3CuKIDuqU=" | |
+ }, | |
+ "cookie-signature": { | |
+ "version": "1.0.6", | |
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signat… | |
+ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" | |
+ }, | |
+ "core-util-is": { | |
+ "version": "1.0.2", | |
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.… | |
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" | |
+ }, | |
+ "debug": { | |
+ "version": "2.6.8", | |
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", | |
+ "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=" | |
+ }, | |
+ "depd": { | |
+ "version": "1.1.0", | |
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.0.tgz", | |
+ "integrity": "sha1-4b2Cxqq2ztlluXuIsX7T5SjKGMM=" | |
+ }, | |
+ "destroy": { | |
+ "version": "1.0.4", | |
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", | |
+ "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" | |
+ }, | |
+ "ee-first": { | |
+ "version": "1.1.1", | |
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", | |
+ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" | |
+ }, | |
+ "encodeurl": { | |
+ "version": "1.0.1", | |
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", | |
+ "integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA=" | |
+ }, | |
+ "es6-promise": { | |
+ "version": "3.2.1", | |
+ "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.2.1.… | |
+ "integrity": "sha1-7FYjOGgDKQkgcXDDlEjiREndH8Q=" | |
+ }, | |
+ "escape-html": { | |
+ "version": "1.0.3", | |
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.… | |
+ "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" | |
+ }, | |
+ "etag": { | |
+ "version": "1.8.0", | |
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.0.tgz", | |
+ "integrity": "sha1-b2Ma7zNtbEY2K1F2QETOIWvjwFE=" | |
+ }, | |
+ "express": { | |
+ "version": "4.15.3", | |
+ "resolved": "https://registry.npmjs.org/express/-/express-4.15.3.tgz", | |
+ "integrity": "sha1-urZdDwOqgMNYQIly/HAPkWlEtmI=", | |
+ "dependencies": { | |
+ "debug": { | |
+ "version": "2.6.7", | |
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz", | |
+ "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=" | |
+ } | |
+ } | |
+ }, | |
+ "finalhandler": { | |
+ "version": "1.0.3", | |
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.… | |
+ "integrity": "sha1-70fneVDpmXgOhgIqVg4yF+DQzIk=", | |
+ "dependencies": { | |
+ "debug": { | |
+ "version": "2.6.7", | |
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz", | |
+ "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=" | |
+ } | |
+ } | |
+ }, | |
+ "foreachasync": { | |
+ "version": "3.0.0", | |
+ "resolved": "https://registry.npmjs.org/foreachasync/-/foreachasync-3.0.… | |
+ "integrity": "sha1-VQKYfchxS+M5IJfzLgBxyd7gfPY=" | |
+ }, | |
+ "forwarded": { | |
+ "version": "0.1.0", | |
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.0.tgz", | |
+ "integrity": "sha1-Ge+YdMSuHCl7zweP3mOgm2aoQ2M=" | |
+ }, | |
+ "fresh": { | |
+ "version": "0.5.0", | |
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.0.tgz", | |
+ "integrity": "sha1-9HTKXmqSRtb9jglTz6m5yAWvp44=" | |
+ }, | |
+ "http-errors": { | |
+ "version": "1.6.1", | |
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.1.… | |
+ "integrity": "sha1-X4uO2YrKVFZWv1cplzh/kEpyIlc=" | |
+ }, | |
+ "iconv-lite": { | |
+ "version": "0.4.15", | |
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.t… | |
+ "integrity": "sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es=" | |
+ }, | |
+ "inherits": { | |
+ "version": "2.0.3", | |
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", | |
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" | |
+ }, | |
+ "ipaddr.js": { | |
+ "version": "1.3.0", | |
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.3.0.tgz", | |
+ "integrity": "sha1-HgOlL9rYOou7KyXL9JmLTP/NPew=" | |
+ }, | |
+ "isarray": { | |
+ "version": "1.0.0", | |
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", | |
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" | |
+ }, | |
+ "locutus": { | |
+ "version": "2.0.9", | |
+ "resolved": "https://registry.npmjs.org/locutus/-/locutus-2.0.9.tgz", | |
+ "integrity": "sha1-4mWvHoX9GRc+dDhjc4iFYHg6Avw=" | |
+ }, | |
+ "media-typer": { | |
+ "version": "0.3.0", | |
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.… | |
+ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" | |
+ }, | |
+ "merge-descriptors": { | |
+ "version": "1.0.1", | |
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descri… | |
+ "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" | |
+ }, | |
+ "methods": { | |
+ "version": "1.1.2", | |
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", | |
+ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" | |
+ }, | |
+ "mime": { | |
+ "version": "1.3.4", | |
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", | |
+ "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM=" | |
+ }, | |
+ "mime-db": { | |
+ "version": "1.27.0", | |
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz", | |
+ "integrity": "sha1-gg9XIpa70g7CXtVeW13oaeVDbrE=" | |
+ }, | |
+ "mime-types": { | |
+ "version": "2.1.15", | |
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.t… | |
+ "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=" | |
+ }, | |
+ "minimatch": { | |
+ "version": "3.0.4", | |
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", | |
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yD… | |
+ }, | |
+ "mongodb": { | |
+ "version": "2.2.29", | |
+ "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-2.2.29.tgz", | |
+ "integrity": "sha512-MrQvIsN6zN80I4hdFo8w46w51cIqD2FJBGsUfApX9GmjXA1aCcl… | |
+ }, | |
+ "mongodb-core": { | |
+ "version": "2.1.13", | |
+ "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-2.1.… | |
+ "integrity": "sha512-mbcvqLLZwVcpTrsfBDY3hRNk2SDNJWOvKKxFJSc0pnUBhYojymB… | |
+ }, | |
+ "monk": { | |
+ "version": "6.0.1", | |
+ "resolved": "https://registry.npmjs.org/monk/-/monk-6.0.1.tgz", | |
+ "integrity": "sha512-R3fD134A/Y5kx2TPs3knFJxLc8b5kTs4Cqo3N3P/dsZjx5JMJpL… | |
+ }, | |
+ "monk-middleware-cast-ids": { | |
+ "version": "0.2.1", | |
+ "resolved": "https://registry.npmjs.org/monk-middleware-cast-ids/-/monk-… | |
+ "integrity": "sha1-QMQOWmyzPM7cKJIglDJ17ohhxSk=" | |
+ }, | |
+ "monk-middleware-fields": { | |
+ "version": "0.2.0", | |
+ "resolved": "https://registry.npmjs.org/monk-middleware-fields/-/monk-mi… | |
+ "integrity": "sha1-/2N6819ZSIecyyvhWpE2CRG+psE=" | |
+ }, | |
+ "monk-middleware-handle-callback": { | |
+ "version": "0.2.0", | |
+ "resolved": "https://registry.npmjs.org/monk-middleware-handle-callback/… | |
+ "integrity": "sha1-+r+TduzfAMnjbImwWuoIEri4Ohw=" | |
+ }, | |
+ "monk-middleware-options": { | |
+ "version": "0.2.1", | |
+ "resolved": "https://registry.npmjs.org/monk-middleware-options/-/monk-m… | |
+ "integrity": "sha1-WNrhxRjUZjbr3/UG+t/Hc7tEKIY=" | |
+ }, | |
+ "monk-middleware-query": { | |
+ "version": "0.2.0", | |
+ "resolved": "https://registry.npmjs.org/monk-middleware-query/-/monk-mid… | |
+ "integrity": "sha1-qSbGd9SlYgxiFRsKVtDAwVFnWHQ=" | |
+ }, | |
+ "monk-middleware-wait-for-connection": { | |
+ "version": "0.2.0", | |
+ "resolved": "https://registry.npmjs.org/monk-middleware-wait-for-connect… | |
+ "integrity": "sha1-MSlY0w5Yi1fQl1TdfJe0hDMWg1o=" | |
+ }, | |
+ "morgan": { | |
+ "version": "1.8.2", | |
+ "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.8.2.tgz", | |
+ "integrity": "sha1-eErHc05KRTqcbm6GgKkyknXItoc=" | |
+ }, | |
+ "ms": { | |
+ "version": "2.0.0", | |
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", | |
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" | |
+ }, | |
+ "negotiator": { | |
+ "version": "0.6.1", | |
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tg… | |
+ "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" | |
+ }, | |
+ "object-assign": { | |
+ "version": "4.1.1", | |
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.… | |
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" | |
+ }, | |
+ "on-finished": { | |
+ "version": "2.3.0", | |
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.… | |
+ "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=" | |
+ }, | |
+ "on-headers": { | |
+ "version": "1.0.1", | |
+ "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tg… | |
+ "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=" | |
+ }, | |
+ "parseurl": { | |
+ "version": "1.3.1", | |
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.1.tgz", | |
+ "integrity": "sha1-yKuMkiO6NIiKpkopeyiFO+wY2lY=" | |
+ }, | |
+ "path-to-regexp": { | |
+ "version": "0.1.7", | |
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-… | |
+ "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" | |
+ }, | |
+ "process-nextick-args": { | |
+ "version": "1.0.7", | |
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-n… | |
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" | |
+ }, | |
+ "proxy-addr": { | |
+ "version": "1.1.4", | |
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.1.4.tg… | |
+ "integrity": "sha1-J+VF9pYKRKYn2bREZ+NcG2tM4vM=" | |
+ }, | |
+ "qs": { | |
+ "version": "6.4.0", | |
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", | |
+ "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=" | |
+ }, | |
+ "range-parser": { | |
+ "version": "1.2.0", | |
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.… | |
+ "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" | |
+ }, | |
+ "raw-body": { | |
+ "version": "2.2.0", | |
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.2.0.tgz", | |
+ "integrity": "sha1-mUl2z2pQlqQRYoQEkvC9xdbn+5Y=" | |
+ }, | |
+ "readable-stream": { | |
+ "version": "2.2.7", | |
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-strea… | |
+ "integrity": "sha1-BwV6y+JGeyIELTb5jFrVBwVOlbE=" | |
+ }, | |
+ "require_optional": { | |
+ "version": "1.0.1", | |
+ "resolved": "https://registry.npmjs.org/require_optional/-/require_optio… | |
+ "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUk… | |
+ }, | |
+ "resolve-from": { | |
+ "version": "2.0.0", | |
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.… | |
+ "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" | |
+ }, | |
+ "safe-buffer": { | |
+ "version": "5.0.1", | |
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.… | |
+ "integrity": "sha1-0mPKVGls2KMGtcplUekt5XkY++c=" | |
+ }, | |
+ "semver": { | |
+ "version": "5.3.0", | |
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", | |
+ "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=" | |
+ }, | |
+ "send": { | |
+ "version": "0.15.3", | |
+ "resolved": "https://registry.npmjs.org/send/-/send-0.15.3.tgz", | |
+ "integrity": "sha1-UBP5+ZAj31DRvZiSwZ4979HVMwk=", | |
+ "dependencies": { | |
+ "debug": { | |
+ "version": "2.6.7", | |
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz", | |
+ "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=" | |
+ } | |
+ } | |
+ }, | |
+ "serve-favicon": { | |
+ "version": "2.4.3", | |
+ "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.… | |
+ "integrity": "sha1-WYaxewUCZCtkHCH4GLGszjICXSM=" | |
+ }, | |
+ "serve-static": { | |
+ "version": "1.12.3", | |
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.12… | |
+ "integrity": "sha1-n0uhni8wMMVH+K+ZEHg47DjVseI=" | |
+ }, | |
+ "setprototypeof": { | |
+ "version": "1.0.3", | |
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-… | |
+ "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" | |
+ }, | |
+ "statuses": { | |
+ "version": "1.3.1", | |
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", | |
+ "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" | |
+ }, | |
+ "string_decoder": { | |
+ "version": "1.0.3", | |
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-… | |
+ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6… | |
+ "dependencies": { | |
+ "safe-buffer": { | |
+ "version": "5.1.1", | |
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.… | |
+ "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIww… | |
+ } | |
+ } | |
+ }, | |
+ "twig": { | |
+ "version": "0.10.3", | |
+ "resolved": "https://registry.npmjs.org/twig/-/twig-0.10.3.tgz", | |
+ "integrity": "sha1-Z2BOCOGSDr8vr4CpAeJWGJyKPGc=" | |
+ }, | |
+ "type-is": { | |
+ "version": "1.6.15", | |
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", | |
+ "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=" | |
+ }, | |
+ "unpipe": { | |
+ "version": "1.0.0", | |
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", | |
+ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" | |
+ }, | |
+ "util-deprecate": { | |
+ "version": "1.0.2", | |
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-… | |
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" | |
+ }, | |
+ "utils-merge": { | |
+ "version": "1.0.0", | |
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.… | |
+ "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg=" | |
+ }, | |
+ "vary": { | |
+ "version": "1.1.1", | |
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.1.tgz", | |
+ "integrity": "sha1-Z1Neu2lMHVIldFeYRmUyP1h+jTc=" | |
+ }, | |
+ "walk": { | |
+ "version": "2.3.9", | |
+ "resolved": "https://registry.npmjs.org/walk/-/walk-2.3.9.tgz", | |
+ "integrity": "sha1-MbTbZnjyrgHDnqn7hyWpAx5Vins=" | |
+ } | |
+ } | |
+} | |
diff --git a/package.json b/package.json | |
@@ -0,0 +1,20 @@ | |
+{ | |
+ "name": "seedlinux", | |
+ "version": "0.0.1", | |
+ "description": "Linux torrent information", | |
+ "private": true, | |
+ "scripts": { | |
+ "start": "node ./bin/www" | |
+ }, | |
+ "dependencies": { | |
+ "body-parser": "~1.17.1", | |
+ "cookie-parser": "~1.4.3", | |
+ "debug": "~2.6.3", | |
+ "express": "~4.15.2", | |
+ "mongodb": "^2.2.29", | |
+ "monk": "^6.0.1", | |
+ "morgan": "~1.8.1", | |
+ "serve-favicon": "~2.4.2", | |
+ "twig": "~0.10.3" | |
+ } | |
+} | |
diff --git a/public/images/logo.png b/public/images/logo.png | |
Binary files differ. | |
diff --git a/public/stylesheets/style.css b/public/stylesheets/style.css | |
@@ -0,0 +1,109 @@ | |
+body { | |
+ font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Ar… | |
+} | |
+.logo { | |
+ | |
+} | |
+.logo img { | |
+ width:120px; | |
+} | |
+.container { | |
+ padding-top:50px; | |
+ max-width: 968px; | |
+} | |
+.section { | |
+ margin-top:40px; | |
+ border: 1px solid #efefef; | |
+ border-radius: 5px; | |
+} | |
+.status-header { | |
+ padding: 40px 40px 80px 40px; | |
+} | |
+.status-header .indicator { | |
+ display: inline-block; | |
+ width: 15px; | |
+ height: 15px; | |
+ border-radius: 100%; | |
+ margin-right: 20px; | |
+ background: #17d766; | |
+ background: -moz-linear-gradient(top, #17d766 0%, #17d766 50%, #16cf62 51%,… | |
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#1… | |
+ background: -webkit-linear-gradient(top, #17d766 0%,#17d766 50%,#16cf62 51%… | |
+ background: -ms-linear-gradient(top, #17d766 0%,#17d766 50%,#16cf62 51%,#16… | |
+ background: linear-gradient(to bottom, #17d766 0%,#17d766 50%,#16cf62 51%,#… | |
+ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#17d766',… | |
+ opacity: 0.8; | |
+ filter:alpha(opacity=80); | |
+} | |
+.status-header .title { | |
+ display: inline-block; | |
+} | |
+.status-header .subtitle { | |
+ display: block; | |
+ margin-left: 35px; | |
+} | |
+.status-uptime { | |
+ border-top: 1px solid #efefef; | |
+ border-bottom: 1px solid #efefef; | |
+ padding: 15px 95px 0 95px; | |
+ margin: 0 -20px -20px -20px; | |
+} | |
+.status-uptime .title { | |
+ display: inline-block; | |
+ font-size: 14px; | |
+ color: #bbb; | |
+} | |
+.status-uptime .uptime { | |
+ display: inline-block; | |
+ margin-left: 60px; | |
+ font-size: 14px; | |
+ color: #bbb; | |
+} | |
+.status-list { | |
+ padding:95px; | |
+} | |
+.status-list .label { | |
+ font-size: 16px; | |
+ font-weight: bold; | |
+} | |
+.status-list .amount { | |
+ font-size: 16px; | |
+ font-weight: bold; | |
+ color: #bbb; | |
+} | |
+.status-tweets { | |
+} | |
+.status-tweets .twitter { | |
+ padding: 0 15px 15px 15px; | |
+ margin: -20px -20px 50px -20px; | |
+ border-bottom: 1px solid #efefef; | |
+} | |
+.status-tweets .icon { | |
+ display: inline-block; | |
+ padding-left:20px; | |
+ color: #11bff2; | |
+} | |
+.status-tweets .username { | |
+ display: inline-block; | |
+ padding-left: 30px; | |
+} | |
+.status-tweets .updates { | |
+ padding: 0 40px 40px 40px; | |
+} | |
+.status-tweets .update { | |
+ padding-top: 40px; | |
+} | |
+.status-tweets .update .timestamp { | |
+ font-weight: bold; | |
+ color: #bbb; | |
+} | |
+.status-tweets .updates .event { | |
+ font-size: 16px; | |
+ line-height: 1.6; | |
+} | |
+.status-footer { | |
+ padding-left: 20px; | |
+} | |
+.status-footer a { | |
+ padding: 0 10px; | |
+} | |
diff --git a/routes/index.js b/routes/index.js | |
@@ -0,0 +1,9 @@ | |
+var express = require('express'); | |
+var router = express.Router(); | |
+ | |
+/* GET home page. */ | |
+router.get('/', function(req, res, next) { | |
+ res.render('index', { title: 'Express' }); | |
+}); | |
+ | |
+module.exports = router; | |
diff --git a/routes/torrents.js b/routes/torrents.js | |
@@ -0,0 +1,9 @@ | |
+var express = require('express'); | |
+var router = express.Router(); | |
+ | |
+/* GET torrents listing. */ | |
+router.get('/', function(req, res, next) { | |
+ res.send('List of all torrents'); | |
+}); | |
+ | |
+module.exports = router; | |
diff --git a/views/error.twig b/views/error.twig | |
@@ -0,0 +1,7 @@ | |
+{% extends 'layout.twig' %} | |
+ | |
+{% block body %} | |
+ <h1>{{message}}</h1> | |
+ <h2>{{error.status}}</h2> | |
+ <pre>{{error.stack}}</pre> | |
+{% endblock %} | |
diff --git a/views/index.twig b/views/index.twig | |
@@ -0,0 +1,6 @@ | |
+{% extends 'layout.twig' %} | |
+ | |
+{% block body %} | |
+ <h1>{{title}}</h1> | |
+ <p>Welcome to {{title}}</p> | |
+{% endblock %} | |
diff --git a/views/layout.twig b/views/layout.twig | |
@@ -0,0 +1,53 @@ | |
+<!DOCTYPE html> | |
+<html> | |
+ | |
+<head> | |
+ <meta charset="utf-8"> | |
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"> | |
+ <meta name="viewport" content="width=device-width, initial-scale=1"> | |
+ <title>{{ title }}</title> | |
+ <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/aj… | |
+ <link rel='stylesheet' href='/stylesheets/style.css' /> | |
+</head> | |
+ | |
+<body> | |
+ <div class="container"> | |
+ | |
+ <div class="logo"> | |
+ <a href="/"> | |
+ <img src="/images/logo.png"> | |
+ </a> | |
+ </div> | |
+ | |
+ <div class="section"> | |
+ <table class="table"> | |
+ <thead> | |
+ <tr> | |
+ <th><abbr title="Position">Pos</abbr></th> | |
+ <th>Name</th> | |
+ <th><abbr title="Seeders">S</abbr></th> | |
+ <th><abbr title="Leachers">L</abbr></th> | |
+ <th>Description</th> | |
+ </tr> | |
+ </thead> | |
+ <tbody> | |
+ <tr> | |
+ <th>1</th> | |
+ <td>Ubuntu 17.04 <strong>(C)</strong></td> | |
+ <td>190</td> | |
+ <td>23</td> | |
+ <td>Qualification for the yada yda ydayydaydaydya</td> | |
+ </tr> | |
+ <tr> | |
+ <th>2</th> | |
+ <td>Void Linux 22062017</td> | |
+ <td>38</td> | |
+ <td>20</td> | |
+ <td>Qualification for the yada yda ydayydaydaydya</td> | |
+ </tr> | |
+ </tbody> | |
+ </table> | |
+ </div> | |
+ </div> | |
+</body> | |
+</html> |