mirror of
https://codeberg.org/buzzcode2007/FCC-Project-URLShortener.git
synced 2025-05-21 03:06:34 +00:00
95 lines
No EOL
2.7 KiB
JavaScript
Executable file
95 lines
No EOL
2.7 KiB
JavaScript
Executable file
// Import modules
|
|
var URLManage = require(`./database/URLs`).URLManage;
|
|
var Messaging = require(`./utilities/messaging`).Messaging;
|
|
const bodyParser = require('body-parser');
|
|
|
|
class ShortenAPI {
|
|
/*
|
|
Paths used by this API.
|
|
*/
|
|
#paths = {
|
|
"create": ["/api/shorturl"],
|
|
"access": ["/:ID", "/api/shorturl/:ID"]
|
|
}
|
|
|
|
/*
|
|
Create the URL shortener parser API.
|
|
|
|
@param {Express} INSTANCE - The Express instance
|
|
*/
|
|
constructor (INSTANCE) {
|
|
this[`instance`] = INSTANCE;
|
|
this[`instance`].use(bodyParser.json());
|
|
this[`instance`].use(bodyParser.urlencoded({extended: true}));
|
|
|
|
this[`management`] = new URLManage;
|
|
|
|
this.prepareRedirect();
|
|
this.startCreation();
|
|
}
|
|
|
|
/*
|
|
Redirect from the short link.
|
|
*/
|
|
prepareRedirect() {
|
|
const findRedirect = (REQUEST, RESPONSE) => {
|
|
const redirectBrowser = (URL) => {
|
|
return((URL) ? RESPONSE.redirect(URL) : null);
|
|
}
|
|
|
|
try {
|
|
((Object.keys(REQUEST.params).length)
|
|
? REQUEST.params.ID
|
|
: false) ?
|
|
this[`management`].open(REQUEST.params.ID, redirectBrowser)
|
|
: false;
|
|
} catch(ERR) {
|
|
Messaging.exception(RESPONSE, ERR);
|
|
}
|
|
};
|
|
|
|
|
|
this.#paths[`access`].forEach((PATH) => {
|
|
this[`instance`].get(PATH, findRedirect)
|
|
console.log(`Redirection ready on ${PATH}.`);
|
|
});
|
|
}
|
|
|
|
/*
|
|
Enable receiving requests.
|
|
*/
|
|
startCreation() {
|
|
const redirect = (REQUEST, RESPONSE) => {
|
|
try {
|
|
let QUERY = {};
|
|
if ((REQUEST.body) ? Object.keys(REQUEST.body).length : false) {
|
|
QUERY = REQUEST.body;
|
|
} else if ((REQUEST.query) ? Object.keys(REQUEST.query).length : false) {
|
|
QUERY = REQUEST.query;
|
|
}
|
|
|
|
let RESULT = {};
|
|
RESULT[`original_url`] = QUERY[`url`];
|
|
|
|
|
|
const sendRedirect = (HASH) => {
|
|
RESULT[`short_url`] = HASH;
|
|
RESPONSE.json(RESULT);
|
|
}
|
|
|
|
this[`management`].create(RESULT[`original_url`], sendRedirect);
|
|
} catch(ERR) {
|
|
Messaging.exception(RESPONSE, ERR);
|
|
};
|
|
};
|
|
|
|
[`get`, `post`].forEach((METHOD) => {
|
|
this.#paths[`create`].forEach((PATH) => {
|
|
this[`instance`][METHOD](PATH, redirect);
|
|
console.log(`Creation ready on ${PATH} for method ${METHOD}.`)
|
|
});
|
|
})
|
|
}
|
|
}
|
|
|
|
module.exports = {ShortenAPI}; |