Compare commits
9 Commits
Author | SHA1 | Date | |
---|---|---|---|
e8382fb579 | |||
b5321377bd
|
|||
6e26bbbf5f
|
|||
59e178476e
|
|||
824c109a42
|
|||
f48159b31b
|
|||
6195001d4b
|
|||
0afa80345d | |||
dbb0d177b8
|
19
CHANGELOG.md
19
CHANGELOG.md
@@ -2,9 +2,28 @@
|
|||||||
|
|
||||||
All notable changes to this project will be documented in this file. Dates are displayed in UTC.
|
All notable changes to this project will be documented in this file. Dates are displayed in UTC.
|
||||||
|
|
||||||
|
#### [0.5.0](https://git.odit.services/kauft.es/linkylinky/compare/0.4.3...0.5.0)
|
||||||
|
|
||||||
|
- Removed visits 404 resolution [`59e1784`](https://git.odit.services/kauft.es/linkylinky/commit/59e178476e8f7e64de92ae23e859b87680e7af64)
|
||||||
|
- Added migration for visits provider [`f48159b`](https://git.odit.services/kauft.es/linkylinky/commit/f48159b31bcaf7c7449c89fb1e3851bcb04f5e3c)
|
||||||
|
- Reverted last change since we can defer it from the provider [`b532137`](https://git.odit.services/kauft.es/linkylinky/commit/b5321377bde9bd7de13e2eee4dd38a072cf0d4a3)
|
||||||
|
- Changed the way visits entrys get compiled to enable provider visits count searches over the default api [`6e26bbb`](https://git.odit.services/kauft.es/linkylinky/commit/6e26bbbf5f29e4c1eaa56c5dc41ab77c192d0cfb)
|
||||||
|
- Server now inserts provider on visit [`824c109`](https://git.odit.services/kauft.es/linkylinky/commit/824c109a420efd0e1e6de01d93827020f3fe5a5f)
|
||||||
|
- Added package script for migration creation [`6195001`](https://git.odit.services/kauft.es/linkylinky/commit/6195001d4b701d39470ff4be0e265f9afb288e78)
|
||||||
|
|
||||||
|
#### [0.4.3](https://git.odit.services/kauft.es/linkylinky/compare/0.4.2...0.4.3)
|
||||||
|
|
||||||
|
> 21 August 2021
|
||||||
|
|
||||||
|
- Fixed auth error crashing the entire server thanks to fastify handling stuff not the same way that they do in the docs..... [`#1`](https://git.odit.services/kauft.es/linkylinky/issues/1)
|
||||||
|
- 🚀RELEASE 0.4.3 [`0afa803`](https://git.odit.services/kauft.es/linkylinky/commit/0afa80345d47e09e20d4365634f8532248b2044c)
|
||||||
|
|
||||||
#### [0.4.2](https://git.odit.services/kauft.es/linkylinky/compare/0.4.1...0.4.2)
|
#### [0.4.2](https://git.odit.services/kauft.es/linkylinky/compare/0.4.1...0.4.2)
|
||||||
|
|
||||||
|
> 18 August 2021
|
||||||
|
|
||||||
- Changed register api route and added user deletion route [`588f3ba`](https://git.odit.services/kauft.es/linkylinky/commit/588f3bae8980f76461d20e15475ec797078b0b54)
|
- Changed register api route and added user deletion route [`588f3ba`](https://git.odit.services/kauft.es/linkylinky/commit/588f3bae8980f76461d20e15475ec797078b0b54)
|
||||||
|
- 🚀RELEASE 0.4.2 [`4ffc06d`](https://git.odit.services/kauft.es/linkylinky/commit/4ffc06db7bb84bc7bfc9c57a80927f7201185274)
|
||||||
|
|
||||||
#### [0.4.1](https://git.odit.services/kauft.es/linkylinky/compare/0.4.0...0.4.1)
|
#### [0.4.1](https://git.odit.services/kauft.es/linkylinky/compare/0.4.0...0.4.1)
|
||||||
|
|
||||||
|
10
migrations/20210821094219_visits_providers.js
Normal file
10
migrations/20210821094219_visits_providers.js
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
|
||||||
|
exports.up = function(knex) {
|
||||||
|
return knex.schema.table('visits', function (table) {
|
||||||
|
table.text('provider').defaultTo("N/A");
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.down = function(knex) {
|
||||||
|
|
||||||
|
};
|
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@odit/shortener-backend",
|
"name": "@odit/shortener-backend",
|
||||||
"version": "0.4.2",
|
"version": "0.5.0",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"private": false,
|
"private": false,
|
||||||
@@ -20,7 +20,8 @@
|
|||||||
"dev": "nodemon src/server.js",
|
"dev": "nodemon src/server.js",
|
||||||
"start": "node src/server.js",
|
"start": "node src/server.js",
|
||||||
"migrate": "knex migrate:latest",
|
"migrate": "knex migrate:latest",
|
||||||
"release": "release-it"
|
"release": "release-it",
|
||||||
|
"create:migration": "knex migrate:make"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"argon2": "^0.28.2",
|
"argon2": "^0.28.2",
|
||||||
|
@@ -45,44 +45,54 @@ fastify.decorate('verifyJWT', function async(request, reply, done) {
|
|||||||
|
|
||||||
fastify.jwt.verify(token, async (err, decoded) => {
|
fastify.jwt.verify(token, async (err, decoded) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
fastify.log.error(err)
|
fastify.log.error("JWT validation failed:")
|
||||||
done(new Error("JWT Validation failed"))
|
done(new Error("JWT Validation failed"));
|
||||||
}
|
}
|
||||||
fastify.log.info(`Token verified. User is ${decoded.payload.user}`);
|
else {
|
||||||
request.user = decoded.payload.user;
|
if (!decoded.payload) {
|
||||||
|
done(new Error("JWT is empty"));
|
||||||
|
}
|
||||||
|
fastify.log.info(`Token verified. User is ${decoded.payload.user}`);
|
||||||
|
|
||||||
const jwtcount = (await knex.select('jwtcount')
|
const jwtcount = (await knex.select('jwtcount')
|
||||||
.from('users')
|
.from('users')
|
||||||
.where('username', '=', decoded.payload.user)
|
.where('username', '=', decoded.payload.user)
|
||||||
.limit(1))[0].jwtcount;
|
.limit(1))[0].jwtcount;
|
||||||
|
|
||||||
if (decoded.payload.jwtcount < jwtcount) {
|
if (decoded.payload.jwtcount < jwtcount) {
|
||||||
fastify.log.error("Auth ended at jwtcount")
|
fastify.log.error("Auth ended at jwtcount")
|
||||||
done(new Error("JWT in no longer valid"))
|
done(new Error("JWT in no longer valid"))
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
fastify.log.info(`JWT count verified`);
|
||||||
|
request.user = decoded.payload.user;
|
||||||
|
done()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
fastify.log.info(`JWT count verified`);
|
|
||||||
done()
|
|
||||||
})
|
})
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
//Automagic Amazn redirects on /a/
|
//Automagic Amazn redirects on /a/
|
||||||
fastify.get('/a/:id', async (req, res) => {
|
fastify.get('/a/:id', async (req, res) => {
|
||||||
res.redirect(302, `https://amazon.de/dp/${req.params.id}`)
|
res.redirect(302, `https://amazon.de/dp/${req.params.id}`)
|
||||||
|
await knex('visits').insert({ shortcode: req.params.id, provider: 'a' });
|
||||||
})
|
})
|
||||||
|
|
||||||
//Automagic Youtube redirects on /yt/
|
//Automagic Youtube redirects on /yt/
|
||||||
fastify.get('/yt/:id', async (req, res) => {
|
fastify.get('/yt/:id', async (req, res) => {
|
||||||
res.redirect(302, `https://youtu.be/${req.params.id}`)
|
res.redirect(302, `https://youtu.be/${req.params.id}`)
|
||||||
|
await knex('visits').insert({ shortcode: req.params.id, provider: 'yt' });
|
||||||
})
|
})
|
||||||
//Automagic Youtube Playlist redirects on /ytpl/
|
//Automagic Youtube Playlist redirects on /ytpl/
|
||||||
fastify.get('/ytpl/:id', async (req, res) => {
|
fastify.get('/ytpl/:id', async (req, res) => {
|
||||||
res.redirect(302, `https://youtube.com/playlist?list=${req.params.id}`)
|
res.redirect(302, `https://youtube.com/playlist?list=${req.params.id}`)
|
||||||
|
await knex('visits').insert({ shortcode: req.params.id, provider: 'ytpl' });
|
||||||
})
|
})
|
||||||
|
|
||||||
//Automagic ebay item redirects on /e/
|
//Automagic ebay item redirects on /e/
|
||||||
fastify.get('/e/:id', async (req, res) => {
|
fastify.get('/e/:id', async (req, res) => {
|
||||||
res.redirect(302, `https://ebay.de/itm/${req.params.id}`)
|
res.redirect(302, `https://ebay.de/itm/${req.params.id}`)
|
||||||
|
await knex('visits').insert({ shortcode: req.params.id, provider: 'e' });
|
||||||
})
|
})
|
||||||
|
|
||||||
//Normal shorturls
|
//Normal shorturls
|
||||||
@@ -101,7 +111,7 @@ fastify.get('/:shortcode', async (req, res) => {
|
|||||||
return 404
|
return 404
|
||||||
}
|
}
|
||||||
res.redirect(302, target[0].target);
|
res.redirect(302, target[0].target);
|
||||||
await knex('visits').insert({ shortcode });
|
await knex('visits').insert({ shortcode, provider: 'native' });
|
||||||
})
|
})
|
||||||
|
|
||||||
//Create new url schema
|
//Create new url schema
|
||||||
@@ -266,15 +276,7 @@ fastify.after(() => {
|
|||||||
return 404;
|
return 404;
|
||||||
}
|
}
|
||||||
|
|
||||||
const exists = await knex.select('shortcode', 'target')
|
const visits = await knex.select('timestamp', 'provider')
|
||||||
.from('urls')
|
|
||||||
.where('shortcode', '=', shortcode)
|
|
||||||
.limit(1);
|
|
||||||
if (exists.length == 0) {
|
|
||||||
return 404;
|
|
||||||
}
|
|
||||||
|
|
||||||
const visits = await knex.select('timestamp')
|
|
||||||
.from('visits')
|
.from('visits')
|
||||||
.where('shortcode', '=', shortcode);
|
.where('shortcode', '=', shortcode);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user