Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
88 changes: 88 additions & 0 deletions app.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
const NEXCHANGE_ROOT = process.env.NEXCHANGE_ROOT;
const ICO_ROOT = process.env.ICO_ROOT;
const OLD_SITE_URL = process.env.OLD_SITE_URL;
const DEVENV = process.env.DEVENV;

const express = require('express');
const path = require('path');
const helmet = require('helmet')
const referrerSwitch = require('./logic/Switch.js')

const app = express();

//Helmet helps you secure your Express apps by setting various HTTP headers.
app.use(helmet())

//Exclude index.html from static serving
app.use('/ico', express.static(path.resolve(ICO_ROOT)));
app.use(express.static(path.resolve(NEXCHANGE_ROOT),{index: false}));

function getCur(qParam) {
return qParam.toUpperCase().substr(-3);
}

app.get('/ico', (req, res) => {
res.sendFile(path.resolve(ICO_ROOT, 'index.html'));
});

// Handling lowercase order Ids
var orderUppercase = (req, res, next) => {

if (req.params.orderId) {
const orderIdUP = req.params.orderId.toUpperCase()
if (req.params.orderId != orderIdUP) {
res.redirect('/order/' + orderIdUP)
}
else {
next()
}
}
};

// General handler for the rest of the URLs
var generalHandler = (req, res) => {

if (req.header('Referer')) {

let rHeader = req.header('Referer');
//If traffic comes from partner
if (rHeader.indexOf('n.exchange') == -1) {
try {

let rSwitch = new referrerSwitch(rHeader);
let referrer = rSwitch.getMatchingReferrer();

let params = {'lang': referrer.getLang(req.query),
'pair': referrer.getPair(req.query, rHeader)};

params = Object.keys(params).filter(key => params[key] !== '' ).map(key => key + '=' + params[key]).join('&');

if (referrer.isCard(rHeader)) {
res.redirect(OLD_SITE_URL + '?' + params);
return;
}
else if (referrer.redirectRequired) {
res.redirect(req.path + '?' + params);
return;
}
}
catch(e) {
if (DEVENV) {
console.log(e);
}
}
}
}

res.sendFile(path.resolve(process.env.NEXCHANGE_ROOT, 'index.html'));
};

// Convert order ids to uppercase
app.get('/order/:orderId', [orderUppercase, generalHandler]
);

// For all other cases
app.get('*', generalHandler);

module.exports = app;

68 changes: 0 additions & 68 deletions index.js

This file was deleted.

37 changes: 37 additions & 0 deletions logic/Allchange.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
const Partner = require('./Partner.js')

class Allchange extends Partner {

constructor() {
super('Allchange', 'allchange.org')
}

getPair (params, referer) {

let path = referer.split('/');
let direction = path[path.length-1];
if (direction.indexOf('direction') > -1) {
let dirArr = direction.split('=');
let pairArr = dirArr[dirArr.length-1].split('_');
let pairA = this.matchCurrency(pairArr[0]);
let pairB = this.matchCurrency(pairArr[1]);
if (pairA && pairB) {
this.redirectRequired = true;
return pairB+pairA;
}
}

return '';
}

isCard (referrer) {
return (referrer.indexOf('CARD') > -1);
}

getReferrerCode (params) {
return params.ref;
}

}

module.exports = Allchange;
42 changes: 42 additions & 0 deletions logic/Bestchange.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
const Partner = require('./Partner.js')

class Bestchange extends Partner {

constructor() {
super('Bestchange', 'bestchange.ru')
}

getPair (params, referer) {
let pair
if (params.cur_to && params.cur_from) {
pair = this.getCur(params.cur_to) + this.getCur(params.cur_from);
this.redirectRequired = true;
}
else {
pair = '';
}
return pair;
}

getLang (params) {
let lang
if (params.lang && params.lang !== params.lang.toLowerCase()) {
lang = params.lang.toLowerCase()
this.redirectRequired = true;
}
else {
lang = '';
}
return lang;
}

isCard (referrer) {
return (referrer.indexOf('visa-mastercard') > -1);
}

getReferrerCode (params) {
return params.ref;
}
}

module.exports = Bestchange;
33 changes: 33 additions & 0 deletions logic/Bestcurs.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
const Partner = require('./Partner.js')

class Bestcurs extends Partner {

constructor() {
super('Bestcurs', 'bestcurs.org')
}

getPair (params, referer) {

let path = referer.split('/');
let pairArr = path[path.length-2].split('-');
let pairA = this.matchCurrency(pairArr[0]);
let pairB = this.matchCurrency(pairArr[1]);
if (pairA !== false && pairB !== false) {
this.redirectRequired = true;
return pairB+pairA;
}

return '';
}

getReferrerCode (params) {
return params.r;
}

isCard (referrer) {
return (referrer.indexOf('Card') > -1);
}

}

module.exports = Bestcurs;
38 changes: 38 additions & 0 deletions logic/Emon.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
const Partner = require('./Partner.js')

class Emon extends Partner {

constructor() {
super('E-mon', 'e-mon.ru')
}

getCur(qParam) {
return qParam.toUpperCase().substr(-3);
}

getPair (params, referer) {

let path = referer.split('/');

let pairA = this.matchCurrency(path[path.length-2]);
let pairB = this.matchCurrency(path[path.length-1]);

if (pairA !== false && pairB !== false) {
this.redirectRequired = true;
return pairB+pairA;
}

return '';
}

getReferrerCode (params) {
return params.rid;
}

isCard (referrer) {
return (referrer.indexOf('CARD') > -1);
}

}

module.exports = Emon;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

new line at end of file.

32 changes: 32 additions & 0 deletions logic/Exchangesumo.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
const Partner = require('./Partner.js')

class Exchangesumo extends Partner {

constructor() {
super('Exchangesumo', 'exchangesumo.com')
}

getPair (params, referer) {

let path = referer.split('/');
let pairArr = path[path.length-2].split('-');
let pairA = this.matchCurrency(pairArr[0]);
let pairB = this.matchCurrency(pairArr[1]);
if (pairA !== false && pairB !== false) {
this.redirectRequired = true;
return pairB+pairA;
}
return '';
}

isCard (referrer) {
return (referrer.indexOf('Card') > -1);
}

getReferrerCode (params) {
return params.refId;
}

}

module.exports = Exchangesumo;
17 changes: 17 additions & 0 deletions logic/Kursexpert.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
const Partner = require('./Partner.js')

//Haven't found n.exchange reference on this site.
class Kursexpert extends Partner {

constructor() {
super('Kurs Expert', 'kurs.expert')
}


getReferrerCode (params) {
return params.ref;
}

}

module.exports = Kursexpert;
Loading