15 Commits
0.1.1 ... 0.2.0

Author SHA1 Message Date
72932955d1 🚀RELEASE 0.2.0
All checks were successful
continuous-integration/drone/push Build is passing
2021-08-14 15:48:18 +02:00
339e2f39d8 Ebay provider resolution 2021-08-14 15:47:58 +02:00
12c6d7e3da Added ebay provider recognition 2021-08-14 15:47:03 +02:00
1624e666e8 Now recognizing with and without protocol 2021-08-14 15:46:14 +02:00
86f4cd00ea 🚀RELEASE 0.1.4
All checks were successful
continuous-integration/drone/push Build is passing
2021-08-14 14:19:30 +02:00
518aa3eb08 Added cors 2021-08-14 14:19:08 +02:00
86985ef735 🚀RELEASE 0.1.3
All checks were successful
continuous-integration/drone/push Build is passing
2021-08-14 13:23:38 +02:00
fef7daaf96 Weired knex env fix 2021-08-14 13:23:11 +02:00
b14fa05adc 🚀RELEASE 0.1.2
All checks were successful
continuous-integration/drone/push Build is passing
2021-08-14 13:10:00 +02:00
7c71e94304 Added optional db volume to docker-compose 2021-08-14 13:09:40 +02:00
8fa489f2bc Changed the way that the migration get's triggered 2021-08-14 13:09:25 +02:00
512acc0b8c Prod db now resides in db folder
All checks were successful
continuous-integration/drone/push Build is passing
2021-08-14 12:56:02 +02:00
567ac07612 Merge branch 'main' of git.odit.services:kauft.es/linkylinky into main
All checks were successful
continuous-integration/drone/push Build is passing
2021-08-14 11:50:35 +02:00
fa01864d0d API Endpoint to get all short urls 2021-08-14 11:50:29 +02:00
91b25c22ca Get all api endpoints 2021-08-14 11:50:03 +02:00
8 changed files with 98 additions and 21 deletions

3
.env
View File

@@ -1,3 +1,4 @@
SSL=false SSL=true
DOMAIN=kauft.es
DISABLE_PROVIDERS=false DISABLE_PROVIDERS=false
ENABLE_REGISTER=true ENABLE_REGISTER=true

View File

@@ -2,8 +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.2.0](https://git.odit.services/kauft.es/linkylinky/compare/0.1.4...0.2.0)
- Added ebay provider recognition [`12c6d7e`](https://git.odit.services/kauft.es/linkylinky/commit/12c6d7e3da5cb4de6a597b4639f313b8e4319646)
- Ebay provider resolution [`339e2f3`](https://git.odit.services/kauft.es/linkylinky/commit/339e2f39d88d42a961e1e495f319dc0663cdc0a6)
- Now recognizing with and without protocol [`1624e66`](https://git.odit.services/kauft.es/linkylinky/commit/1624e666e83e0afe346bcacb105ea1a1535f0690)
#### [0.1.4](https://git.odit.services/kauft.es/linkylinky/compare/0.1.3...0.1.4)
> 14 August 2021
- Added cors [`518aa3e`](https://git.odit.services/kauft.es/linkylinky/commit/518aa3eb08cb72854812130d45b3b89afb074693)
- 🚀RELEASE 0.1.4 [`86f4cd0`](https://git.odit.services/kauft.es/linkylinky/commit/86f4cd00ea517f7e2cacbf69f2163eae597610ee)
#### [0.1.3](https://git.odit.services/kauft.es/linkylinky/compare/0.1.2...0.1.3)
> 14 August 2021
- Weired knex env fix [`fef7daa`](https://git.odit.services/kauft.es/linkylinky/commit/fef7daaf961e9112aa00f2ad22c3b0518ad258a7)
- 🚀RELEASE 0.1.3 [`86985ef`](https://git.odit.services/kauft.es/linkylinky/commit/86985ef7355c2db09dcd6c8e52ee7ebde3ed4128)
#### [0.1.2](https://git.odit.services/kauft.es/linkylinky/compare/0.1.1...0.1.2)
> 14 August 2021
- API Endpoint to get all short urls [`fa01864`](https://git.odit.services/kauft.es/linkylinky/commit/fa01864d0de7921e741d63c3f5795161279ea478)
- 🚀RELEASE 0.1.2 [`b14fa05`](https://git.odit.services/kauft.es/linkylinky/commit/b14fa05adc1ef8e34fd73bf5f495505df7d44b33)
- Changed the way that the migration get's triggered [`8fa489f`](https://git.odit.services/kauft.es/linkylinky/commit/8fa489f2bcd9d1ad63ab4581b7f3b27eee3d9038)
- Get all api endpoints [`91b25c2`](https://git.odit.services/kauft.es/linkylinky/commit/91b25c22ca035aec5cc2fdc80ca4fbb56a2f8b65)
- Added optional db volume to docker-compose [`7c71e94`](https://git.odit.services/kauft.es/linkylinky/commit/7c71e943041d8e3ac9dcf95cad27f2f0bc0b024c)
- Prod db now resides in db folder [`512acc0`](https://git.odit.services/kauft.es/linkylinky/commit/512acc0b8c15d4cfbafef21ec20707bac4629ea4)
#### [0.1.1](https://git.odit.services/kauft.es/linkylinky/compare/0.1.0...0.1.1) #### [0.1.1](https://git.odit.services/kauft.es/linkylinky/compare/0.1.0...0.1.1)
> 14 August 2021
- 🚀RELEASE 0.1.1 [`55d6b91`](https://git.odit.services/kauft.es/linkylinky/commit/55d6b91cc252ee6676d13df9abd8b61283a07f0f)
- fix: Dockerfile [`807eb9c`](https://git.odit.services/kauft.es/linkylinky/commit/807eb9c267377df0b5f30f81eb380ef8a1c2add2) - fix: Dockerfile [`807eb9c`](https://git.odit.services/kauft.es/linkylinky/commit/807eb9c267377df0b5f30f81eb380ef8a1c2add2)
#### [0.1.0](https://git.odit.services/kauft.es/linkylinky/compare/0.0.2...0.1.0) #### [0.1.0](https://git.odit.services/kauft.es/linkylinky/compare/0.0.2...0.1.0)

View File

@@ -4,8 +4,9 @@ COPY package.json .
COPY yarn.lock . COPY yarn.lock .
RUN yarn --production --frozen-lockfile RUN yarn --production --frozen-lockfile
COPY migrations ./migrations COPY migrations ./migrations
COPY src/server.js ./ COPY src ./src
COPY knexfile.js ./ COPY knexfile.js ./
RUN mkdir db
# #
# FROM astefanutti/scratch-node:16.0.0 # FROM astefanutti/scratch-node:16.0.0
FROM node:16.6.2-alpine3.14 FROM node:16.6.2-alpine3.14
@@ -13,4 +14,4 @@ WORKDIR /app
COPY --from=0 /app /app COPY --from=0 /app /app
ENV NODE_ENV production ENV NODE_ENV production
EXPOSE 3000 EXPOSE 3000
ENTRYPOINT ["node", "./server.js"] ENTRYPOINT ["/bin/sh", "-c", "yarn migrate && node ./src/server.js"]

View File

@@ -5,3 +5,5 @@ services:
#image: registry.odit.services/kauft.es/linkylinky:latest #image: registry.odit.services/kauft.es/linkylinky:latest
ports: ports:
- 3000:3000 - 3000:3000
#volumes:
# - ./db:/app/db

View File

@@ -12,7 +12,7 @@ module.exports = {
production: { production: {
client: 'sqlite3', client: 'sqlite3',
connection: { connection: {
filename: './db.sqlite3' filename: './db/db.sqlite3'
}, },
migrations: { migrations: {
tableName: 'knex_migrations' tableName: 'knex_migrations'

View File

@@ -1,6 +1,6 @@
{ {
"name": "@odit/shortener-backend", "name": "@odit/shortener-backend",
"version": "0.1.1", "version": "0.2.0",
"main": "index.js", "main": "index.js",
"license": "MIT", "license": "MIT",
"private": false, "private": false,
@@ -15,6 +15,7 @@
"dotenv": "^10.0.0", "dotenv": "^10.0.0",
"fastify": "^3.20.1", "fastify": "^3.20.1",
"fastify-basic-auth": "^2.1.0", "fastify-basic-auth": "^2.1.0",
"fastify-cors": "^6.0.2",
"knex": "^0.21.21", "knex": "^0.21.21",
"sqlite3": "^5.0.2", "sqlite3": "^5.0.2",
"uniqid": "^5.3.0" "uniqid": "^5.3.0"

View File

@@ -15,16 +15,17 @@ let config = {
return `http://${config.domain}`; return `http://${config.domain}`;
} }
} }
const environment = process.env.NODE_ENV || 'development';
const knex = require('knex')({ const knexConfiguration = require('../knexfile')[environment];
client: 'sqlite3', const knex = require('knex')(knexConfiguration);
connection: {
filename: "./dev.sqlite3"
}
});
const authenticate = { realm: 'Short' } const authenticate = { realm: 'Short' }
fastify.register(require('fastify-basic-auth'), { validate, authenticate }); fastify.register(require('fastify-basic-auth'), { validate, authenticate });
fastify.register(require('fastify-cors'), {
origin: true,
preflight: true,
preflightContinue: true
})
//Automagic Amazn redirects on /a/ //Automagic Amazn redirects on /a/
fastify.get('/a/:id', async (req, res) => { fastify.get('/a/:id', async (req, res) => {
@@ -40,6 +41,11 @@ 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}`)
}) })
//Automagic ebay item redirects on /e/
fastify.get('/e/:id', async (req, res) => {
res.redirect(302, `https://ebay.de/itm/${req.params.id}`)
})
//Normal shorturls //Normal shorturls
fastify.get('/:shortcode', async (req, res) => { fastify.get('/:shortcode', async (req, res) => {
const shortcode = req.params.shortcode; const shortcode = req.params.shortcode;
@@ -221,7 +227,7 @@ fastify.after(() => {
}); });
//Get url api route //Get url api route
fastify.delete('/api/:shortcode', async (req, res) => { fastify.delete('/api/:shortcode', { onRequest: fastify.basicAuth }, async (req, res) => {
const shortcode = req.params.shortcode; const shortcode = req.params.shortcode;
//This should never happen but better safe than 500 //This should never happen but better safe than 500
@@ -237,6 +243,23 @@ fastify.after(() => {
return true; return true;
}); });
//Get all urls api route
fastify.get('/api', { onRequest: fastify.basicAuth }, async (req, res) => {
urls = await knex.select('target', 'shortcode')
.from('urls');
for (let url of urls) {
url.url = `${config.getBaseUrl()}/${url.shortcode}`
if(req.query.showVisits){
url.visits = (await knex.select('timestamp')
.from('visits')
.where('shortcode', '=', url.shortcode)).length;
}
}
return urls;
});
}); });
@@ -266,7 +289,7 @@ function checkKnownProviders(target) {
target target
} }
} }
const amazonID = target.match(/https?:\/\/(www|smile|)\.?(amazon|smile)\.(de)(?:(?:\/.*\/|\/)(?:dp|gp))(\/product\/|\/)([A-Z0-9]+)/); const amazonID = target.match(/(?:https?:\/\/|)(www|smile|)\.?(amazon|smile)\.(de)(?:(?:\/.*\/|\/)(?:dp|gp))(\/product\/|\/)([A-Z0-9]+)/);
if (amazonID) { if (amazonID) {
const shortcode = `a/${amazonID[5]}` const shortcode = `a/${amazonID[5]}`
return { return {
@@ -275,6 +298,15 @@ function checkKnownProviders(target) {
target target
} }
} }
const ebayID = target.match(/(?:[ebay]*(?:[\/]|[itm=])|^)([0-9]{9,12})/);
if (ebayID) {
const shortcode = `e/${ebayID[1]}`
return {
url: `${config.getBaseUrl()}/${shortcode}`,
shortcode,
target
}
}
return null; return null;
} }
@@ -298,13 +330,6 @@ async function validate(username, password, req, reply) {
// Run the server! // Run the server!
const start = async () => { const start = async () => {
try {
await knex.migrate.latest()
} catch (err) {
fastify.log.error(err)
process.exit(1)
}
try { try {
await fastify.listen(3000, '0.0.0.0') await fastify.listen(3000, '0.0.0.0')
} catch (err) { } catch (err) {

View File

@@ -1249,6 +1249,14 @@ fastify-basic-auth@^2.1.0:
fastify-plugin "^3.0.0" fastify-plugin "^3.0.0"
http-errors "^1.7.3" http-errors "^1.7.3"
fastify-cors@^6.0.2:
version "6.0.2"
resolved "https://registry.yarnpkg.com/fastify-cors/-/fastify-cors-6.0.2.tgz#4fd5102549659e9b34d252fd7ee607b63d021390"
integrity sha512-sE0AOyzmj5hLLRRVgenjA6G2iOGX35/1S3QGYB9rr9TXelMZB3lFrXy4CzwYVOMiujJeMiLgO4J7eRm8sQSv8Q==
dependencies:
fastify-plugin "^3.0.0"
vary "^1.1.2"
fastify-error@^0.3.0: fastify-error@^0.3.0:
version "0.3.1" version "0.3.1"
resolved "https://registry.yarnpkg.com/fastify-error/-/fastify-error-0.3.1.tgz#8eb993e15e3cf57f0357fc452af9290f1c1278d2" resolved "https://registry.yarnpkg.com/fastify-error/-/fastify-error-0.3.1.tgz#8eb993e15e3cf57f0357fc452af9290f1c1278d2"
@@ -4014,6 +4022,11 @@ v8flags@^3.2.0:
dependencies: dependencies:
homedir-polyfill "^1.0.1" homedir-polyfill "^1.0.1"
vary@^1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=
verror@1.10.0: verror@1.10.0:
version "1.10.0" version "1.10.0"
resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"