From dd6f16379346cfc8ab01507356139251dfd6e2e6 Mon Sep 17 00:00:00 2001 From: Fedor Katurov Date: Fri, 13 Dec 2019 13:23:54 +0700 Subject: [PATCH] removed backend part --- backend/app.js | 59 ------- backend/bin/www | 34 ---- backend/config/db.js | 18 --- backend/config/strings.js | 11 -- backend/models/Route.js | 23 --- backend/models/User.js | 27 ---- backend/models/index.js | 8 - backend/public/stylesheets/social/vk.css | 1 - backend/public/stylesheets/social/vk.less | 47 ------ backend/public/stylesheets/style.css | 1 - backend/public/stylesheets/style.less | 8 - backend/routes/auth.js | 16 -- backend/routes/auth/check.js | 24 --- backend/routes/auth/guest.js | 52 ------- backend/routes/auth/iframe/vk.js | 22 --- backend/routes/auth/list.js | 9 -- backend/routes/auth/social/vk.js | 82 ---------- backend/routes/index.js | 9 -- backend/routes/route.js | 18 --- backend/routes/route/drop.js | 19 --- backend/routes/route/get.js | 26 ---- backend/routes/route/list.js | 96 ------------ backend/routes/route/patch.js | 24 --- backend/routes/route/post.js | 57 ------- backend/routes/route/star.js | 19 --- backend/routes/users.js | 9 -- backend/tools/import.js | 182 ---------------------- backend/tools/stickersReplacement.js | 44 ------ backend/utils/gen.js | 10 -- backend/utils/parse.js | 30 ---- backend/views/error.pug | 6 - backend/views/index.pug | 5 - backend/views/layout.pug | 7 - backend/views/social/success.pug | 17 -- backend/views/social/vk_error.pug | 13 -- package.json | 7 - 36 files changed, 1040 deletions(-) delete mode 100644 backend/app.js delete mode 100755 backend/bin/www delete mode 100644 backend/config/db.js delete mode 100644 backend/config/strings.js delete mode 100644 backend/models/Route.js delete mode 100644 backend/models/User.js delete mode 100644 backend/models/index.js delete mode 100644 backend/public/stylesheets/social/vk.css delete mode 100644 backend/public/stylesheets/social/vk.less delete mode 100644 backend/public/stylesheets/style.css delete mode 100644 backend/public/stylesheets/style.less delete mode 100644 backend/routes/auth.js delete mode 100644 backend/routes/auth/check.js delete mode 100644 backend/routes/auth/guest.js delete mode 100644 backend/routes/auth/iframe/vk.js delete mode 100644 backend/routes/auth/list.js delete mode 100644 backend/routes/auth/social/vk.js delete mode 100644 backend/routes/index.js delete mode 100644 backend/routes/route.js delete mode 100644 backend/routes/route/drop.js delete mode 100644 backend/routes/route/get.js delete mode 100644 backend/routes/route/list.js delete mode 100644 backend/routes/route/patch.js delete mode 100644 backend/routes/route/post.js delete mode 100644 backend/routes/route/star.js delete mode 100644 backend/routes/users.js delete mode 100755 backend/tools/import.js delete mode 100644 backend/tools/stickersReplacement.js delete mode 100644 backend/utils/gen.js delete mode 100644 backend/utils/parse.js delete mode 100644 backend/views/error.pug delete mode 100644 backend/views/index.pug delete mode 100644 backend/views/layout.pug delete mode 100644 backend/views/social/success.pug delete mode 100644 backend/views/social/vk_error.pug diff --git a/backend/app.js b/backend/app.js deleted file mode 100644 index b85af36..0000000 --- a/backend/app.js +++ /dev/null @@ -1,59 +0,0 @@ -/* - https://habr.com/company/ruvds/blog/321104/ - */ -const createError = require('http-errors'); -const express = require('express'); -const path = require('path'); -const cookieParser = require('cookie-parser'); -const lessMiddleware = require('less-middleware'); -const logger = require('morgan'); -const bodyParser = require('body-parser'); - -const routeRouter = require('./routes/route'); -const authRouter = require('./routes/auth'); -const db = require('./config/db'); - -const app = express(); - -// view engine setup -app.set('views', path.join(__dirname, 'views')); -app.set('view engine', 'pug'); - -app.use(logger('dev')); -app.use(express.json()); -app.use(express.urlencoded({ extended: false })); -app.use(cookieParser()); -app.use(lessMiddleware(path.join(__dirname, 'public'))); -app.use(express.static(path.join(__dirname, 'public'))); -app.use((req, res, next) => { - res.header('Access-Control-Allow-Origin', '*'); - res.header('Access-Control-Allow-Methods', 'GET, PUT, POST, DELETE, PATCH'); - res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept'); - next(); -}); - -app.use(bodyParser.json()); -app.use(express.json()); - -// app.use('/', indexRouter); -// app.use('/users', usersRouter); -app.use('/auth', authRouter); -app.use('/route', routeRouter); -// catch 404 and forward to error handler -app.use((req, res, next) => { - next(createError(404)); -}); - -// error handler -app.use((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/backend/bin/www b/backend/bin/www deleted file mode 100755 index 9bc1724..0000000 --- a/backend/bin/www +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env node -const { CONFIG } = require('../../config/backend'); - -const app = require('../app'); -const fs = require('fs'); -const http = require('http'); -const https = require('https'); - -if (CONFIG.HTTP.ENABLED) { - const httpPort = CONFIG.HTTP.PORT; - // app.set('port', httpPort); - - const httpServer = http.createServer(app); - httpServer.listen(httpPort); - - httpServer.on('error', console.log); - httpServer.on('listening', console.log); -} - -if (CONFIG.HTTPS.ENABLED) { - const sslPort = CONFIG.HTTPS.PORT; - // app.set('port', sslPort); - - const key = fs.readFileSync(CONFIG.HTTPS.PRIVATE_KEY, 'utf8'); - const cert = fs.readFileSync(CONFIG.HTTPS.CERTIFICATE, 'utf8'); - const ca = fs.readFileSync(CONFIG.HTTPS.CA, 'utf8'); - - const sslServer = https.createServer({ key, cert, ca }, app); - - sslServer.listen(sslPort); - sslServer.on('error', console.log); - sslServer.on('listening', console.log); -} - diff --git a/backend/config/db.js b/backend/config/db.js deleted file mode 100644 index ee1b5f0..0000000 --- a/backend/config/db.js +++ /dev/null @@ -1,18 +0,0 @@ -const { CONFIG } = require('../../config/backend'); - -const { - DB: { - USER, PASSWORD, HOSTNAME, PORT, DATABASE - } -} = CONFIG; - -const mongoose = require('mongoose'); -mongoose.Promise = require('bluebird'); - -mongoose.connect(`mongodb://${USER}:${PASSWORD}@${HOSTNAME}:${PORT}/${DATABASE}`, { }); -const database = mongoose.connection; - -database.on('error', (err) => { console.error(`Database Connection Error: ${err}`); process.exit(2); }); -database.on('connected', () => { console.info('Succesfully connected to MongoDB Database'); }); - -console.log(`DB: mongodb://${USER}:${PASSWORD}@${HOSTNAME}:${PORT}/${DATABASE}`); diff --git a/backend/config/strings.js b/backend/config/strings.js deleted file mode 100644 index e402ca5..0000000 --- a/backend/config/strings.js +++ /dev/null @@ -1,11 +0,0 @@ -// export const OAUTH_FAILED_TITLE = 'Ошибка авторизации'; -module.exports.STRINGS = { - OAUTH: { - ERROR_TITLE: 'Ошибка авторизации', - ERROR_HEADING: 'Ошибка', - ERROR_TEXT: 'Авторизация не удалась, попробуйте еще раз', - ERROR_CLOSE_BUTTON: 'ЗАКРЫТЬ', - - SUCCESS_TITLE: 'Успешно!', - }, -}; diff --git a/backend/models/Route.js b/backend/models/Route.js deleted file mode 100644 index be39b3e..0000000 --- a/backend/models/Route.js +++ /dev/null @@ -1,23 +0,0 @@ -const mongoose = require('mongoose'); - -const { Schema } = mongoose; - -const RouteSchema = new Schema({ - _id: { type: String, required: true }, - title: { type: String, default: '' }, - version: { type: Number, default: 2 }, - route: { type: Array, default: [] }, - stickers: { type: Array, default: [] }, - owner: { type: Schema.Types.ObjectId, ref: 'User' }, - distance: { type: Number, default: 0 }, - is_public: { type: Boolean, default: false }, - is_starred: { type: Boolean, default: false }, - is_deleted: { type: Boolean, default: false }, - created_at: { type: Date, default: Date.now() }, - updated_at: { type: Date, default: Date.now() }, - logo: { type: String, default: 'DEFAULT' }, - provider: { type: String, default: 'DEFAULT' }, - description: { type: String, default: '' }, -}); - -module.exports.RouteSchema = RouteSchema; diff --git a/backend/models/User.js b/backend/models/User.js deleted file mode 100644 index ceb8fbb..0000000 --- a/backend/models/User.js +++ /dev/null @@ -1,27 +0,0 @@ -const mongoose = require('mongoose'); -const { Schema } = mongoose; - -// Schemas -const UserSchema = new Schema( - { - _id: { type: String, required: true }, - role: { - type: String, - required: true, - enum: ['admin', 'guest', 'user', 'vk'], - }, - token: { type: String, required: true }, - created_at: { type: Date, required: true, default: Date.now }, - - first_name: { type: String }, - last_name: { type: String }, - photo: { type: String }, - version: { type: Number, default: 2 }, - routes: [{ type: Schema.Types.ObjectId, ref: 'Route' }] - }, - { - timestamps: { createdAt: 'created_at', updatedAt: 'updated_at' } - } -); - -module.exports.UserSchema = UserSchema; diff --git a/backend/models/index.js b/backend/models/index.js deleted file mode 100644 index 0522c0f..0000000 --- a/backend/models/index.js +++ /dev/null @@ -1,8 +0,0 @@ -const mongoose = require('mongoose'); - -const { UserSchema } = require('./User'); -const { RouteSchema } = require('./Route'); - -module.exports.User = mongoose.model('User', UserSchema); -module.exports.Route = mongoose.model('Route', RouteSchema); - diff --git a/backend/public/stylesheets/social/vk.css b/backend/public/stylesheets/social/vk.css deleted file mode 100644 index 6700af0..0000000 --- a/backend/public/stylesheets/social/vk.css +++ /dev/null @@ -1 +0,0 @@ -body{background:#6d9dc8;font:14px "Lucida Grande",Helvetica,Arial,sans-serif;color:white;margin:0;font-weight:300}div#message{padding:100px;display:flex;align-items:center;justify-content:center;flex-direction:column;height:100vh;width:100vw;margin:0;position:absolute;box-sizing:border-box;text-align:left}div.bg{background:white;color:#666666;padding:20px 40px;border-radius:4px}h1{margin-bottom:10px;text-transform:uppercase}button{height:32px;padding:0 24px;color:white;border:none;box-sizing:border-box;margin-top:40px;border-radius:3px;background:#6d9dc8;font-weight:bold;float:right;cursor:pointer} \ No newline at end of file diff --git a/backend/public/stylesheets/social/vk.less b/backend/public/stylesheets/social/vk.less deleted file mode 100644 index a5ffeb6..0000000 --- a/backend/public/stylesheets/social/vk.less +++ /dev/null @@ -1,47 +0,0 @@ -body { - background: #6d9dc8; - font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; - color: white; - margin: 0; - font-weight: 300; -} - -div#message { - padding: 100px; - display: flex; - align-items: center; - justify-content: center; - flex-direction: column; - height: 100vh; - width: 100vw; - margin: 0; - position: absolute; - box-sizing: border-box; - text-align: left; -} - -div.bg { - background: white; - color: #666666; - padding: 20px 40px; - border-radius: 4px; -} - -h1 { - margin-bottom: 10px; - text-transform: uppercase; -} - -button { - height: 32px; - padding: 0 24px; - color: white; - border: none; - box-sizing: border-box; - margin-top: 40px; - border-radius: 3px; - background: #6d9dc8; - font-weight: bold; - float: right; - cursor: pointer; -} diff --git a/backend/public/stylesheets/style.css b/backend/public/stylesheets/style.css deleted file mode 100644 index 73f017c..0000000 --- a/backend/public/stylesheets/style.css +++ /dev/null @@ -1 +0,0 @@ -body{padding:50px;font:14px "Lucida Grande",Helvetica,Arial,sans-serif}a{color:#00B7FF} \ No newline at end of file diff --git a/backend/public/stylesheets/style.less b/backend/public/stylesheets/style.less deleted file mode 100644 index 9453385..0000000 --- a/backend/public/stylesheets/style.less +++ /dev/null @@ -1,8 +0,0 @@ -body { - padding: 50px; - font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; -} - -a { - color: #00B7FF; -} diff --git a/backend/routes/auth.js b/backend/routes/auth.js deleted file mode 100644 index 356833c..0000000 --- a/backend/routes/auth.js +++ /dev/null @@ -1,16 +0,0 @@ -const express = require('express'); -const guest = require('./auth/guest'); -const list = require('./auth/list'); -const check = require('./auth/check'); -const vk = require('./auth/social/vk'); -const iframe_vk = require('./auth/iframe/vk'); - -const router = express.Router(); - -router.get('/', check); -// router.get('/list', list); -router.get('/guest', guest); -router.get('/social/vk', vk); -router.get('/iframe/vk', iframe_vk); - -module.exports = router; diff --git a/backend/routes/auth/check.js b/backend/routes/auth/check.js deleted file mode 100644 index fe74a0a..0000000 --- a/backend/routes/auth/check.js +++ /dev/null @@ -1,24 +0,0 @@ -const { User } = require('../../models'); -const { generateGuest, generateRandomUrl } = require('./guest'); - -module.exports = async (req, res) => { - const { id, token } = req.query; - - const user = await User.findOne({ _id: id, token }); - - const random_url = await generateRandomUrl(); - - if (user) { - return res.send({ - success: true, ...user.toObject(), id: user._id, random_url - }); - } - - const guest = await generateGuest(); - const created = await User.create(guest).then(result => result.toObject()); - - return res.send({ - success: false, error: 'user not found', error_code: 1231, ...created, id: created._id, random_url - }); -}; - diff --git a/backend/routes/auth/guest.js b/backend/routes/auth/guest.js deleted file mode 100644 index 73d8dc8..0000000 --- a/backend/routes/auth/guest.js +++ /dev/null @@ -1,52 +0,0 @@ -const { genRandomSequence } = require('../../utils/gen'); -const { User } = require('../../models'); - -const generateGuestToken = () => { - const _id = `guest:${genRandomSequence(16)}`; - - return User.find({ _id }).then(user => { - if (user.length) return generateGuestToken(); - - return _id; - }); -}; - -const generateUser = (_id, role = 'guest') => { - const token = `seq:${genRandomSequence(32)}`; - - return { _id, token, role }; -}; - -const saveUser = user => { - const model = new User({ ...user }); - - return model.save() - .then(() => model.toObject()) - .catch(() => ({ - ...user, - success: false, - error: 'Error saving user model', - error_code: 1232, - })); -}; - -const generateRandomUrl = () => Promise.resolve(genRandomSequence(16)); - -const generateGuest = async () => { - const user = await generateGuestToken() - .then(generateUser); - const random_url = await generateRandomUrl(); - - return { ...user, random_url, first_name: '', last_name: '', photo: '' }; -}; - -module.exports = async (req, res) => { - const user = await generateGuest().then(saveUser); - - res.send({ success: true, ...user }); -}; - -module.exports.generateUser = generateUser; -module.exports.generateGuest = generateGuest; -module.exports.generateGuestToken = generateGuestToken; -module.exports.generateRandomUrl = generateRandomUrl; diff --git a/backend/routes/auth/iframe/vk.js b/backend/routes/auth/iframe/vk.js deleted file mode 100644 index 19dbf8a..0000000 --- a/backend/routes/auth/iframe/vk.js +++ /dev/null @@ -1,22 +0,0 @@ -const { User } = require('../../../models'); -const { CONFIG } = require('../../../../config/backend'); -const md5 = require('js-md5'); -const { generateRandomUrl } = require('../guest'); - -module.exports = async (req, res) => { - if (!CONFIG.SOCIAL.VK_IFRAME.ENABLED) return res.send({ success: false, error: 'Unsupported Method' }); - - const { query: { viewer_id, auth_key } } = req; - - const checksum = md5(`${CONFIG.SOCIAL.VK_IFRAME.APP_ID}_${viewer_id}_${CONFIG.SOCIAL.VK_IFRAME.SECRET}`); - - if (checksum !== auth_key) return res.send({ success: false, error: 'No such user (1)' }); - - const user = await User.findOne({ _id: `vk:${viewer_id}` }).populate('routes'); - - if (!user) return res.send({ success: false, error: 'No such user (2)' }); - - const random_url = await generateRandomUrl(); - return res.send({ success: true, user: { ...user.toObject(), id: user._id, random_url } }); -}; - diff --git a/backend/routes/auth/list.js b/backend/routes/auth/list.js deleted file mode 100644 index 60a904d..0000000 --- a/backend/routes/auth/list.js +++ /dev/null @@ -1,9 +0,0 @@ -const { User } = require('../../models'); - -module.exports = (req, res) => User.find((err, articles) => { - if (!err) return res.send(articles); - - res.statusCode = 500; - return res.send({ error: 'Server error' }); -}); - diff --git a/backend/routes/auth/social/vk.js b/backend/routes/auth/social/vk.js deleted file mode 100644 index 47cfd61..0000000 --- a/backend/routes/auth/social/vk.js +++ /dev/null @@ -1,82 +0,0 @@ -const { User } = require('../../../models'); -const axios = require('axios'); -const { generateUser } = require('../guest'); -const { STRINGS } = require('../../../config/strings'); -const { CONFIG } = require('../../../../config/backend'); - -const fetchUserData = async (req, res) => { - const { query: { code } } = req; - const host = req.get('host'); - const proto = req.connection.encrypted ? 'https' : 'http'; - - const { data: { access_token, user_id } } = await axios.get( - 'https://oauth.vk.com/access_token', - { - params: { - client_id: CONFIG.SOCIAL.VK.APP_ID, - client_secret: CONFIG.SOCIAL.VK.SECRET, - code, - redirect_uri: `${proto}://${host}/api/auth/social/vk`, - } - } - ).catch(() => { - return res.render('social/vk_error', { - title: STRINGS.OAUTH.ERROR_TITLE, - heading: STRINGS.OAUTH.ERROR_HEADING, - reason: STRINGS.OAUTH.ERROR_TEXT, - button: STRINGS.OAUTH.ERROR_CLOSE_BUTTON, - }); - }); - - const { data } = await axios.get( - 'https://api.vk.com/method/users.get', - { - params: { - user_id, - fields: 'photo', - v: '5.67', - access_token, - } - } - ).catch(() => { - return res.render('social/vk_error', { - title: STRINGS.OAUTH.ERROR_TITLE, - heading: STRINGS.OAUTH.ERROR_HEADING, - reason: STRINGS.OAUTH.ERROR_TEXT, - button: STRINGS.OAUTH.ERROR_CLOSE_BUTTON, - }); - }); - - return data; -}; - -module.exports = async (req, res) => { - const { response } = await fetchUserData(req, res); - - const { - first_name = '', last_name = '', photo = '', id = '' - } = response[0]; - - const newUser = await generateUser(`vk:${id}`, 'vk'); - const name = `${first_name} ${last_name}`; - const user = { - ...newUser, first_name, last_name, photo, name, - }; - - const auth = await User.findOne({ _id: user._id }).populate('routes'); - - if (auth) { - await auth.set({ - first_name, last_name, name, photo - }).save(); - - res.render('social/success', { title: STRINGS.OAUTH.SUCCESS_TITLE, ...user, token: auth.token }); - } else { - const created = await User.create(user, (err, result) => { - return result.toObject(); - }); - - res.render('social/success', { title: STRINGS.OAUTH.SUCCESS_TITLE, ...user, ...created }); - } -}; - diff --git a/backend/routes/index.js b/backend/routes/index.js deleted file mode 100644 index 6e84977..0000000 --- a/backend/routes/index.js +++ /dev/null @@ -1,9 +0,0 @@ -const express = require('express'); -const router = express.Router(); - -/* GET home page. */ -router.get('/', function(req, res, next) { - res.render('index', { title: 'Express' }); -}); - -module.exports = router; diff --git a/backend/routes/route.js b/backend/routes/route.js deleted file mode 100644 index c340d14..0000000 --- a/backend/routes/route.js +++ /dev/null @@ -1,18 +0,0 @@ -const express = require('express'); -const post = require('./route/post'); -const get = require('./route/get'); -const list = require('./route/list'); -const drop = require('./route/drop'); -const patch = require('./route/patch'); -const star = require('./route/star'); - -const router = express.Router(); - -router.post('/star', star); -router.post('/', post); -router.get('/', get); -router.patch('/', patch); -router.delete('/', drop); -router.get('/list', list); - -module.exports = router; diff --git a/backend/routes/route/drop.js b/backend/routes/route/drop.js deleted file mode 100644 index ae51e06..0000000 --- a/backend/routes/route/drop.js +++ /dev/null @@ -1,19 +0,0 @@ -const { User, Route } = require('../../models'); - -module.exports = async (req, res) => { - const { body: { id, token, address } } = req; - - const owner = await User.findOne({ _id: id, token }).populate('routes'); - - if (!owner) return res.send({ success: false, reason: 'unauthorized' }); - - const exists = await Route.findOne({ _id: address }).populate('owner', '_id'); - - if (!exists) return res.send({ success: false, mode: 'not_exists' }); - if (exists && exists.owner._id !== id) return res.send({ success: false, mode: 'not_yours' }); - - await exists.set({ is_deleted: true }).save(); - - return res.send({ success: true, address }); -}; - diff --git a/backend/routes/route/get.js b/backend/routes/route/get.js deleted file mode 100644 index 7421a86..0000000 --- a/backend/routes/route/get.js +++ /dev/null @@ -1,26 +0,0 @@ -const { generateRandomUrl } = require('../auth/guest'); -const { Route } = require('../../models'); - -module.exports = async (req, res) => { - const { query: { name } } = req; - - if (!name) return res.send({ success: false, mode: 'not_found_1' }); - - const exists = await Route.findOne({ _id: name, is_deleted: false }).populate('owner', '_id'); - - if (!exists) return res.send({ success: false, mode: 'not_found_2' }); - const data = exists.toObject(); - const random_url = await generateRandomUrl(); - - return res.send({ - success: true, - ...data, - address: exists._id, - owner: { - ...data.owner, - id: data.owner._id, - }, - random_url, - }); -}; - diff --git a/backend/routes/route/list.js b/backend/routes/route/list.js deleted file mode 100644 index d97bfe2..0000000 --- a/backend/routes/route/list.js +++ /dev/null @@ -1,96 +0,0 @@ -const { Route, User } = require('../../models'); - -module.exports = async (req, res) => { - const { - query: { - id, token, title, distance, author, step = 20, shift = 0, starred, - } - } = req; - - const is_starred = parseInt(starred, 10) === 1; - const user = await User.findOne({ _id: id, token }); - - let criteria = { is_deleted: false }; - - if (title) { - criteria = { - ...criteria, - $or: [ - { title: new RegExp(title.trim(), 'ig') }, - { _id: new RegExp(title.trim(), 'ig') }, - ], - }; - } - - if (is_starred) { - criteria = { - ...criteria, - is_starred: true, - is_public: true, - }; - } else if (!author || !user || (user._id !== author)) { - criteria = { - ...criteria, - is_starred: false, - is_public: true, - }; - } - - let list = await Route.find( - { - ...criteria, - }, - '_id title distance owner updated_at is_public is_deleted is_starred', - { - limit: 9000, - sort: { updated_at: -1 }, - } - ).populate('owner', '_id'); - - - list = list.filter(item => !author || (item.owner && item.owner._id === author)); - - let limits = list.reduce(({ min, max }, { distance: dist }) => ({ - min: Math.floor(Math.min(dist, min) / 25) * 25, - max: Math.ceil(Math.max(dist, max) / 25) * 25, - }), { min: 999999, max: 0 }); - - const minDist = parseInt(distance[0], 10); - const maxDist = parseInt(distance[1], 10) === 200 ? 99999 : parseInt(distance[1], 10); - // const maxDist = parseInt(distance[1], 10) > parseInt(distance[0], 10) - // ? parseInt(distance[1], 10) - // : 10000; - - if (distance && distance.length === 2 && !(minDist === maxDist && minDist === 0)) { - list = list.filter(item => ( - item.distance >= minDist && - item.distance <= maxDist - )); - } - - const limit = list.length; - - if (step) { - list = list.slice(parseInt(shift, 10), (parseInt(shift, 10) + parseInt(step, 10))); - } - - if (list.length === 0) { - limits = { min: 0, max: 0 }; - } else if (limits.max === 0) { - limits = { min: 0, max: 0 }; - } else if (limits.min === limits.max) { - limits = { min: limits.max - 25, max: limits.max }; - } else if (limits.max > 200) { - limits = { min: limits.min, max: 200 }; - } - - res.send({ - success: true, - list, - limit, - step: parseInt(step, 10), - shift: parseInt(shift, 10), - ...limits, - }); -}; - diff --git a/backend/routes/route/patch.js b/backend/routes/route/patch.js deleted file mode 100644 index 3abbdb1..0000000 --- a/backend/routes/route/patch.js +++ /dev/null @@ -1,24 +0,0 @@ -const { User, Route } = require('../../models'); - -const { parseString } = require('../../utils/parse'); - -module.exports = async (req, res) => { - const { body, body: { id, token, address } } = req; - - const owner = await User.findOne({ _id: id, token }).populate('routes'); - - if (!owner) return res.send({ success: false, reason: 'unauthorized' }); - - const title = parseString(body.title, 64); - const is_public = !!body.is_public; - - const exists = await Route.findOne({ _id: address, is_deleted: false }).populate('owner', '_id'); - - if (!exists) return res.send({ success: false, mode: 'not_exists' }); - if (exists && exists.owner._id !== id) return res.send({ success: false, mode: 'not_yours' }); - - await exists.set({ title, is_public }).save(); - - return res.send({ success: true, ...exists }); -}; - diff --git a/backend/routes/route/post.js b/backend/routes/route/post.js deleted file mode 100644 index e1251f4..0000000 --- a/backend/routes/route/post.js +++ /dev/null @@ -1,57 +0,0 @@ -const { User, Route } = require('../../models'); - -const { - parseRoute, parseStickers, parseString, parseNumber, parseAddress -} = require('../../utils/parse'); - -module.exports = async (req, res) => { - const { body, body: { id, token, force } } = req; - - const owner = await User.findOne({ _id: id, token }).populate('routes'); - if (!owner) { - return res.send({ - success: false, reason: 'unauthorized', id, token - }); - } - - const title = parseString(body.title, 64); - const description = parseString(body.description, 256); - const address = parseAddress(body.address, 32); - const route = parseRoute(body.route); - const stickers = parseStickers(body.stickers); - const logo = parseString(body.logo, 16); - const provider = parseString(body.provider, 16) || 'DEFAULT'; - const distance = parseNumber(body.distance, 0, 1000); - const is_public = !!body.is_public; - - if ((!route || route.length <= 0) && (!stickers || stickers.length <= 0)) { - return res.send({ success: false, mode: 'empty' }); - } - - const exists = await Route.findOne({ _id: address }).populate('owner', '_id'); - - if (exists && exists.owner._id !== id) return res.send({ success: false, mode: 'exists' }); - if (exists && !force) return res.send({ success: false, mode: 'overwriting' }); - - if (exists) { - await exists.set({ - title, route, stickers, logo, distance, updated_at: Date.now(), provider, is_public, description, - }).save(); - - return res.send({ - success: true, title, address, route, stickers, mode: 'overwrited', is_public, description, - }); - } - - const created = await Route.create({ - _id: address, title, route, stickers, owner, logo, distance, provider, is_public, description, - }); - - await owner.routes.push(created); - await owner.save(); - - return res.send({ - success: true, title, address, route, stickers, provider, is_public, description, - }); -}; - diff --git a/backend/routes/route/star.js b/backend/routes/route/star.js deleted file mode 100644 index aa96fce..0000000 --- a/backend/routes/route/star.js +++ /dev/null @@ -1,19 +0,0 @@ -const { User, Route } = require('../../models'); - -module.exports = async (req, res) => { - const { body, body: { id, token, address } } = req; - - const owner = await User.findOne({ _id: id, token }).populate('routes'); - - if (!owner || owner.role !== 'admin') return res.send({ success: false, reason: 'unauthorized' }); - - const is_starred = !!body.is_starred; - - const exists = await Route.findOne({ _id: address }).populate('owner', '_id'); - if (!exists) return res.send({ success: false, mode: 'not_exists' }); - - await exists.set({ is_starred }).save(); - - return res.send({ success: true, ...exists }); -}; - diff --git a/backend/routes/users.js b/backend/routes/users.js deleted file mode 100644 index 623e430..0000000 --- a/backend/routes/users.js +++ /dev/null @@ -1,9 +0,0 @@ -var express = require('express'); -var router = express.Router(); - -/* GET users listing. */ -router.get('/', function(req, res, next) { - res.send('respond with a resource'); -}); - -module.exports = router; diff --git a/backend/tools/import.js b/backend/tools/import.js deleted file mode 100755 index 0481cc3..0000000 --- a/backend/tools/import.js +++ /dev/null @@ -1,182 +0,0 @@ -#!/usr/bin/env node -const mysql = require('mysql'); -const { REPLACEMENT, MAPS } = require('./stickersReplacement'); -const db = require('../config/db'); -let total_dist = 0; -const { User, Route } = require('../models'); - -const con = mysql.createConnection({ - host: 'vault48.org', - user: 'macos_exporter', - password: 'password', -}); - -const tryJSON = data => { - try { - return JSON.parse(data); - } catch (e) { - return {}; - } -}; - -function deg2rad(deg) { - return (deg * Math.PI) / 180; -} - -const findDistance = (t1, n1, t2, n2) => { - // convert coordinates to radians - const lat1 = deg2rad(t1); - const lon1 = deg2rad(n1); - const lat2 = deg2rad(t2); - const lon2 = deg2rad(n2); - - // find the differences between the coordinates - const dlat = lat2 - lat1; - const dlon = lon2 - lon1; - - // here's the heavy lifting - const a = (Math.sin(dlat / 2) ** 2) + - (Math.cos(lat1) * Math.cos(lat2) * (Math.sin(dlon / 2) ** 2)); - const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); // great circle distance in radians - // const dm = c * 3961; // great circle distance in miles - const dk = c * 6373; // great circle distance in km - - // round the results down to the nearest 1/1000 - // const mi = round(dm); - return (Math.round(dk * 1000) / 1000); -}; - -const calcPolyDistance = route => { - let summ = 0; - for (let i = 1; i < route.length; i += 1) { - summ += findDistance(route[i - 1].lat, route[i - 1].lng, route[i].lat, route[i].lng); - } - - total_dist += summ; - - return parseFloat(Number(summ).toFixed(2)); -}; - -const stickerAngleParser = angle => parseFloat(((Number(angle) % Math.PI) + Math.PI).toFixed(2)); - -const stickerStyleParser = style => (REPLACEMENT[style] - ? { ...REPLACEMENT[style] } - : { set: 'base', sticker: 'chicken' }); - -const stickersParser = stickers => ( - stickers.map(({ - ang, latlng, style, text - }) => ({ - angle: stickerAngleParser(ang), // todo: change it! - latlng, - text, - ...stickerStyleParser(style), - })) -); - -const pointParser = points => ( - points.map(({ latlngs, text }) => ({ - text, - latlng: latlngs[0], - set: 'base', - sticker: 'empty', - angle: 2.2, - })) -); - -const mapStyleParser = style => (MAPS[style] - ? MAPS[style] - : 'DEFAULT' -); - -const run = async () => { - await con.connect(err => { if (err) throw err; }); - await con.query('use neu_map'); - - const users = await new Promise(resolve => con.query('SELECT * from tokens where role = "vk"', (err, rows) => { - resolve(rows.map(({ - login, token, created, role, data - }) => { - const info = tryJSON(data); - const created_at = new Date(created * 1000); - - return { - _id: login, - token, - created_at, - updated_at: created_at, - name: info.name, - first_name: (info.name && info.name.split(' ')[0]) || '', - last_name: (info.name && info.name.split(' ')[1]) || '', - role, - photo: info.photo, - version: 1, - }; - })); - })); - - const routes = await new Promise(resolve => con.query('SELECT routes.*, tokens.login as login from routes LEFT JOIN tokens ON tokens.id = routes.id WHERE tokens.login IS NOT NULL AND tokens.role="vk"', (err, rows) => { - if (err) console.log('error', err); - - resolve(rows.map(({ - data, created, name, login - }) => { - const { - map_style, route, stickers, points, logo - } = tryJSON(data); - const created_at = new Date(created * 1000); - - return { - _id: name, - owner: { _id: login }, - created_at, - updated_at: created_at, - provider: mapStyleParser(map_style), - route: route.map(({ lat, lng }) => ({ lat: Number(lat), lng: Number(lng) })), - stickers: [ - ...stickersParser(stickers), - ...pointParser(points) - ], - logo: logo === 'default' ? 'nvs' : logo, - title: '', - version: 1, - distance: calcPolyDistance(route), - is_public: true, - }; - })); - })); - - console.log('ended, got users:', users.length); - console.log('ended, got routes:', routes.length); - - const deletedUsers = await User.deleteMany({ - // version: 1 - }); - const deletedRoutes = await Route.deleteMany({ - // version: 1 - }); - console.log("dropped users", deletedUsers); - console.log("dropped routes", deletedRoutes); - console.log('inserting users'); - const addedUsers = (await Promise.all(users.map(user => User.create(user)))) - .reduce((obj, user) => ({ ...obj, [user._id]: user }), {}); - - console.log('inserting routes'); - const addedRoutes = await (await Promise.all(routes.map(route => Route.create({ - ...route, - owner: addedUsers[route.owner._id], - })))); - - await Promise.all(addedRoutes.map(async (route) => { - await addedUsers[route.owner._id].routes.push(route); - })); - - await Promise.all(addedRoutes.map(route => new Promise(resolve => ( - addedUsers[route.owner._id].save(() => resolve()) - )))); - - console.log('ok'); -}; - -run(); - diff --git a/backend/tools/stickersReplacement.js b/backend/tools/stickersReplacement.js deleted file mode 100644 index 082574e..0000000 --- a/backend/tools/stickersReplacement.js +++ /dev/null @@ -1,44 +0,0 @@ -module.exports.REPLACEMENT = { - 0: { set: 'base', sticker: 'men' }, - 1: { set: 'base', sticker: 'square' }, - 2: { set: 'base', sticker: 'bridge' }, - 3: { set: 'base', sticker: 'ikea' }, - 4: { set: 'base', sticker: 'bugr' }, - 5: { set: 'base', sticker: 'monum' }, - 6: { set: 'base', sticker: 'opera' }, - 7: { set: 'base', sticker: 'forest' }, - 8: { set: 'base', sticker: 'empty' }, - 9: { set: 'base', sticker: 'empty' }, - 10: { set: 'base', sticker: 'road' }, - 11: { set: 'base', sticker: 'chicken' }, - 12: { set: 'base', sticker: 'camp' }, - 13: { set: 'base', sticker: 'fastfood' }, - 14: { set: 'base', sticker: 'beer' }, - 15: { set: 'base', sticker: 'pancake' }, - 16: { set: 'base', sticker: 'rocks' }, - 17: { set: 'real', sticker: 'swamp' }, - 18: { set: 'real', sticker: 'skull' }, - 19: { set: 'base', sticker: 'crap' }, - 20: { set: 'pin', sticker: 'start' }, - 21: { set: 'pin', sticker: 'p1' }, - 22: { set: 'pin', sticker: 'p2' }, - 23: { set: 'pin', sticker: 'p3' }, - 24: { set: 'pin', sticker: 'p4' }, - 25: { set: 'pin', sticker: 'p5' }, - 26: { set: 'pin', sticker: 'p6' }, - 27: { set: 'pin', sticker: 'finish' }, - 29: { set: 'pin', sticker: 'danger' }, - 30: { set: 'pin', sticker: 'question' }, -}; - -module.exports.MAPS = { - 'watercolor': 'BLANK', - 'darq': 'BLANK', - 'default': 'DGIS', - 'osm': 'DEFAULT', - 'hot': 'HOT', - 'blank': 'BLANK', - 'sat': 'DEFAULT', - 'ymap': 'DEFAULT', - 'ysat': 'DEFAULT', -}; diff --git a/backend/utils/gen.js b/backend/utils/gen.js deleted file mode 100644 index 5c5c9f1..0000000 --- a/backend/utils/gen.js +++ /dev/null @@ -1,10 +0,0 @@ -module.exports.genRandomSequence = (length = 16) => { - let sequence = ''; - const symbols = 'ABCDEFGHIJKLMOPQRSTUVXYZabcdefghijgmlopqrstuvxyz01234567890' - - for (let i = 0; i < length; i += 1) { - sequence += symbols[parseInt(Math.random() * (symbols.length - 1), 10)]; - } - - return sequence; -}; diff --git a/backend/utils/parse.js b/backend/utils/parse.js deleted file mode 100644 index 4e023ff..0000000 --- a/backend/utils/parse.js +++ /dev/null @@ -1,30 +0,0 @@ -module.exports.parseRoute = route => route.filter(el => ( - Object.keys(el).length === 2 - && el.lat - && parseInt(el.lat, 10) > 0 - && parseInt(el.lat, 10) < 1000 - && el.lng - && parseInt(el.lng, 10) > 0 - && parseInt(el.lng, 10) < 1000 -)); - -module.exports.parseStickers = stickers => stickers.filter(el => ( - Object.keys(el).length === 5 - && el.latlng - && Object.keys(el.latlng).length === 2 - && el.latlng.lat - && parseInt(el.latlng.lat, 10) > 0 - && parseInt(el.latlng.lat, 10) < 1000 - && el.latlng.lng - && parseInt(el.latlng.lng, 10) > 0 - && parseInt(el.latlng.lng, 10) < 1000 -)); -// .map(el => ((el.text && String(el.text).substr(0, 100)) || '')); - -const parseString = (value, size) => (value && String(value).substr(0, size)) || ''; -module.exports.parseNumber = (value, min, max) => (value && Number(value) && Math.min(max, Math.max(min, value))) || 0; - -module.exports.parseString = parseString; -module.exports.parseAddress = (value, size) => ( - parseString(value, size).replace(/[^A-Za-z\-_0-9]/ig, '_').replace(/_{2,}/ig, '_') -); diff --git a/backend/views/error.pug b/backend/views/error.pug deleted file mode 100644 index 51ec12c..0000000 --- a/backend/views/error.pug +++ /dev/null @@ -1,6 +0,0 @@ -extends layout - -block content - h1= message - h2= error.status - pre #{error.stack} diff --git a/backend/views/index.pug b/backend/views/index.pug deleted file mode 100644 index 3d63b9a..0000000 --- a/backend/views/index.pug +++ /dev/null @@ -1,5 +0,0 @@ -extends layout - -block content - h1= title - p Welcome to #{title} diff --git a/backend/views/layout.pug b/backend/views/layout.pug deleted file mode 100644 index 15af079..0000000 --- a/backend/views/layout.pug +++ /dev/null @@ -1,7 +0,0 @@ -doctype html -html - head - title= title - link(rel='stylesheet', href='/stylesheets/style.css') - body - block content diff --git a/backend/views/social/success.pug b/backend/views/social/success.pug deleted file mode 100644 index 2f8b3c5..0000000 --- a/backend/views/social/success.pug +++ /dev/null @@ -1,17 +0,0 @@ -doctype html -html - body - script. - window.opener.postMessage({ - type: 'oauth_login', - user: { - id: '#{_id}', - token: '#{token}', - name: '#{name}', - photo: '#{photo}', - role: '#{role}', - } - }, '*'); - - window.close(); - diff --git a/backend/views/social/vk_error.pug b/backend/views/social/vk_error.pug deleted file mode 100644 index d172533..0000000 --- a/backend/views/social/vk_error.pug +++ /dev/null @@ -1,13 +0,0 @@ -doctype html -html - head - title Ошибка авторизации - link(rel='stylesheet', href='/stylesheets/social/vk.css') - - body - block content - div#message - div.bg - h1=heading - div=reason - button(onclick='window.close()')=button diff --git a/package.json b/package.json index 635e200..790749f 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,6 @@ "identity-obj-proxy": "^3.0.0", "less-loader": "^4.1.0", "mini-css-extract-plugin": "^0.5.0", - "nodemon": "^1.19.2", "style-loader": "^0.21.0", "sw-precache-webpack-plugin": "^0.11.5", "ts-node": "^8.0.1", @@ -61,14 +60,12 @@ "@types/react": "16.8.1", "axios": "^0.18.0", "babel-runtime": "^6.26.0", - "bluebird": "^3.5.3", "body-parser": "^1.18.3", "classnames": "^2.2.6", "clean-webpack-plugin": "^0.1.9", "cookie-parser": "~1.4.3", "croppr": "^2.3.1", "debug": "~2.6.9", - "express": "~4.16.0", "file-saver": "^2.0.0", "history": "^4.7.2", "http-errors": "~1.6.2", @@ -82,12 +79,8 @@ "less": "^3.8.1", "less-middleware": "~2.2.1", "lodash": "^4.17.10", - "mongoose": "^5.3.14", - "morgan": "~1.9.0", - "mysql": "^2.16.0", "optimize-css-assets-webpack-plugin": "^5.0.1", "pt-sans-cyrillic": "0.0.4", - "pug": "2.0.0-beta11", "raleway-cyrillic": "^4.0.2", "rc-slider": "8.5.0", "react": "16.8.1",