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,11 +45,14 @@ 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"));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        else {
 | 
				
			||||||
 | 
					            if (!decoded.payload) {
 | 
				
			||||||
 | 
					                done(new Error("JWT is empty"));
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            fastify.log.info(`Token verified. User is ${decoded.payload.user}`);
 | 
					            fastify.log.info(`Token verified. User is ${decoded.payload.user}`);
 | 
				
			||||||
        request.user = decoded.payload.user;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
            const jwtcount = (await knex.select('jwtcount')
 | 
					            const jwtcount = (await knex.select('jwtcount')
 | 
				
			||||||
                .from('users')
 | 
					                .from('users')
 | 
				
			||||||
@@ -60,29 +63,36 @@ fastify.decorate('verifyJWT', function async(request, reply, done) {
 | 
				
			|||||||
                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`);
 | 
					                fastify.log.info(`JWT count verified`);
 | 
				
			||||||
 | 
					                request.user = decoded.payload.user;
 | 
				
			||||||
                done()
 | 
					                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