merge Dev/ahead branch (#144)
* Added Support for Geo Tracking and API Key auto * added switch cases (#143) Co-authored-by: akankshat05 <72144454+akankshat05@users.noreply.github.com>
This commit is contained in:
parent
84c3e1a9cc
commit
a33fa6e83c
|
@ -1,3 +1,10 @@
|
|||
const package = require('../package.json')
|
||||
|
||||
module.exports.home = function (req, res) {
|
||||
return res.send('URL MiniFy is running')
|
||||
return res.json({
|
||||
name: package.name,
|
||||
version: package.version,
|
||||
description: package.description,
|
||||
github: package.homepage,
|
||||
})
|
||||
}
|
||||
|
|
|
@ -1,12 +1,37 @@
|
|||
const Minfy = require('../models/minifed_urls')
|
||||
const base_url = 'https://minfy.xyz/'
|
||||
const { nanoid } = require('nanoid')
|
||||
const axios = require('axios')
|
||||
|
||||
const blackListedAliases = ['404','dashboard','qr','credits','github','admin','geo','all','me','go','upload','download','link','about','tos','faqs']
|
||||
const blackListedAliases = [
|
||||
'404',
|
||||
'dashboard',
|
||||
'qr',
|
||||
'credits',
|
||||
'github',
|
||||
'admin',
|
||||
'geo',
|
||||
'all',
|
||||
'me',
|
||||
'go',
|
||||
'upload',
|
||||
'download',
|
||||
'link',
|
||||
'about',
|
||||
'tos',
|
||||
'faqs',
|
||||
'privacy',
|
||||
'contact',
|
||||
'terms',
|
||||
'help',
|
||||
'api',
|
||||
'api-docs',
|
||||
'auto',
|
||||
]
|
||||
|
||||
function verifyAlias(alias) {
|
||||
const boolean = blackListedAliases.find(element => element===alias);
|
||||
return boolean;
|
||||
const boolean = blackListedAliases.find((element) => element === alias)
|
||||
return boolean
|
||||
}
|
||||
module.exports.getAllData = async (req, res) => {
|
||||
Minfy.find({})
|
||||
|
@ -48,30 +73,30 @@ module.exports.findUrlById = async (req, res) => {
|
|||
}
|
||||
|
||||
module.exports.getAliasStatus = async (req, res) => {
|
||||
try{
|
||||
const alias = req.params.alias;
|
||||
const aliasStatus = await Minfy.findOne({ alias });
|
||||
try {
|
||||
const alias = req.params.alias
|
||||
const aliasStatus = await Minfy.findOne({ alias })
|
||||
|
||||
if(!aliasStatus){
|
||||
return res.status(200).json({success: true});
|
||||
}else{
|
||||
return res.status(400).json({success: false})
|
||||
}
|
||||
}catch (error){
|
||||
console.error(error)
|
||||
if (!aliasStatus) {
|
||||
return res.status(200).json({ success: true })
|
||||
} else {
|
||||
return res.status(400).json({ success: false })
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(error)
|
||||
}
|
||||
}
|
||||
|
||||
module.exports.addURL = async (req, res) => {
|
||||
const alias = nanoid(5)
|
||||
const minifiedUrl = base_url + alias
|
||||
|
||||
try{
|
||||
const aliasPresent = await Minfy.findOne({ alias });
|
||||
if(aliasPresent){
|
||||
return res.status(400).json({success: false});
|
||||
}
|
||||
}catch (error){
|
||||
try {
|
||||
const aliasPresent = await Minfy.findOne({ alias })
|
||||
if (aliasPresent) {
|
||||
return res.status(400).json({ success: false })
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(error)
|
||||
}
|
||||
|
||||
|
@ -87,7 +112,6 @@ module.exports.addURL = async (req, res) => {
|
|||
console.error(err)
|
||||
res.sendStatus(500)
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
module.exports.deleteUrlData = async (req, res) => {
|
||||
|
@ -116,15 +140,20 @@ module.exports.updateUrlData = async (req, res) => {
|
|||
}
|
||||
|
||||
module.exports.addURLAuthed = async (req, res) => {
|
||||
const { alias, originalUrl } = req.body
|
||||
if(verifyAlias(alias))
|
||||
{
|
||||
res.sendStatus(500);
|
||||
throw new Error('This alias cannot be used, try some another.');
|
||||
var { alias, originalUrl } = req.body
|
||||
if (alias === undefined) {
|
||||
return res
|
||||
.status(400)
|
||||
.json({ success: false, message: 'Alias is required' })
|
||||
} else if (alias === 'auto') {
|
||||
alias = nanoid(5)
|
||||
}
|
||||
if (verifyAlias(alias)) {
|
||||
res.sendStatus(500)
|
||||
throw new Error('This alias cannot be used, try some another.')
|
||||
}
|
||||
|
||||
var createdBy = req.user.data.email
|
||||
// console.log(req.user);
|
||||
const minifiedUrl = base_url + alias
|
||||
const data = {
|
||||
alias,
|
||||
|
@ -144,17 +173,151 @@ module.exports.addURLAuthed = async (req, res) => {
|
|||
}
|
||||
|
||||
module.exports.visitor = async (req, res) => {
|
||||
Minfy.findOneAndUpdate(
|
||||
{ alias: req.params.alias },
|
||||
{ $inc: { views: 1 } },
|
||||
{ new: true }
|
||||
)
|
||||
.then((data) => {
|
||||
res.send(`views increased`)
|
||||
// console.log(req.ip)
|
||||
const config = {
|
||||
url: 'https://ip.zxq.co/' + req.ip,
|
||||
method: 'GET',
|
||||
}
|
||||
axios(config)
|
||||
.then((response) => {
|
||||
switch(response.data.continent){
|
||||
case 'AS':
|
||||
Minfy.findOneAndUpdate(
|
||||
{ alias: req.params.alias },
|
||||
{
|
||||
$inc: {
|
||||
views: 1,
|
||||
'viewedFrom.AS': 1,
|
||||
},
|
||||
},
|
||||
{ new: true }
|
||||
)
|
||||
.then((data) => {
|
||||
res.send(`views increased`)
|
||||
})
|
||||
.catch((err) => {
|
||||
console.error(err)
|
||||
res.sendStatus(500)
|
||||
})
|
||||
break;
|
||||
case 'NA':
|
||||
Minfy.findOneAndUpdate(
|
||||
{ alias: req.params.alias },
|
||||
{
|
||||
$inc: {
|
||||
views: 1,
|
||||
'viewedFrom.NA': 1,
|
||||
},
|
||||
},
|
||||
{ new: true }
|
||||
)
|
||||
.then((data) => {
|
||||
res.send(`views increased`)
|
||||
})
|
||||
.catch((err) => {
|
||||
console.error(err)
|
||||
res.sendStatus(500)
|
||||
})
|
||||
break;
|
||||
case 'SA':
|
||||
Minfy.findOneAndUpdate(
|
||||
{ alias: req.params.alias },
|
||||
{
|
||||
$inc: {
|
||||
views: 1,
|
||||
'viewedFrom.SA': 1,
|
||||
},
|
||||
},
|
||||
{ new: true }
|
||||
)
|
||||
.then((data) => {
|
||||
res.send(`views increased`)
|
||||
})
|
||||
.catch((err) => {
|
||||
console.error(err)
|
||||
res.sendStatus(500)
|
||||
})
|
||||
break;
|
||||
case 'OC':
|
||||
Minfy.findOneAndUpdate(
|
||||
{ alias: req.params.alias },
|
||||
{
|
||||
$inc: {
|
||||
views: 1,
|
||||
'viewedFrom.OC': 1,
|
||||
},
|
||||
},
|
||||
{ new: true }
|
||||
)
|
||||
.then((data) => {
|
||||
res.send(`views increased`)
|
||||
})
|
||||
.catch((err) => {
|
||||
console.error(err)
|
||||
res.sendStatus(500)
|
||||
})
|
||||
break;
|
||||
case 'EU':
|
||||
Minfy.findOneAndUpdate(
|
||||
{ alias: req.params.alias },
|
||||
{
|
||||
$inc: {
|
||||
views: 1,
|
||||
'viewedFrom.EU': 1,
|
||||
},
|
||||
},
|
||||
{ new: true }
|
||||
)
|
||||
.then((data) => {
|
||||
res.send(`views increased`)
|
||||
})
|
||||
.catch((err) => {
|
||||
console.error(err)
|
||||
res.sendStatus(500)
|
||||
})
|
||||
break;
|
||||
case 'AF':
|
||||
Minfy.findOneAndUpdate(
|
||||
{ alias: req.params.alias },
|
||||
{
|
||||
$inc: {
|
||||
views: 1,
|
||||
'viewedFrom.AF': 1,
|
||||
},
|
||||
},
|
||||
{ new: true }
|
||||
)
|
||||
.then((data) => {
|
||||
res.send(`views increased`)
|
||||
})
|
||||
.catch((err) => {
|
||||
console.error(err)
|
||||
res.sendStatus(500)
|
||||
})
|
||||
break;
|
||||
default:
|
||||
Minfy.findOneAndUpdate(
|
||||
{ alias: req.params.alias },
|
||||
{
|
||||
$inc: {
|
||||
views: 1,
|
||||
'viewedFrom.UKN': 1,
|
||||
},
|
||||
},
|
||||
{ new: true }
|
||||
)
|
||||
.then((data) => {
|
||||
console.log(data)
|
||||
res.send(`views increased`)
|
||||
})
|
||||
.catch((err) => {
|
||||
console.error(err)
|
||||
res.sendStatus(500)
|
||||
})
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
console.error(err)
|
||||
res.sendStatus(500)
|
||||
res.send(err)
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
const jwt = require('jsonwebtoken')
|
||||
const User = require('../models/user')
|
||||
const { customAlphabet } = require('nanoid')
|
||||
const nanoid = customAlphabet('1234567890abcdefghijklmnopqrstuvwxyz', 25)
|
||||
|
||||
module.exports.register = async ({ body: { email, password } }, res) => {
|
||||
try {
|
||||
|
@ -53,3 +54,19 @@ module.exports.me = async (req, res) => {
|
|||
return res.sendStatus(500)
|
||||
}
|
||||
}
|
||||
module.exports.generateAPIKey = async (req, res) => {
|
||||
try {
|
||||
if (!req.user.isAuthenticated) {
|
||||
res.sendStatus(401)
|
||||
return
|
||||
}
|
||||
let user = req.user.data
|
||||
let apiKey = nanoid()
|
||||
user.apiKey = apiKey
|
||||
await user.save()
|
||||
res.json(user.apiKey)
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
return res.sendStatus(500)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -23,3 +23,22 @@ module.exports.auth = async (req, res, next) => {
|
|||
req.user = user
|
||||
next()
|
||||
}
|
||||
|
||||
module.exports.apiAuth = async (req, res, next) => {
|
||||
let user = { isAuthenticated: false }
|
||||
if (req.headers['x-api-key'] && req.headers['x-api-key'] !== null) {
|
||||
try {
|
||||
let apiKey = req.headers['x-api-key']
|
||||
let userData = await User.findOne({
|
||||
apiKey: apiKey,
|
||||
}).catch((err) => console.error(err))
|
||||
user.isAuthenticated = userData ? true : false
|
||||
user.data = userData
|
||||
} catch (err) {
|
||||
user.isAuthenticated = false
|
||||
user.data = null
|
||||
}
|
||||
}
|
||||
req.user = user
|
||||
next()
|
||||
}
|
||||
|
|
|
@ -24,6 +24,15 @@ const minifiedUrlSchema = new Schema(
|
|||
type: String,
|
||||
default: 'Anonymous',
|
||||
},
|
||||
viewedFrom: {
|
||||
UKN: { type: Number, default: 0 },
|
||||
NA: { type: Number, default: 0 },
|
||||
SA: { type: Number, default: 0 },
|
||||
EU: { type: Number, default: 0 },
|
||||
AS: { type: Number, default: 0 },
|
||||
AF: { type: Number, default: 0 },
|
||||
OC: { type: Number, default: 0 },
|
||||
},
|
||||
},
|
||||
{ timestamp: true }
|
||||
)
|
||||
|
|
|
@ -14,6 +14,14 @@ const UsersSchema = new Schema(
|
|||
type: String,
|
||||
// required: true,
|
||||
},
|
||||
profilepic: {
|
||||
type: String,
|
||||
// required: true,
|
||||
},
|
||||
apiKey: {
|
||||
type: String,
|
||||
default: 'NaN',
|
||||
},
|
||||
hash: String,
|
||||
salt: String,
|
||||
},
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "url-minify-api",
|
||||
"version": "1.1.0",
|
||||
"version": "1.2.0",
|
||||
"description": "URL Minify Backend",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
|
@ -37,7 +37,7 @@
|
|||
"jsonwebtoken": "^8.5.1",
|
||||
"mongoose": "^6.1.8",
|
||||
"morgan": "^1.10.0",
|
||||
"nanoid": "^3.2.0"
|
||||
"nanoid": "^3.3.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"nodemon": "^2.0.15",
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
const { Router } = require('express')
|
||||
const controller = require('../controllers/minify')
|
||||
const { auth } = require('../middlewares/auth')
|
||||
const { auth, apiAuth } = require('../middlewares/auth')
|
||||
|
||||
const router = Router()
|
||||
|
||||
|
@ -11,12 +11,13 @@ router.get('/alias/:alias/status', controller.getAliasStatus)
|
|||
|
||||
router.post('/add', controller.addURL)
|
||||
router.post('/add/custom', auth, controller.addURLAuthed)
|
||||
|
||||
router.get('/all/user', auth, controller.getAllurlsforUser)
|
||||
|
||||
router.patch('/edit/:id', auth, controller.updateUrlData)
|
||||
|
||||
router.delete('/delete/:id', auth, controller.deleteUrlData)
|
||||
|
||||
router.get('/:alias/views', controller.visitor)
|
||||
|
||||
router.post('/api/addCustom', apiAuth, controller.addURLAuthed)
|
||||
|
||||
module.exports = router
|
||||
|
|
|
@ -1,11 +1,13 @@
|
|||
const { Router } = require('express')
|
||||
const controller = require('../controllers/user')
|
||||
const { auth } = require('../middlewares/auth')
|
||||
const { auth, apiAuth } = require('../middlewares/auth')
|
||||
|
||||
const router = Router()
|
||||
|
||||
router.post('/login', controller.login)
|
||||
router.post('/register', controller.register)
|
||||
router.get('/me', auth, controller.me)
|
||||
router.post('/generate-api-key', auth, controller.generateAPIKey)
|
||||
router.get('/api/me', apiAuth, controller.me)
|
||||
|
||||
module.exports = router
|
||||
|
|
Loading…
Reference in New Issue