Compare commits
10 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| a62ee63c83 | |||
|
c89f2a2939
|
|||
|
d51c58867d
|
|||
|
2fa520fdde
|
|||
|
5bb7212420
|
|||
|
2226705e3f
|
|||
| 72932955d1 | |||
|
339e2f39d8
|
|||
|
12c6d7e3da
|
|||
|
1624e666e8
|
20
CHANGELOG.md
20
CHANGELOG.md
@@ -2,9 +2,29 @@
|
|||||||
|
|
||||||
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.3.0](https://git.odit.services/kauft.es/linkylinky/compare/0.2.0...0.3.0)
|
||||||
|
|
||||||
|
- Added license [`5bb7212`](https://git.odit.services/kauft.es/linkylinky/commit/5bb7212420ba102e743d62a47074191cdb264d2a)
|
||||||
|
- Added stats api route [`c89f2a2`](https://git.odit.services/kauft.es/linkylinky/commit/c89f2a2939b658ffc688646ccce32fc0e1530583)
|
||||||
|
- Added author info [`2fa520f`](https://git.odit.services/kauft.es/linkylinky/commit/2fa520fdde1d55b2766b4b03e394e21a4f6cbae5)
|
||||||
|
- Updated readme [`2226705`](https://git.odit.services/kauft.es/linkylinky/commit/2226705e3f57d7d2f3ef5a79947c3ab44ec62c38)
|
||||||
|
- Added comments [`d51c588`](https://git.odit.services/kauft.es/linkylinky/commit/d51c58867d7508c84f26c236e38567bc6a4adbed)
|
||||||
|
|
||||||
|
#### [0.2.0](https://git.odit.services/kauft.es/linkylinky/compare/0.1.4...0.2.0)
|
||||||
|
|
||||||
|
> 14 August 2021
|
||||||
|
|
||||||
|
- 🚀RELEASE 0.2.0 [`7293295`](https://git.odit.services/kauft.es/linkylinky/commit/72932955d15976947dd553c5deba51cbf541b215)
|
||||||
|
- 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)
|
#### [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)
|
- 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)
|
#### [0.1.3](https://git.odit.services/kauft.es/linkylinky/compare/0.1.2...0.1.3)
|
||||||
|
|
||||||
|
|||||||
24
LICENSE
Normal file
24
LICENSE
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
MIT License
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Copyright (c) 2021 ODIT.Services (https://odit.services)
|
||||||
|
Permission is hereby granted, free of charge, to any person
|
||||||
|
obtaining a copy of this software and associated documentation
|
||||||
|
files (the "Software"), to deal in the Software without
|
||||||
|
restriction, including without limitation the rights to use,
|
||||||
|
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the
|
||||||
|
Software is furnished to do so, subject to the following
|
||||||
|
conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be
|
||||||
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||||
|
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||||
|
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||||
|
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||||
|
OTHER DEALINGS IN THE SOFTWARE.
|
||||||
@@ -1,5 +1,8 @@
|
|||||||
# LinkyLinky 🔗
|
<p align="center">
|
||||||
> A small url shortener, originaly developed for kauft.es
|
<img height="150" src="https://git.odit.services/user/avatar/kauft.es/140">
|
||||||
|
<h1 align="center">LinkyLinky 🔗</h1>
|
||||||
|
<h3 align="center">A small url shortener, originaly developed for kauft.es</h3>
|
||||||
|
</p>
|
||||||
|
|
||||||
## Dev Setup 🛠
|
## Dev Setup 🛠
|
||||||
> Runs on port 3000
|
> Runs on port 3000
|
||||||
|
|||||||
14
package.json
14
package.json
@@ -1,9 +1,21 @@
|
|||||||
{
|
{
|
||||||
"name": "@odit/shortener-backend",
|
"name": "@odit/shortener-backend",
|
||||||
"version": "0.1.4",
|
"version": "0.3.0",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"private": false,
|
"private": false,
|
||||||
|
"author": {
|
||||||
|
"name": "ODIT.Services",
|
||||||
|
"email": "info@odit.services",
|
||||||
|
"url": "https://odit.services"
|
||||||
|
},
|
||||||
|
"contributors": [
|
||||||
|
{
|
||||||
|
"name": "Nicolai Ort",
|
||||||
|
"email": "info@nicolai-ort.com",
|
||||||
|
"url": "https://nicolai-ort.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "nodemon src/server.js",
|
"dev": "nodemon src/server.js",
|
||||||
"start": "node src/server.js",
|
"start": "node src/server.js",
|
||||||
|
|||||||
@@ -41,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;
|
||||||
@@ -134,6 +139,20 @@ fastify.post('/api', { newUrlSchema }, async (req, res) => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
//Get stats api route
|
||||||
|
fastify.get('/api/stats', async (req, res) => {
|
||||||
|
const urls = await knex.select('shortcode')
|
||||||
|
.from('urls');
|
||||||
|
|
||||||
|
const visits = await knex.select('timestamp')
|
||||||
|
.from('visits');
|
||||||
|
|
||||||
|
return {
|
||||||
|
urls: urls.length,
|
||||||
|
visits: visits.length,
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
//Get url api route
|
//Get url api route
|
||||||
fastify.get('/api/:shortcode', async (req, res) => {
|
fastify.get('/api/:shortcode', async (req, res) => {
|
||||||
const shortcode = req.params.shortcode;
|
const shortcode = req.params.shortcode;
|
||||||
@@ -163,6 +182,7 @@ fastify.get('/api/:shortcode', async (req, res) => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
//User registration
|
//User registration
|
||||||
fastify.post('/api/register', async (req, res) => {
|
fastify.post('/api/register', async (req, res) => {
|
||||||
if (!config.registrationEnabled) {
|
if (!config.registrationEnabled) {
|
||||||
@@ -196,6 +216,7 @@ fastify.post('/api/register', async (req, res) => {
|
|||||||
return "Done!"
|
return "Done!"
|
||||||
});
|
});
|
||||||
|
|
||||||
|
//Anything in here has some kind of auth
|
||||||
fastify.after(() => {
|
fastify.after(() => {
|
||||||
//Get url api route
|
//Get url api route
|
||||||
fastify.get('/api/:shortcode/visits', { onRequest: fastify.basicAuth }, async (req, res) => {
|
fastify.get('/api/:shortcode/visits', { onRequest: fastify.basicAuth }, async (req, res) => {
|
||||||
@@ -284,7 +305,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 {
|
||||||
@@ -293,6 +314,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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user