├── .eslintignore ├── Procfile ├── public ├── css.bat ├── css │ └── downloader.scss └── js │ └── downloader.js ├── apps ├── apps.js └── downloader.js ├── routes ├── v1.js └── v1 │ └── downloader.js ├── views └── downloader │ └── downloader.pug ├── .gitignore ├── utils └── logger.js ├── .eslintrc.json ├── package.json └── index.js /.eslintignore: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Procfile: -------------------------------------------------------------------------------- 1 | web: node index.js 2 | -------------------------------------------------------------------------------- /public/css.bat: -------------------------------------------------------------------------------- 1 | cd css 2 | sassw css -------------------------------------------------------------------------------- /public/css/downloader.scss: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: Sky 3 | * @Date: 2018-10-19 13:14:43 4 | * @Last Modified by: Sky 5 | * @Last Modified time: 2019-11-05 21:48:18 6 | */ 7 | 8 | -------------------------------------------------------------------------------- /apps/apps.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: msumsc 3 | * @Date: 2018-09-21 12:55:59 4 | * @Last Modified by: Sky 5 | * @Last Modified time: 2019-11-05 21:28:18 6 | */ 7 | 8 | module.exports = function (router) { 9 | require('./downloader')(router) 10 | } 11 | -------------------------------------------------------------------------------- /routes/v1.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: msumsc 3 | * @Date: 2018-09-17 20:09:48 4 | * @Last Modified by: Sky 5 | * @Last Modified time: 2019-11-05 21:30:08 6 | */ 7 | 8 | module.exports = function (router) { 9 | router.route('/').get(function (req, res) { 10 | res.send('Node.js API Version 1') 11 | }) 12 | 13 | require('./v1/downloader')(router) 14 | } 15 | -------------------------------------------------------------------------------- /views/downloader/downloader.pug: -------------------------------------------------------------------------------- 1 | doctype html 2 | html(lang="en") 3 | head 4 | meta(charset="utf-8") 5 | meta(name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no") 6 | link(rel="stylesheet" href="/css/downloader.css") 7 | title Reddit Saved 8 | script. 9 | window.initData=!{initDATA} 10 | body 11 | input#url(type="url") 12 | button#submit GET 13 | div#preview 14 | script(src="/js/downloader.js") 15 | -------------------------------------------------------------------------------- /apps/downloader.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author = Sky 3 | * @Date = 2018-02-13 10 = 28 = 07 4 | * @Last Modified by = msumsc 5 | * @Last Modified time = 2018-05-29 21 = 54 = 40 6 | */ 7 | const _this = 'APP_DOWNLOADER' 8 | const LOG = require('../utils/logger') 9 | 10 | module.exports = function (router) { 11 | router.route('/downloader').get(function (req, res) { 12 | res.render('downloader/downloader', { 13 | initData: JSON.stringify({ 14 | baseUrl: '/api/v1/downloader' 15 | }) 16 | }) 17 | }) 18 | } 19 | 20 | LOG.info('LOADED => ' + _this) 21 | -------------------------------------------------------------------------------- /routes/v1/downloader.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: msumsc 3 | * @Date: 2018-04-11 20:55:16 4 | * @Last Modified by: Sky 5 | * @Last Modified time: 2019-11-05 21:55:33 6 | */ 7 | 8 | const _this = 'Reminder' 9 | const request = require('request') 10 | 11 | function get (url) { 12 | return new Promise((resolve, reject) => { 13 | request(url, function (error, response, body) { 14 | if (error) { 15 | reject(error) 16 | return 17 | } 18 | resolve(body) 19 | }) 20 | }) 21 | } 22 | 23 | module.exports = function (router) { 24 | router.route('/get').get(function (req, res) { 25 | get(req.query.url).then((response) => { 26 | res.send({ response: response }) 27 | }) 28 | }) 29 | } 30 | 31 | console.log(_this + ':reminder Loaded!') 32 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.css 2 | *.map 3 | 4 | # Compiled source # 5 | ################### 6 | *.com 7 | *.class 8 | *.dll 9 | *.exe 10 | *.o 11 | *.so 12 | 13 | # Packages # 14 | ############ 15 | # it's better to unpack these files and commit the raw source 16 | # git has its own built in compression methods 17 | *.7z 18 | *.dmg 19 | *.gz 20 | *.iso 21 | *.jar 22 | *.rar 23 | *.tar 24 | *.zip 25 | 26 | # Logs and databases # 27 | ###################### 28 | *.log 29 | *.sql 30 | *.sqlite 31 | 32 | # OS generated files # 33 | ###################### 34 | .DS_Store 35 | .DS_Store? 36 | ._* 37 | .Spotlight-V100 38 | .Trashes 39 | ehthumbs.db 40 | node_modules 41 | sslcerts 42 | Thumbs.db 43 | package-lock.json 44 | logs.txt 45 | .auto-commit 46 | logs 47 | .sass-cache 48 | yarn.lock 49 | yarn-error.log -------------------------------------------------------------------------------- /utils/logger.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: msumsc 3 | * @Date: 2018-08-08 20:12:14 4 | * @Last Modified by: Sky 5 | * @Last Modified time: 2019-10-07 22:01:38 6 | */ 7 | 8 | var winston = require('winston') 9 | 10 | var format = winston.format.printf(info => { 11 | return `${info.timestamp} [${info.label}] ${info.level}: ${info.message}` 12 | }) 13 | 14 | var logger = winston.createLogger({ 15 | exitOnError: false, 16 | outputCapture: 'std', 17 | format: winston.format.combine( 18 | winston.format.colorize(), 19 | winston.format.json(), 20 | winston.format.label({ label: 'SKY' }), 21 | winston.format.timestamp(), 22 | format 23 | ), 24 | transports: [ 25 | new winston.transports.Console({ 26 | level: 'silly' 27 | }), 28 | new winston.transports.File({ 29 | filename: 'logs/' + new Date().toJSON().replace(/:/g, '-') + '.log' 30 | }) 31 | ] 32 | }) 33 | 34 | module.exports = logger 35 | -------------------------------------------------------------------------------- /public/js/downloader.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: Sky 3 | * @Date: 2018-10-04 20:23:29 4 | * @Last Modified by: Sky 5 | * @Last Modified time: 2019-11-05 22:05:24 6 | */ 7 | 8 | function request (type, url, data = null) { 9 | return new Promise((resolve, reject) => { 10 | var xhr = new XMLHttpRequest() 11 | xhr.open(type, url, true) 12 | xhr.setRequestHeader('content-type', 'application/json; charset=utf-8') 13 | xhr.onload = function () { 14 | if (xhr.readyState === 4) { 15 | if (xhr.status === 200) { 16 | resolve(JSON.parse(xhr.responseText)) 17 | } else { 18 | reject(xhr) 19 | } 20 | } 21 | } 22 | data === null ? xhr.send() : xhr.send(JSON.stringify(data)) 23 | }) 24 | } 25 | 26 | var button = document.getElementById('submit') 27 | button.onclick = function () { 28 | var url = document.querySelector('input').value 29 | 30 | request('GET', '/api/get?url='+encodeURIComponent(url)).then((data) => { 31 | document.querySelector('#preview').innerHTML = data.response 32 | }) 33 | } 34 | -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "browser": true, 4 | "commonjs": true, 5 | "es6": true, 6 | "node": true, 7 | "jquery": true, 8 | "greasemonkey": true 9 | }, 10 | "extends": [ 11 | "eslint:recommended" 12 | ], 13 | "plugins": [ 14 | "jquery" 15 | ], 16 | "globals": { 17 | "_$": "readonly", 18 | "Atomics": "readonly", 19 | "CKEDITOR": "readonly", 20 | "ClipboardJS": "readonly", 21 | "Download": "readonly", 22 | "Dropzone": "readonly", 23 | "initData": "writable", 24 | "ISBN": "readonly", 25 | "ISOCode": "readonly", 26 | "jStat": "readonly", 27 | "M": "readonly", 28 | "marked": "readonly", 29 | "MathJax": "readonly", 30 | "MESSAGES": "readonly", 31 | "Plotly": "readonly", 32 | "SharedArrayBuffer": "readonly", 33 | "Sky": "readonly", 34 | "Sugar": "readonly", 35 | "Swiper": "readonly", 36 | "twemoji": "readonly" 37 | }, 38 | "parserOptions": { 39 | "ecmaVersion": 2018 40 | }, 41 | "rules": { 42 | "camelcase": ["error", { 43 | "allow": ["sky[\\d_]+"], 44 | "properties": "never" 45 | }], 46 | "space-before-function-paren": ["error", { 47 | "anonymous": "always", 48 | "named": "never", 49 | "asyncArrow": "always" 50 | }] 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "node-api", 3 | "version": "1.0.0", 4 | "description": "Localhost Node API-Server", 5 | "main": "server.js", 6 | "engines": { 7 | "node": "12.x" 8 | }, 9 | "dependencies": { 10 | "body-parser": "^1.19.0", 11 | "compression": "^1.7.4", 12 | "cookie-parser": "^1.4.4", 13 | "cookie-session": "^2.0.0-beta.3", 14 | "express": "^4.17.1", 15 | "express-session": "^1.16.2", 16 | "filedownloader": "^1.2.7", 17 | "helmet": "^3.21.1", 18 | "morgan": "^1.9.1", 19 | "pug": "^2.0.4", 20 | "request": "^2.88.0", 21 | "response-time": "^2.3.2", 22 | "winston": "^3.2.1" 23 | }, 24 | "devDependencies": { 25 | "eslint": "^6.5.1", 26 | "eslint-config-google": "^0.14.0", 27 | "eslint-plugin-jquery": "^1.5.1", 28 | "eslint-plugin-react": "^7.16.0" 29 | }, 30 | "scripts": { 31 | "test": "echo \"Error: no test specified\" && exit 1", 32 | "start": "node index.js", 33 | "check": "node_modules/.bin/eslint .", 34 | "check-fix": "node_modules/.bin/eslint --fix .", 35 | "prettier": "prettier --check **/*.js", 36 | "prettier-fix": "prettier --check --write **/*.js" 37 | }, 38 | "prettier": { 39 | "trailingComma": "none", 40 | "tabWidth": 2, 41 | "semi": false, 42 | "singleQuote": true 43 | }, 44 | "repository": { 45 | "type": "git", 46 | "url": "git+https://github.com/skyme5/proxy-server.git" 47 | }, 48 | "keywords": [ 49 | "Node", 50 | "API", 51 | "Server" 52 | ], 53 | "author": "Aakash Gajjar", 54 | "license": "ISC", 55 | "bugs": { 56 | "url": "https://github.com/skyme5/proxy-server/issues" 57 | }, 58 | "homepage": "https://github.com/skyme5/proxy-server#readme" 59 | } 60 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: Sky 3 | * @Date: 2018-02-13 10:28:34 4 | * @Last Modified by: Sky 5 | * @Last Modified time: 2019-11-05 21:44:49 6 | */ 7 | 8 | var http = require('http') 9 | 10 | var express = require('express') 11 | var bodyParser = require('body-parser') 12 | var cookieParser = require('cookie-parser') 13 | var cookieSession = require('cookie-session') 14 | var responseTime = require('response-time') 15 | var morgan = require('morgan') 16 | var LOG = require('./utils/logger') 17 | 18 | var app = express() 19 | 20 | app.use( 21 | morgan( 22 | function (tokens, req, res) { 23 | return `${new Date().toJSON()} [SKY] ${tokens.method( 24 | req, 25 | res 26 | )}: ${tokens.url(req, res)}` 27 | }, { immediate: true } 28 | ) 29 | ) 30 | app.use(cookieParser()) 31 | app.use(responseTime()) 32 | 33 | app.use( 34 | cookieSession({ 35 | name: 'session', 36 | secret: 'skyme5 is my hero', 37 | httpOnly: true, 38 | maxAge: 30 * 60 * 1000, 39 | secure: true, 40 | overwrite: false 41 | }) 42 | ) 43 | 44 | app.use( 45 | bodyParser.json({ 46 | limit: 5242880000 47 | }) 48 | ) 49 | 50 | app.use( 51 | bodyParser.urlencoded({ 52 | limit: '100mb', 53 | extended: true, 54 | parameterLimit: 1024102420 55 | }) 56 | ) 57 | 58 | app.use(express.static('public')) 59 | 60 | app.set('title', 'SkyME5 API') 61 | app.set('strict routing', true) 62 | app.set('x-powered-by', false) 63 | app.set('view engine', 'pug') 64 | app.set('trust proxy', 1) 65 | 66 | var server = http.createServer(app) 67 | const port = process.env.PORT || 8080 68 | server.listen(port) 69 | 70 | var apps = express.Router() 71 | var router = express.Router() 72 | 73 | app.use('/apps', apps) 74 | app.use('/api', router) 75 | 76 | require('./routes/v1.js')(router) 77 | require('./apps/apps.js')(apps) 78 | 79 | LOG.info(`LOADED => REST API @http:/localhost:${port}/`) 80 | --------------------------------------------------------------------------------