Compare commits
	
		
			15 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 28087400b7 | |||
| 
						
						
							
						
						9cf8248522
	
				 | 
					
					
						|||
| 35fafa337b | |||
| d0eed67697 | |||
| 
						
						
							
						
						36ce64a79d
	
				 | 
					
					
						|||
| 4da3cea59f | |||
| 
						
						
							
						
						e06f9253cf
	
				 | 
					
					
						|||
| 
						
						
							
						
						93a931830f
	
				 | 
					
					
						|||
| 
						
						
							
						
						85249e83b1
	
				 | 
					
					
						|||
| 4ee8de47cf | |||
| 
						
						
							
						
						8abaabbe51
	
				 | 
					
					
						|||
| 
						
						
							
						
						0fa043f0df
	
				 | 
					
					
						|||
| 
						
						
							
						
						7211133aba
	
				 | 
					
					
						|||
| 
						
						
							
						
						d957ca52ea
	
				 | 
					
					
						|||
| 
						
						
							
						
						231d8ca7ee
	
				 | 
					
					
						
							
								
								
									
										24
									
								
								.drone.yml
									
									
									
									
									
								
							
							
						
						
									
										24
									
								
								.drone.yml
									
									
									
									
									
								
							@@ -12,6 +12,20 @@ get:
 | 
			
		||||
  path: odit-registry-builder
 | 
			
		||||
  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
 | 
			
		||||
type: kubernetes
 | 
			
		||||
@@ -30,6 +44,11 @@ steps:
 | 
			
		||||
      tags:
 | 
			
		||||
        - latest
 | 
			
		||||
      registry: registry.odit.services
 | 
			
		||||
      build_args:
 | 
			
		||||
      - NPM_REGISTRY_DOMAIN:
 | 
			
		||||
        from_secret: npmjs_domain
 | 
			
		||||
      - NPM_REGISTRY_TOKEN:
 | 
			
		||||
        from_secret: npmjs_token
 | 
			
		||||
      mtu: 1000
 | 
			
		||||
    when:
 | 
			
		||||
      branch:
 | 
			
		||||
@@ -53,6 +72,11 @@ steps:
 | 
			
		||||
      tags:
 | 
			
		||||
        - '${DRONE_TAG}'
 | 
			
		||||
      registry: registry.odit.services
 | 
			
		||||
      build_args:
 | 
			
		||||
      - NPM_REGISTRY_DOMAIN:
 | 
			
		||||
        from_secret: npmjs_domain
 | 
			
		||||
      - NPM_REGISTRY_TOKEN:
 | 
			
		||||
        from_secret: npmjs_token
 | 
			
		||||
      mtu: 1000
 | 
			
		||||
trigger:
 | 
			
		||||
  event:
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										32
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										32
									
								
								CHANGELOG.md
									
									
									
									
									
								
							@@ -2,21 +2,51 @@
 | 
			
		||||
 | 
			
		||||
All notable changes to this project will be documented in this file. Dates are displayed in UTC.
 | 
			
		||||
 | 
			
		||||
#### [0.7.2](https://git.odit.services/kauft.es/linkylinky/compare/0.7.1...0.7.2)
 | 
			
		||||
 | 
			
		||||
- 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)
 | 
			
		||||
 | 
			
		||||
> 12 January 2022
 | 
			
		||||
 | 
			
		||||
- 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)
 | 
			
		||||
- 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)
 | 
			
		||||
- Removed yarn lock copy [`d957ca5`](https://git.odit.services/kauft.es/linkylinky/commit/d957ca52ea2332f6cd1c5608467be6245f5082b8)
 | 
			
		||||
 | 
			
		||||
#### [0.6.1](https://git.odit.services/kauft.es/linkylinky/compare/0.6.0...0.6.1)
 | 
			
		||||
 | 
			
		||||
> 12 January 2022
 | 
			
		||||
 | 
			
		||||
- Working clientside stuff [`#3`](https://git.odit.services/kauft.es/linkylinky/issues/3)
 | 
			
		||||
- 🚀RELEASE 0.6.1 [`4a476e9`](https://git.odit.services/kauft.es/linkylinky/commit/4a476e93af43c8920448fcfeff3f13edc0bc0681)
 | 
			
		||||
- Merge pull request 'Update dependency fastify-jwt to v4' (#12) from renovate/fastify-jwt-4.x into main [`3bfcd64`](https://git.odit.services/kauft.es/linkylinky/commit/3bfcd645890253813cc2e4c740f67d577682934b)
 | 
			
		||||
- Merge pull request 'Update registry.odit.services/hub/library/node Docker tag to v17' (#11) from renovate/registry.odit.services-hub-library-node-17.x into main [`d17825c`](https://git.odit.services/kauft.es/linkylinky/commit/d17825cabf2d46d040bd33a3d1ad5a9d0bccfbe5)
 | 
			
		||||
- Merge pull request 'Update dependency dotenv to v11' (#13) from renovate/dotenv-11.x into main [`6205151`](https://git.odit.services/kauft.es/linkylinky/commit/6205151d53b374d890276d294d0abc6e6114abe5)
 | 
			
		||||
- Update dependency knex to ^0.95.0 [`2b93f3e`](https://git.odit.services/kauft.es/linkylinky/commit/2b93f3ea8a9b2f4be73829fb1041e6233d81fa91)
 | 
			
		||||
- Preleminary emoji support [`3ca5f6b`](https://git.odit.services/kauft.es/linkylinky/commit/3ca5f6b3b468ca739bc77e1d9b751625e03f300d)
 | 
			
		||||
- Update dependency fastify-jwt to v4 [`575685f`](https://git.odit.services/kauft.es/linkylinky/commit/575685f24d1d0a2c0574741e540f448642990cd5)
 | 
			
		||||
- Added 'clientside' flag to getters and setters [`11bd1b4`](https://git.odit.services/kauft.es/linkylinky/commit/11bd1b4f1f4d079b3ca047472da9da34fb64732d)
 | 
			
		||||
- Update dependency dotenv to v11 [`4861ca7`](https://git.odit.services/kauft.es/linkylinky/commit/4861ca7f3e3ed3e62ee774d59cb13a38d5e5e1e1)
 | 
			
		||||
- Update registry.odit.services/hub/library/node Docker tag to v17 [`0e9f7a5`](https://git.odit.services/kauft.es/linkylinky/commit/0e9f7a526ce5188e964e7beb78a5fb63870b473f)
 | 
			
		||||
- Enabled dep dashboard [`efb11f6`](https://git.odit.services/kauft.es/linkylinky/commit/efb11f6047e37901e20c613393d435f869e8a1f9)
 | 
			
		||||
- Merge pull request 'Update dependency knex to ^0.95.0' (#5) from renovate/knex-0.x into main [`e95ca80`](https://git.odit.services/kauft.es/linkylinky/commit/e95ca8045af6afcbc9dfcc9976d107a231d12953)
 | 
			
		||||
- Merge pull request 'Configure Renovate' (#4) from renovate/configure into main [`2a7a32f`](https://git.odit.services/kauft.es/linkylinky/commit/2a7a32fda615fa01751deffadafa6df1a5d0fede)
 | 
			
		||||
- Added 'clientside' flag to getters and setters [`11bd1b4`](https://git.odit.services/kauft.es/linkylinky/commit/11bd1b4f1f4d079b3ca047472da9da34fb64732d)
 | 
			
		||||
- Added migration for clientside redirects [`e321408`](https://git.odit.services/kauft.es/linkylinky/commit/e3214084f6dbf3e1595c54a9594e6d5f12323991)
 | 
			
		||||
- Add renovate.json [`d7428af`](https://git.odit.services/kauft.es/linkylinky/commit/d7428af1d81c820fdca7220959485f361956b86e)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,14 +1,15 @@
 | 
			
		||||
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
 | 
			
		||||
COPY package.json .
 | 
			
		||||
COPY yarn.lock .
 | 
			
		||||
RUN yarn --production --frozen-lockfile
 | 
			
		||||
RUN npm config set registry https://$NPM_REGISTRY_DOMAIN && npm config set //$NPM_REGISTRY_DOMAIN/:_authToken $NPM_REGISTRY_TOKEN
 | 
			
		||||
RUN npm i -g pnpm && pnpm i
 | 
			
		||||
COPY migrations ./migrations
 | 
			
		||||
COPY src ./src
 | 
			
		||||
COPY knexfile.js ./
 | 
			
		||||
RUN mkdir db
 | 
			
		||||
# 
 | 
			
		||||
# FROM astefanutti/scratch-node:16.0.0
 | 
			
		||||
 | 
			
		||||
FROM registry.odit.services/hub/library/node:17.0.1-alpine3.14
 | 
			
		||||
WORKDIR /app
 | 
			
		||||
COPY --from=0 /app /app
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										16
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								README.md
									
									
									
									
									
								
							@@ -4,6 +4,22 @@
 | 
			
		||||
  <h3 align="center">A small url shortener, originaly developed for kauft.es</h3>
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
## Features
 | 
			
		||||
* Url shortinging to 18-byte hex ids
 | 
			
		||||
* Special shortening "providers" for well-used services
 | 
			
		||||
 | 
			
		||||
### Provider patterns
 | 
			
		||||
> The base pattern is always baseurl/providerOrShortCode
 | 
			
		||||
 | 
			
		||||
| Provider | Pattern | Resolves to | Example | Notes |
 | 
			
		||||
| - | - | - | - | - |
 | 
			
		||||
| Native (Shortcode) | `/id` | Whatever the database entry points to | https://kauft.es/den-hut | None |
 | 
			
		||||
| YouTube (Video) | `/yt/id` | `https://youtu.be/id` | https://kauft.es/yt/dQw4w9WgXcQ | None |
 | 
			
		||||
| 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 |
 | 
			
		||||
| Amazon | `/a/id` | `https://amazon.de/dp/id` | https://kauft.es/a/B08Z2TXCPY | Recognizes all kind of cursed amazon urls (+smile and others) |
 | 
			
		||||
| 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 🛠
 | 
			
		||||
> Runs on port 3000
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "@odit/shortener-backend",
 | 
			
		||||
  "version": "0.6.1",
 | 
			
		||||
  "version": "0.7.2",
 | 
			
		||||
  "main": "index.js",
 | 
			
		||||
  "license": "MIT",
 | 
			
		||||
  "private": false,
 | 
			
		||||
@@ -25,14 +25,14 @@
 | 
			
		||||
  },
 | 
			
		||||
  "dependencies": {
 | 
			
		||||
    "argon2": "^0.28.2",
 | 
			
		||||
    "dotenv": "^11.0.0",
 | 
			
		||||
    "dotenv": "^12.0.0",
 | 
			
		||||
    "fastify": "^3.20.1",
 | 
			
		||||
    "fastify-auth": "^1.1.0",
 | 
			
		||||
    "fastify-basic-auth": "^2.1.0",
 | 
			
		||||
    "fastify-cors": "^6.0.2",
 | 
			
		||||
    "fastify-jwt": "^4.0.0",
 | 
			
		||||
    "isbot": "^3.3.3",
 | 
			
		||||
    "knex": "^0.95.0",
 | 
			
		||||
    "knex": "0.95.0",
 | 
			
		||||
    "sqlite3": "^5.0.2",
 | 
			
		||||
    "uniqid": "^5.3.0"
 | 
			
		||||
  },
 | 
			
		||||
 
 | 
			
		||||
@@ -96,6 +96,12 @@ fastify.get('/e/:id', async (req, res) => {
 | 
			
		||||
    await knex('visits').insert({ shortcode: req.params.id, provider: 'e' });
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
//Automagic reddit redirects on /r/
 | 
			
		||||
fastify.get('/r/:id', async (req, res) => {
 | 
			
		||||
    res.redirect(302, `https://redd.it/${req.params.id}`)
 | 
			
		||||
    await knex('visits').insert({ shortcode: req.params.id, provider: 'r' });
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
//Normal shorturls
 | 
			
		||||
fastify.get('/:shortcode', async (req, res) => {
 | 
			
		||||
    const shortcode = req.params.shortcode;
 | 
			
		||||
@@ -437,6 +443,16 @@ function checkKnownProviders(target) {
 | 
			
		||||
            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)*)))/);
 | 
			
		||||
    if (redditID) {
 | 
			
		||||
        const shortcode = `r${redditID[9]}`
 | 
			
		||||
        return {
 | 
			
		||||
            url: `${config.getBaseUrl()}/${shortcode}`,
 | 
			
		||||
            shortcode,
 | 
			
		||||
            target
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return null;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user