Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const express = require('express')
- const cors = require('cors')
- const path = require('path')
- const fs = require('fs')
- const clf_date = require('clf-date')
- const date_format = require('dateformat')
- const moment = require('moment-timezone')
- const morgan = require('morgan')
- const qwk = require('./functions.js')
- const app = express()
- // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- var settings = { port: 1010, next_id: 0 }
- var shortcuts = []
- __dirname = path.join(__dirname, '..')
- var currentLogPath = path.join(__dirname, 'logs', `${date_format(new Date(), "yyyy-mm-dd HH.MM.ss")}.log`)
- var accessLogStream = fs.createWriteStream(currentLogPath, { flags: 'a' })
- morgan.token('date', (req, res) => {
- return clf_date(new Date())
- })
- app.use(morgan(`[:date] :method :url :status :res[content-length] - :response-time ms`, { stream: accessLogStream }))
- app.use(morgan(`[:date] :method :url :status :res[content-length] - :response-time ms`))
- app.use(cors())
- app.use('/', express.static(path.join(__dirname, 'public')))
- // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- function normalizeUrl(url) {
- if (url.includes('https://')) {
- return url
- } else if (url.includes('http://')) {
- return url
- } else {
- return `https://${url}`
- }
- }
- function saveState() {
- fs.writeFileSync(path.join(__dirname, 'settings', 'settings.json'), JSON.stringify(settings, null, 2))
- fs.writeFileSync(path.join(__dirname, 'data', 'shortcuts.json'), JSON.stringify(shortcuts, null, 2))
- }
- function startup() {
- try {
- qwk.log(`Loading settings...`, 'Startup')
- settings = JSON.parse(fs.readFileSync(path.join(__dirname, 'settings', 'settings.json'), 'utf8'))
- } catch (e) {
- qwk.log(`Loading error, creating new settings file.`, 'Startup')
- fs.writeFileSync(path.join(__dirname, 'settings', 'settings.json'), JSON.stringify(settings, null, 2))
- }
- try {
- qwk.log(`Loading shortucts...`, 'Startup')
- shortcuts = JSON.parse(fs.readFileSync(path.join(__dirname, 'data', 'shortcuts.json'), 'utf8'))
- qwk.log(`Loaded ${shortcuts.length} shortucts`, 'Startup')
- } catch (e) {
- qwk.log(`Loading error, creating new shortucts file.`, 'Startup')
- fs.writeFileSync(path.join(__dirname, 'data', 'shortcuts.json'), JSON.stringify(shortcuts, null, 2))
- }
- }
- // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- // /api/create-shortcut/:
- // params: url - string
- // request example: /api/create-shortcut/?url=google.com
- app.get('/api/create-shortcut/', function(request, response) {
- let url = request.query.url
- if (url == undefined) {
- response.status(400).send(`Error: param 'url' not found in request`)
- return
- }
- obj = { id: settings.next_id++, url: normalizeUrl(url) }
- for (var i = 0; i < shortcuts.length; i++) {
- if (shortcuts[i].url == obj.url) {
- response.send(JSON.stringify(shortcuts[i], null, 2))
- return
- }
- }
- shortcuts.push(obj)
- response.send(JSON.stringify(obj, null, 2))
- saveState()
- })
- // /:id: (redirect by id)
- // params: id - integer
- // request example: /$integer
- app.get('/:id/', function(request, response) {
- let id = request.params.id
- if (id == undefined) {
- response.status(400).send(`Error: param 'id' not found in request<br>Use sh.url/id`)
- return
- }
- for (var i = 0; i < shortcuts.length; i++) {
- if (shortcuts[i].id == id) {
- response.redirect(shortcuts[i].url)
- return
- }
- }
- response.status(404).sendFile(`${__dirname}/public/missing.html`)
- })
- // /api/redirect/: (redirect by request)
- // params: url - string
- // request example: /api/redirect/?url=google.com
- app.get('/api/redirect/', function(request, response) {
- let url = request.query.url
- if (url == undefined) {
- response.status(400).send(`Error: param 'url' not found in request`)
- return
- }
- response.redirect(normalizeUrl(url))
- })
- // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- startup()
- app.listen(settings.port)
- qwk.log(`Server started on ${settings.port}`, 'Startup')
Add Comment
Please, Sign In to add comment