Compare commits
	
		
			18 Commits
		
	
	
		
			0.7.0
			...
			0bb30ccc7b
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 0bb30ccc7b | |||
| 
						
						
							
						
						fd5142020d
	
				 | 
					
					
						|||
| 
						
						
							
						
						40f1ea4757
	
				 | 
					
					
						|||
| eb053df154 | |||
| 5b518c5884 | |||
| d320b20dfc | |||
| 6fd89b75ab | |||
| ae4a930ddb | |||
| bc466e7fd9 | |||
| 28087400b7 | |||
| 
						
						
							
						
						9cf8248522
	
				 | 
					
					
						|||
| 35fafa337b | |||
| d0eed67697 | |||
| 
						
						
							
						
						36ce64a79d
	
				 | 
					
					
						|||
| 4da3cea59f | |||
| 
						
						
							
						
						e06f9253cf
	
				 | 
					
					
						|||
| 
						
						
							
						
						93a931830f
	
				 | 
					
					
						|||
| 
						
						
							
						
						85249e83b1
	
				 | 
					
					
						
							
								
								
									
										24
									
								
								.drone.yml
									
									
									
									
									
								
							
							
						
						
									
										24
									
								
								.drone.yml
									
									
									
									
									
								
							@@ -12,6 +12,20 @@ get:
 | 
				
			|||||||
  path: odit-registry-builder
 | 
					  path: odit-registry-builder
 | 
				
			||||||
  name: password
 | 
					  name: password
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					kind: secret
 | 
				
			||||||
 | 
					name: npmjs_domain
 | 
				
			||||||
 | 
					get:
 | 
				
			||||||
 | 
					  path: odit-npm-bot
 | 
				
			||||||
 | 
					  name: domain
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					kind: secret
 | 
				
			||||||
 | 
					name: npmjs_token
 | 
				
			||||||
 | 
					get:
 | 
				
			||||||
 | 
					  path: odit-npm-bot
 | 
				
			||||||
 | 
					  name: token
 | 
				
			||||||
 | 
					
 | 
				
			||||||
---
 | 
					---
 | 
				
			||||||
kind: pipeline
 | 
					kind: pipeline
 | 
				
			||||||
type: kubernetes
 | 
					type: kubernetes
 | 
				
			||||||
@@ -30,6 +44,11 @@ steps:
 | 
				
			|||||||
      tags:
 | 
					      tags:
 | 
				
			||||||
        - latest
 | 
					        - latest
 | 
				
			||||||
      registry: registry.odit.services
 | 
					      registry: registry.odit.services
 | 
				
			||||||
 | 
					      build_args:
 | 
				
			||||||
 | 
					      - NPM_REGISTRY_DOMAIN:
 | 
				
			||||||
 | 
					        from_secret: npmjs_domain
 | 
				
			||||||
 | 
					      - NPM_REGISTRY_TOKEN:
 | 
				
			||||||
 | 
					        from_secret: npmjs_token
 | 
				
			||||||
      mtu: 1000
 | 
					      mtu: 1000
 | 
				
			||||||
    when:
 | 
					    when:
 | 
				
			||||||
      branch:
 | 
					      branch:
 | 
				
			||||||
@@ -53,6 +72,11 @@ steps:
 | 
				
			|||||||
      tags:
 | 
					      tags:
 | 
				
			||||||
        - '${DRONE_TAG}'
 | 
					        - '${DRONE_TAG}'
 | 
				
			||||||
      registry: registry.odit.services
 | 
					      registry: registry.odit.services
 | 
				
			||||||
 | 
					      build_args:
 | 
				
			||||||
 | 
					      - NPM_REGISTRY_DOMAIN:
 | 
				
			||||||
 | 
					        from_secret: npmjs_domain
 | 
				
			||||||
 | 
					      - NPM_REGISTRY_TOKEN:
 | 
				
			||||||
 | 
					        from_secret: npmjs_token
 | 
				
			||||||
      mtu: 1000
 | 
					      mtu: 1000
 | 
				
			||||||
trigger:
 | 
					trigger:
 | 
				
			||||||
  event:
 | 
					  event:
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										33
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										33
									
								
								CHANGELOG.md
									
									
									
									
									
								
							@@ -2,9 +2,42 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
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.8.0](https://git.odit.services/kauft.es/linkylinky/compare/0.7.2...0.8.0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Added badge-maker dependency [`40f1ea4`](https://git.odit.services/kauft.es/linkylinky/commit/40f1ea47574cd0cf2ab7ea28d9cd70243da40f27)
 | 
				
			||||||
 | 
					- Added BADGE API endpoint (no auth needed) [`fd51420`](https://git.odit.services/kauft.es/linkylinky/commit/fd5142020d46a6117f0f00302690511e18d67d14)
 | 
				
			||||||
 | 
					- Merge pull request 'Update dependency dotenv to v15' (#19) from renovate/dotenv-15.x into main [`eb053df`](https://git.odit.services/kauft.es/linkylinky/commit/eb053df154e4598da46c275435a4b1bb9b133119)
 | 
				
			||||||
 | 
					- Update dependency dotenv to v15 [`5b518c5`](https://git.odit.services/kauft.es/linkylinky/commit/5b518c58848899da19f50d4d9517ef7749ec26a5)
 | 
				
			||||||
 | 
					- Merge pull request 'Update dependency dotenv to v14' (#18) from renovate/dotenv-14.x into main [`d320b20`](https://git.odit.services/kauft.es/linkylinky/commit/d320b20dfca67a79b83caf10735f367aafad7fbb)
 | 
				
			||||||
 | 
					- Merge pull request 'Update dependency knex to v0.95.15' (#16) from renovate/knex-0.x into main [`6fd89b7`](https://git.odit.services/kauft.es/linkylinky/commit/6fd89b75abbaac37435f8556da2db2d262d7ede4)
 | 
				
			||||||
 | 
					- Update dependency dotenv to v14 [`ae4a930`](https://git.odit.services/kauft.es/linkylinky/commit/ae4a930ddb9bafd89967235342a2ad3954e53e13)
 | 
				
			||||||
 | 
					- Update dependency knex to v0.95.15 [`bc466e7`](https://git.odit.services/kauft.es/linkylinky/commit/bc466e7fd97d5292c6a00a36b3abce147c862c6b)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#### [0.7.2](https://git.odit.services/kauft.es/linkylinky/compare/0.7.1...0.7.2)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					> 16 January 2022
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- 🚀RELEASE 0.7.2 [`2808740`](https://git.odit.services/kauft.es/linkylinky/commit/28087400b79d6790939db34a814850df04364947)
 | 
				
			||||||
 | 
					- Pinned knex version (thx sqlite) [`9cf8248`](https://git.odit.services/kauft.es/linkylinky/commit/9cf8248522b31e14c4f6f304f620a3040cc2f496)
 | 
				
			||||||
 | 
					- Merge pull request 'Update dependency dotenv to v12' (#14) from renovate/dotenv-12.x into main [`35fafa3`](https://git.odit.services/kauft.es/linkylinky/commit/35fafa337b81ad79a9f0f3501624ece40bda7967)
 | 
				
			||||||
 | 
					- Docker speedbuild [`36ce64a`](https://git.odit.services/kauft.es/linkylinky/commit/36ce64a79dec5e98dbc90f5d9dbb366bbaaed049)
 | 
				
			||||||
 | 
					- Update dependency dotenv to v12 [`d0eed67`](https://git.odit.services/kauft.es/linkylinky/commit/d0eed676971488b2207a05b2200283033d132cba)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#### [0.7.1](https://git.odit.services/kauft.es/linkylinky/compare/0.7.0...0.7.1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					> 12 January 2022
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Added examples to readme [`93a9318`](https://git.odit.services/kauft.es/linkylinky/commit/93a931830f853cea4502b9c74e0d74202efb23ce)
 | 
				
			||||||
 | 
					- 🚀RELEASE 0.7.1 [`4da3cea`](https://git.odit.services/kauft.es/linkylinky/commit/4da3cea59f69fe7714323935d2f2e14ba3210f13)
 | 
				
			||||||
 | 
					- Updated readme w/ native provider [`85249e8`](https://git.odit.services/kauft.es/linkylinky/commit/85249e83b1ec349d740d72394dfbda4ab4d5984e)
 | 
				
			||||||
 | 
					- Smol bugfix [`e06f925`](https://git.odit.services/kauft.es/linkylinky/commit/e06f9253cf39cd76205da448e6758ca3b51130d6)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#### [0.7.0](https://git.odit.services/kauft.es/linkylinky/compare/0.6.1...0.7.0)
 | 
					#### [0.7.0](https://git.odit.services/kauft.es/linkylinky/compare/0.6.1...0.7.0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					> 12 January 2022
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- Push w/o lockfile [`231d8ca`](https://git.odit.services/kauft.es/linkylinky/commit/231d8ca7ee0da402322afd3ac8ddce58e14943c1)
 | 
					- Push w/o lockfile [`231d8ca`](https://git.odit.services/kauft.es/linkylinky/commit/231d8ca7ee0da402322afd3ac8ddce58e14943c1)
 | 
				
			||||||
 | 
					- 🚀RELEASE 0.7.0 [`4ee8de4`](https://git.odit.services/kauft.es/linkylinky/commit/4ee8de47cf227a58e8d2a2eedfc06575a1e5a1c0)
 | 
				
			||||||
- Added the new providers to the readme [`8abaabb`](https://git.odit.services/kauft.es/linkylinky/commit/8abaabbe5170372ca35ff469cee25c65a8f3d729)
 | 
					- Added the new providers to the readme [`8abaabb`](https://git.odit.services/kauft.es/linkylinky/commit/8abaabbe5170372ca35ff469cee25c65a8f3d729)
 | 
				
			||||||
- Implemented reddit name recognition [`7211133`](https://git.odit.services/kauft.es/linkylinky/commit/7211133aba22315919443d5314594b7ec027c02b)
 | 
					- Implemented reddit name recognition [`7211133`](https://git.odit.services/kauft.es/linkylinky/commit/7211133aba22315919443d5314594b7ec027c02b)
 | 
				
			||||||
- Now recognizing r/ pattern [`0fa043f`](https://git.odit.services/kauft.es/linkylinky/commit/0fa043f0dfbae8b4095375b39c220a901cc6051f)
 | 
					- Now recognizing r/ pattern [`0fa043f`](https://git.odit.services/kauft.es/linkylinky/commit/0fa043f0dfbae8b4095375b39c220a901cc6051f)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,14 +1,15 @@
 | 
				
			|||||||
FROM registry.odit.services/hub/library/node:17.0.1-alpine3.14
 | 
					FROM registry.odit.services/hub/library/node:17.0.1-alpine3.14
 | 
				
			||||||
 | 
					ARG NPM_REGISTRY_DOMAIN=registry.npmjs.org
 | 
				
			||||||
 | 
					ARG NPM_REGISTRY_TOKEN=null
 | 
				
			||||||
WORKDIR /app
 | 
					WORKDIR /app
 | 
				
			||||||
COPY package.json .
 | 
					COPY package.json .
 | 
				
			||||||
# COPY yarn.lock .
 | 
					RUN npm config set registry https://$NPM_REGISTRY_DOMAIN && npm config set //$NPM_REGISTRY_DOMAIN/:_authToken $NPM_REGISTRY_TOKEN
 | 
				
			||||||
RUN yarn --production --frozen-lockfile
 | 
					RUN npm i -g pnpm && pnpm i
 | 
				
			||||||
COPY migrations ./migrations
 | 
					COPY migrations ./migrations
 | 
				
			||||||
COPY src ./src
 | 
					COPY src ./src
 | 
				
			||||||
COPY knexfile.js ./
 | 
					COPY knexfile.js ./
 | 
				
			||||||
RUN mkdir db
 | 
					RUN mkdir db
 | 
				
			||||||
# 
 | 
					
 | 
				
			||||||
# FROM astefanutti/scratch-node:16.0.0
 | 
					 | 
				
			||||||
FROM registry.odit.services/hub/library/node:17.0.1-alpine3.14
 | 
					FROM registry.odit.services/hub/library/node:17.0.1-alpine3.14
 | 
				
			||||||
WORKDIR /app
 | 
					WORKDIR /app
 | 
				
			||||||
COPY --from=0 /app /app
 | 
					COPY --from=0 /app /app
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										16
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								README.md
									
									
									
									
									
								
							@@ -9,14 +9,16 @@
 | 
				
			|||||||
* Special shortening "providers" for well-used services
 | 
					* Special shortening "providers" for well-used services
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Provider patterns
 | 
					### Provider patterns
 | 
				
			||||||
 | 
					> The base pattern is always baseurl/providerOrShortCode
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| Provider | Pattern | Resolves to | Notes |
 | 
					| Provider | Pattern | Resolves to | Example | Notes |
 | 
				
			||||||
| - | - | - | - |
 | 
					| - | - | - | - | - |
 | 
				
			||||||
| YouTube (Video) | `/yt/id` | `https://youtu.be/id` | None |
 | 
					| Native (Shortcode) | `/id` | Whatever the database entry points to | https://kauft.es/den-hut | None |
 | 
				
			||||||
| YouTube (Playlist) | `/ytpl/id` | `https://youtube.com/playlist?list=id` | Remember: Private playlists will result in user-side errors |
 | 
					| YouTube (Video) | `/yt/id` | `https://youtu.be/id` | https://kauft.es/yt/dQw4w9WgXcQ | None |
 | 
				
			||||||
| Amazon | `/a/id` | `https://amazon.de/dp/id` | Recognizes all kind of cursed amazon urls (+smile and others) |
 | 
					| YouTube (Playlist) | `/ytpl/id` | `https://youtube.com/playlist?list=id` | https://kauft.es/ytpl/PLKIxB9vhdS_3x0A5za3mmu1wdoolgRQ65 | Remember: Private playlists will result in user-side errors |
 | 
				
			||||||
| eBay | `/e/id` | `https://ebay.de/itm/` | Only tested with German eBay |
 | 
					| Amazon | `/a/id` | `https://amazon.de/dp/id` | https://kauft.es/a/B08Z2TXCPY | Recognizes all kind of cursed amazon urls (+smile and others) |
 | 
				
			||||||
| Reddit | `/r/id` | `https://redd.it/` | Powered by the awesome work of u/TheAppleFreak https://kauf.es/r/4vaqiw |
 | 
					| eBay | `/e/id` | `https://ebay.de/itm/id` | https://kauft.es/e/373831556670 | Only tested with German eBay |
 | 
				
			||||||
 | 
					| Reddit | `/r/id` | `https://redd.it/id` | https://kauft.es/r/4vapin | Powered by the awesome work of u/TheAppleFreak https://kauft.es/r/4vapin |
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Dev Setup 🛠
 | 
					## Dev Setup 🛠
 | 
				
			||||||
> Runs on port 3000
 | 
					> Runs on port 3000
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  "name": "@odit/shortener-backend",
 | 
					  "name": "@odit/shortener-backend",
 | 
				
			||||||
  "version": "0.7.0",
 | 
					  "version": "0.8.0",
 | 
				
			||||||
  "main": "index.js",
 | 
					  "main": "index.js",
 | 
				
			||||||
  "license": "MIT",
 | 
					  "license": "MIT",
 | 
				
			||||||
  "private": false,
 | 
					  "private": false,
 | 
				
			||||||
@@ -25,14 +25,15 @@
 | 
				
			|||||||
  },
 | 
					  },
 | 
				
			||||||
  "dependencies": {
 | 
					  "dependencies": {
 | 
				
			||||||
    "argon2": "^0.28.2",
 | 
					    "argon2": "^0.28.2",
 | 
				
			||||||
    "dotenv": "^11.0.0",
 | 
					    "badge-maker": "^3.3.1",
 | 
				
			||||||
 | 
					    "dotenv": "^15.0.0",
 | 
				
			||||||
    "fastify": "^3.20.1",
 | 
					    "fastify": "^3.20.1",
 | 
				
			||||||
    "fastify-auth": "^1.1.0",
 | 
					    "fastify-auth": "^1.1.0",
 | 
				
			||||||
    "fastify-basic-auth": "^2.1.0",
 | 
					    "fastify-basic-auth": "^2.1.0",
 | 
				
			||||||
    "fastify-cors": "^6.0.2",
 | 
					    "fastify-cors": "^6.0.2",
 | 
				
			||||||
    "fastify-jwt": "^4.0.0",
 | 
					    "fastify-jwt": "^4.0.0",
 | 
				
			||||||
    "isbot": "^3.3.3",
 | 
					    "isbot": "^3.3.3",
 | 
				
			||||||
    "knex": "^0.95.0",
 | 
					    "knex": "0.95.15",
 | 
				
			||||||
    "sqlite3": "^5.0.2",
 | 
					    "sqlite3": "^5.0.2",
 | 
				
			||||||
    "uniqid": "^5.3.0"
 | 
					    "uniqid": "^5.3.0"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,6 +3,7 @@ var uniqid = require('uniqid');
 | 
				
			|||||||
require('dotenv').config();
 | 
					require('dotenv').config();
 | 
				
			||||||
const argon2 = require('argon2');
 | 
					const argon2 = require('argon2');
 | 
				
			||||||
const isBot = require('isbot')
 | 
					const isBot = require('isbot')
 | 
				
			||||||
 | 
					const { makeBadge, ValidationError } = require('badge-maker')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
let config = {
 | 
					let config = {
 | 
				
			||||||
    domain: process.env.DOMAIN || "localhost:3000",
 | 
					    domain: process.env.DOMAIN || "localhost:3000",
 | 
				
			||||||
@@ -259,6 +260,40 @@ fastify.get('/api/:shortcode', async (req, res) => {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//Get url api route
 | 
				
			||||||
 | 
					fastify.get('/api/badge/:shortcode', async (req, res) => {
 | 
				
			||||||
 | 
					    const shortcode = req.params.shortcode;
 | 
				
			||||||
 | 
					    const label = req.query.label || 'vists';
 | 
				
			||||||
 | 
					    const color = req.query.color || 'green';
 | 
				
			||||||
 | 
					    const style = req.query.style || 'for-the-badge';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    //This should never happen but better safe than 500
 | 
				
			||||||
 | 
					    if (!shortcode) {
 | 
				
			||||||
 | 
					        return 404;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const exists = await knex.select('shortcode', 'target', 'no_preview', 'clientside')
 | 
				
			||||||
 | 
					        .from('urls')
 | 
				
			||||||
 | 
					        .where('shortcode', '=', shortcode)
 | 
				
			||||||
 | 
					        .limit(1);
 | 
				
			||||||
 | 
					    if (exists.length == 0) {
 | 
				
			||||||
 | 
					        return 404;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const visits = await knex.select('timestamp')
 | 
				
			||||||
 | 
					        .from('visits')
 | 
				
			||||||
 | 
					        .where('shortcode', '=', shortcode);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const format = {
 | 
				
			||||||
 | 
					        label,
 | 
				
			||||||
 | 
					        message: visits.length.toString(),
 | 
				
			||||||
 | 
					        color,
 | 
				
			||||||
 | 
					        style
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    res.type('image/svg+xml')
 | 
				
			||||||
 | 
					    return makeBadge(format);
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//User registration
 | 
					//User registration
 | 
				
			||||||
fastify.post('/api/auth/register', async (req, res) => {
 | 
					fastify.post('/api/auth/register', async (req, res) => {
 | 
				
			||||||
@@ -445,7 +480,7 @@ function checkKnownProviders(target) {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const redditID = target.match(/(((((?:https?:)?\/\/)((?!about\.)[\w-]+?\.)?([rc]edd(?:it\.com|\.it)))(?!\/(?:blog|about|code|advertising|jobs|rules|wiki|contact|buttons|gold|page|help|prefs|user|message|widget)\b)((?:\/r\/[\w-]+\b(?<!\/pcmasterrace))|(?:\/tb))?(\/comments)??(\/\w{2,7}\b(?<!\/46ijrl)(?<!\/wiki))((?:(?!\))\S)*)))/);
 | 
					    const redditID = target.match(/(((((?:https?:)?\/\/)((?!about\.)[\w-]+?\.)?([rc]edd(?:it\.com|\.it)))(?!\/(?:blog|about|code|advertising|jobs|rules|wiki|contact|buttons|gold|page|help|prefs|user|message|widget)\b)((?:\/r\/[\w-]+\b(?<!\/pcmasterrace))|(?:\/tb))?(\/comments)??(\/\w{2,7}\b(?<!\/46ijrl)(?<!\/wiki))((?:(?!\))\S)*)))/);
 | 
				
			||||||
    if (redditID[9]) {
 | 
					    if (redditID) {
 | 
				
			||||||
        const shortcode = `r${redditID[9]}`
 | 
					        const shortcode = `r${redditID[9]}`
 | 
				
			||||||
        return {
 | 
					        return {
 | 
				
			||||||
            url: `${config.getBaseUrl()}/${shortcode}`,
 | 
					            url: `${config.getBaseUrl()}/${shortcode}`,
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user