31 Commits

Author SHA1 Message Date
0bb30ccc7b 🚀RELEASE 0.8.0
All checks were successful
continuous-integration/drone/push Build is passing
2022-02-02 15:33:38 +01:00
fd5142020d Added BADGE API endpoint (no auth needed)
All checks were successful
continuous-integration/drone/push Build is passing
2022-02-02 15:25:55 +01:00
40f1ea4757 Added badge-maker dependency 2022-02-02 15:24:59 +01:00
eb053df154 Merge pull request 'Update dependency dotenv to v15' (#19) from renovate/dotenv-15.x into main
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #19
2022-02-01 20:34:58 +00:00
5b518c5884 Update dependency dotenv to v15
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2022-01-31 05:17:19 +00:00
d320b20dfc Merge pull request 'Update dependency dotenv to v14' (#18) from renovate/dotenv-14.x into main
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #18
2022-01-17 16:39:02 +00:00
6fd89b75ab Merge pull request 'Update dependency knex to v0.95.15' (#16) from renovate/knex-0.x into main
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #16
2022-01-17 16:38:40 +00:00
ae4a930ddb Update dependency dotenv to v14
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2022-01-17 04:01:54 +00:00
bc466e7fd9 Update dependency knex to v0.95.15
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2022-01-16 17:02:25 +00:00
28087400b7 🚀RELEASE 0.7.2
All checks were successful
continuous-integration/drone/push Build is passing
2022-01-16 17:57:33 +01:00
9cf8248522 Pinned knex version (thx sqlite) 2022-01-16 17:57:07 +01:00
35fafa337b Merge pull request 'Update dependency dotenv to v12' (#14) from renovate/dotenv-12.x into main
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #14
2022-01-15 11:56:58 +00:00
d0eed67697 Update dependency dotenv to v12
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2022-01-15 00:01:56 +00:00
36ce64a79d Docker speedbuild
All checks were successful
continuous-integration/drone/push Build is passing
2022-01-12 18:26:49 +01:00
4da3cea59f 🚀RELEASE 0.7.1
All checks were successful
continuous-integration/drone/push Build is passing
2022-01-12 18:19:24 +01:00
e06f9253cf Smol bugfix 2022-01-12 18:19:15 +01:00
93a931830f Added examples to readme
All checks were successful
continuous-integration/drone/push Build is passing
2022-01-12 18:17:50 +01:00
85249e83b1 Updated readme w/ native provider
All checks were successful
continuous-integration/drone/push Build is passing
2022-01-12 18:12:33 +01:00
4ee8de47cf 🚀RELEASE 0.7.0
All checks were successful
continuous-integration/drone/push Build is passing
2022-01-12 18:04:27 +01:00
8abaabbe51 Added the new providers to the readme 2022-01-12 18:04:14 +01:00
0fa043f0df Now recognizing r/ pattern
All checks were successful
continuous-integration/drone/push Build is passing
2022-01-12 17:54:50 +01:00
7211133aba Implemented reddit name recognition 2022-01-12 17:51:21 +01:00
d957ca52ea Removed yarn lock copy
All checks were successful
continuous-integration/drone/push Build is passing
2022-01-12 17:40:29 +01:00
231d8ca7ee Push w/o lockfile
Some checks failed
continuous-integration/drone/push Build is failing
2022-01-12 17:33:48 +01:00
4a476e93af 🚀RELEASE 0.6.1
Some checks failed
continuous-integration/drone/push Build is failing
2022-01-12 17:31:58 +01:00
3bfcd64589 Merge pull request 'Update dependency fastify-jwt to v4' (#12) from renovate/fastify-jwt-4.x into main
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #12
2022-01-12 16:30:00 +00:00
d17825cabf 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
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #11
2022-01-12 16:29:36 +00:00
6205151d53 Merge pull request 'Update dependency dotenv to v11' (#13) from renovate/dotenv-11.x into main
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #13
2022-01-12 16:29:24 +00:00
4861ca7f3e Update dependency dotenv to v11
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2022-01-11 07:02:02 +00:00
575685f24d Update dependency fastify-jwt to v4
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2021-11-25 09:00:46 +00:00
0e9f7a526c Update registry.odit.services/hub/library/node Docker tag to v17
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
2021-11-18 19:00:32 +00:00
7 changed files with 766 additions and 651 deletions

View File

@@ -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:

View File

@@ -2,8 +2,73 @@
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)
> 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)
- 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)
#### [0.6.0](https://git.odit.services/kauft.es/linkylinky/compare/0.5.1...0.6.0)
> 25 September 2021
- 🚀RELEASE 0.6.0 [`3803ac9`](https://git.odit.services/kauft.es/linkylinky/commit/3803ac9197a1d4c6535606cde43b1e04b3056f9c)
- Now with custom opengraph (tm) [`9d7125a`](https://git.odit.services/kauft.es/linkylinky/commit/9d7125a31186f3b7f33df4875db12c67cf91f536)
- Added rudementary page content [`e1621b7`](https://git.odit.services/kauft.es/linkylinky/commit/e1621b72ade1fce381f30bcf310a6dcf8d1c65ea)
- Added migration for disallowing bot previews [`0a500f1`](https://git.odit.services/kauft.es/linkylinky/commit/0a500f16cde0b0e38a115dd4e76185a2a45dda49)

View File

@@ -1,15 +1,16 @@
FROM registry.odit.services/hub/library/node:16.6.2-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
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:16.6.2-alpine3.14
FROM registry.odit.services/hub/library/node:17.0.1-alpine3.14
WORKDIR /app
COPY --from=0 /app /app
ENV NODE_ENV production

View File

@@ -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

View File

@@ -1,6 +1,6 @@
{
"name": "@odit/shortener-backend",
"version": "0.6.0",
"version": "0.8.0",
"main": "index.js",
"license": "MIT",
"private": false,
@@ -25,14 +25,15 @@
},
"dependencies": {
"argon2": "^0.28.2",
"dotenv": "^10.0.0",
"badge-maker": "^3.3.1",
"dotenv": "^15.0.0",
"fastify": "^3.20.1",
"fastify-auth": "^1.1.0",
"fastify-basic-auth": "^2.1.0",
"fastify-cors": "^6.0.2",
"fastify-jwt": "^3.0.1",
"fastify-jwt": "^4.0.0",
"isbot": "^3.3.3",
"knex": "^0.95.0",
"knex": "0.95.15",
"sqlite3": "^5.0.2",
"uniqid": "^5.3.0"
},

View File

@@ -3,6 +3,7 @@ var uniqid = require('uniqid');
require('dotenv').config();
const argon2 = require('argon2');
const isBot = require('isbot')
const { makeBadge, ValidationError } = require('badge-maker')
let config = {
domain: process.env.DOMAIN || "localhost:3000",
@@ -96,6 +97,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;
@@ -253,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
fastify.post('/api/auth/register', async (req, res) => {
@@ -437,6 +478,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;
}

1239
yarn.lock

File diff suppressed because it is too large Load Diff