Files
coriolis/src/app/utils/ShortenUrl.js
2018-10-21 10:16:31 +11:00

141 lines
3.6 KiB
JavaScript

import request from 'superagent';
let agent;
try {
agent = request.agent(); // apparently this crashes somehow
} catch (e) {
console.error(e);
}
if (!agent) {
agent = request;
}
/**
* Shorten a URL
* @param {string} url The URL to shorten
* @param {function} success Success callback
* @param {function} error Failure/Error callback
*/
export default function shorternUrl(url, success, error) {
orbisShorten(url, success, error);
}
const SHORTEN_API_GOOGLE = 'https://www.googleapis.com/urlshortener/v1/url?key=';
/**
* Shorten a URL using Google's URL shortener API
* @param {string} url The URL to shorten
* @param {function} success Success callback
* @param {function} error Failure/Error callback
*/
function shortenUrlGoogle(url, success, error) {
if (window.navigator.onLine) {
try {
request.post(SHORTEN_API_GOOGLE + window.CORIOLIS_GAPI_KEY)
.send({ longUrl: url })
.end(function(err, response) {
if (err) {
error(response.statusText == 'OK' ? 'Bad Request' : response.statusText);
} else {
success(response.body.id);
}
});
} catch (e) {
error(e.message ? e.message : e);
}
} else {
error('Not Online');
}
}
const SHORTEN_API_EDDP = 'https://eddp.co/u';
/**
* Shorten a URL using EDDP's URL shortener API
* @param {string} url The URL to shorten
* @param {function} success Success callback
* @param {function} error Failure/Error callback
*/
function shortenUrlEddp(url, success, error) {
if (window.navigator.onLine) {
try {
request.post(SHORTEN_API_EDDP)
.send(url)
.end(function(err, response) {
if (err) {
error('Bad Request');
} else {
success(response.header['location']);
}
});
} catch (e) {
error(e.message ? e.message : e);
}
} else {
error('Not Online');
}
}
const SHORTEN_API_ORBIS = 'https://s.orbis.zone/api.php';
/**
* Shorten a URL using Orbis's URL shortener API
* @param {string} url The URL to shorten
* @param {function} success Success callback
* @param {function} error Failure/Error callback
*/
function orbisShorten(url, success, error) {
if (window.navigator.onLine) {
try {
request.post(SHORTEN_API_ORBIS)
.field('action', 'shorturl')
.field('url', url)
.field('format', 'json')
.end(function(err, response) {
if (err) {
console.error(err);
error('Bad Request');
} else {
success(response.body.shorturl);
}
});
} catch (e) {
console.log(e);
error(e.message ? e.message : e);
}
} else {
error('Not Online');
}
}
const API_ORBIS = 'https://orbis.zone/api/builds/add';
/**
* Upload to Orbis
* @param {object} ship The URL to shorten
* @param {object} creds Orbis credentials
* @return {Promise<any>} Either a URL or error message.
*/
export function orbisUpload(ship, creds) {
return new Promise(async(resolve, reject) => {
if (window.navigator.onLine) {
try {
agent
.post(API_ORBIS)
.withCredentials()
.redirects(0)
.set('Content-Type', 'application/json')
.send(ship)
.end(function(err, response) {
if (err) {
reject('Bad Request');
} else {
resolve(response.body.link);
}
});
} catch (e) {
console.log(e);
reject(e.message ? e.message : e);
}
} else {
reject('Not Online');
}
});
}