Skip to content
This repository has been archived by the owner. It is now read-only.
Permalink
Browse files

update

  • Loading branch information...
andris9 committed Sep 3, 2018
1 parent f16cdd9 commit 317eaa72f267f0a758325a50d5886ea93ae3a08e
@@ -1,6 +1,6 @@
{
"rules":{
"rules": {
"no-undefined": 0
},
"extends": "nodemailer"
"extends": ["nodemailer", "prettier"]
}
@@ -3,3 +3,4 @@ node_modules
.node_env
npm-debug.log
config/production.js*
package-lock.json*
@@ -0,0 +1,5 @@
module.exports = {
printWidth: 160,
tabWidth: 4,
singleQuote: true
};
16 LICENSE
@@ -0,0 +1,16 @@
Copyright (c) 2011-2018 Andris Reinman

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 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.
@@ -2,23 +2,25 @@

## Eeldused

* [Node.js](http://nodejs.org/), vähemalt versioon 5.0.0
* [MongoDB](http://www.mongodb.org/)
* OpenSSL käsurea utiliit. Linux põhistes süsteemides reeglina vaikimisi olemas, Windowsis tuleb see ise [paigaldada](https://blog.didierstevens.com/2015/03/30/howto-make-your-own-cert-with-openssl-on-windows/)
- [Node.js](http://nodejs.org/), vähemalt versioon 8.0.0
- [MongoDB](http://www.mongodb.org/)
- OpenSSL käsurea utiliit. Linux põhistes süsteemides reeglina vaikimisi olemas, Windowsis tuleb see ise [paigaldada](https://blog.didierstevens.com/2015/03/30/howto-make-your-own-cert-with-openssl-on-windows/)

## Kiirpaigaldus

Pangalinkerit on võimalik kiirpaigaldada tühja Ubuntu 16.04 operatsioonisüsteemiga serverisse. "Tühja" selles mõttes, et sinna pole veel paigaldatud muud tarkvara. Juhul kui rakenduse failid on kopeeritud serverisse, tuleks rakenduse kaustas käivitada järgmine käsk:

sudo ./setup/ubuntu-install.sh
sudo ./setup/ubuntu-install.sh hostname

Kus

- **hostname** on siis serveri nimi või IP

Paigaldusskript paigaldab ja konfigureerib järgmised tarkvarad:

* MongoDB
* Node.js
* UFW tulemüüri (lahti jääb SSH ja HTTP)
* Pangalinkeri rakendus (failid kopeeritakse süsteemsesse kausta)
* ZoneMTA (kirjade saatmiseks)
- MongoDB
- Node.js
- Pangalinkeri rakendus (failid kopeeritakse süsteemsesse kausta)

Parimal juhul ei olegi vaja midagi rohkemat seadistada ning võib avada rakenduse veebilehe. Vaikimisi jookseb selliselt paigaldatud rakendus üle HTTP ning seega tasub kaaluda võimalusi rakenduse seadistamiseks nii, et see kasutaks HTTPS protkolli.

@@ -36,6 +38,10 @@ Juhul kui veebiliides kasutab porti 80 või 443, pead käivitama rakenduse juurk

Muuda faili `config/default.js` väärtusi või või lisa NODE_ENV väärtuse nimega täiendav fail. Lisakonfiguratsioonifailid täiendavad, mitte ei asenda vaikimisi seadeid.

Näiteks kui tahad, et konfiguratsioon laetaks failidest *default.js* + *production.js*, käivita rakendus järgmiselt:
Näiteks kui tahad, et konfiguratsioon laetaks failidest _default.js_ + _production.js_, käivita rakendus järgmiselt:

NODE_ENV=production node index.js

## Litsents

**[MIT](./LICENSE)**
@@ -276,7 +276,7 @@ function initializeAccountTicket(req, address, description, role, callback) {
created: new Date()
};

db.database.collection('tickets').insert(ticket, err => {
db.database.collection('tickets').insertOne(ticket, err => {
if (err) {
return callback(err);
}
@@ -210,12 +210,12 @@ IPAYServlet.prototype.validateSignature = function(callback) {
success: !!success,
errors: !success
? [
{
field: 'mac',
error: util.format('Allkirja parameetri %s valideerimine ebaõnnestus.', 'mac'),
download: true
}
]
{
field: 'mac',
error: util.format('Allkirja parameetri %s valideerimine ebaõnnestus.', 'mac'),
download: true
}
]
: false,
warnings: false
});
@@ -579,11 +579,11 @@ IPAYServletValidator.prototype.validate_mac = function() {
return util.format('Allkirja parameeter %s peab olema HEX formaadis', 'mac');
}

if (new Buffer(value, 'hex').length % 128) {
if (Buffer.from(value, 'hex').length % 128) {
return util.format(
'Allkirja parameeter %s on vale pikkusega, väärtus vastab %s bitisele võtmele, lubatud on 1024, 2048 ja 4096 bitised võtmed',
'mac',
new Buffer(value, 'hex').length * 8
Buffer.from(value, 'hex').length * 8
);
}

@@ -505,12 +505,12 @@ IPizza.prototype.validateSignature = function(callback) {
success: !!success,
errors: !success
? [
{
field: 'VK_MAC',
error: util.format('Allkirja parameetri %s valideerimine ebaõnnestus.', 'VK_MAC'),
download: true
}
]
{
field: 'VK_MAC',
error: util.format('Allkirja parameetri %s valideerimine ebaõnnestus.', 'VK_MAC'),
download: true
}
]
: false,
warnings: false
});
@@ -1160,11 +1160,11 @@ IPizzaValidator.prototype.validate_VK_MAC = function() {
return util.format('Allkirja parameeter %s peab olema BASE64 formaadis', 'VK_MAC');
}

if (new Buffer(value, 'base64').length % 128) {
if (Buffer.from(value, 'base64').length % 128) {
return util.format(
'Allkirja parameeter %s on vale pikkusega, väärtus vastab %s bitisele võtmele, lubatud on 1024, 2048 ja 4096 bitised võtmed',
'VK_MAC',
new Buffer(value, 'base64').length * 8
Buffer.from(value, 'base64').length * 8
);
}

@@ -1355,9 +1355,9 @@ IPizza.generateForm = function(payment, project, callback) {
url,
fields: payload
? Object.keys(fields).map(key => ({
key,
value: fields[key]
}))
key,
value: fields[key]
}))
: false
};
} else {
@@ -15,7 +15,7 @@ function bodyParser(req, res, next) {
if (req.method === 'GET' && req.originalUrl.indexOf('?') >= 0) {
req.body = {};
req.encodedBody = {};
req.rawBody = new Buffer(urllib.parse(req.originalUrl, false, false).query || '', 'utf-8');
req.rawBody = Buffer.from(urllib.parse(req.originalUrl, false, false).query || '', 'utf-8');
return parseUrlencodedBody(req, res, next);
}

@@ -50,7 +50,7 @@ function bodyParser(req, res, next) {
break;
case 'application/json':
try {
req.body = JSON.parse(new Buffer(req.rawBody, 'utf-8'));
req.body = JSON.parse(req.rawBody.toString());
} catch (E) {
// ignore
}
@@ -78,7 +78,7 @@ function parseUrlencodedBody(req, res, next) {
pos = 0;

if (encodedChars > 0) {
buf = new Buffer(len);
buf = Buffer.alloc(len);
for (let i = 0, l = value.length; i < l; i++) {
if (value[i] === '%' && value.substr(i, 3).match(/^%[0-9a-fA-F]{2}$/)) {
buf[pos] = parseInt(value.substr(i + 1, 2), 16);
@@ -91,7 +91,7 @@ function parseUrlencodedBody(req, res, next) {
}
value = buf;
} else {
value = new Buffer(value, 'binary');
value = Buffer.from(value, 'binary');
}

if (key && value && value.length) {
@@ -130,7 +130,7 @@ function parseMultipartBody(req, res, boundary, next) {
if (headers['content-disposition'] && headers['content-disposition'].value === 'form-data') {
key = headers['content-disposition'].name;
}
value = new Buffer(he.decode(contents || ''), 'binary');
value = Buffer.from(he.decode(contents || ''), 'binary');

if (key && value && value.length) {
req.body[key] = value.toString('utf-8');
@@ -6,14 +6,24 @@ const MongoClient = require('mongodb').MongoClient;
let dbObj;

module.exports.init = function(callback) {
MongoClient.connect(config.mongodb.url, {}, (err, db) => {
if (err) {
return callback(err);
MongoClient.connect(
config.mongodb.url,
{
useNewUrlParser: true,
reconnectTries: 100000,
reconnectInterval: 1000
},
(err, db) => {
if (err) {
return callback(err);
}
if (db.s && db.s.options && db.s.options.dbName) {
db = db.db(db.s.options.dbName);
}
module.exports.database = dbObj = db;
return callback(null, db);
}

module.exports.database = dbObj = db;
return callback(null, db);
});
);
};

module.exports.save = function(collectionName, record, callback) {
@@ -26,15 +36,20 @@ module.exports.save = function(collectionName, record, callback) {
}

if (id) {
collection.findAndModify(
let data = {};
Object.keys(record || {}).forEach(key => {
if (!['_id'].includes(key)) {
data[key] = record[key];
}
});
collection.findOneAndUpdate(
{
_id: id
},
false,
record,
{ $set: data },
{
upsert: true, // insert as new if not found
new: true // return updated record
returnOriginal: false // return updated record
},
(err, record) => {
if (err) {
@@ -81,13 +96,12 @@ module.exports.modify = function(collectionName, query, update, callback) {
return callback(err);
}

collection.findAndModify(
collection.findOneAndUpdate(
query,
false,
update,
{
upsert: true, // insert as new if not found
new: true // return updated record
returnOriginal: false // return updated record
},
(err, record) => {
if (err) {
@@ -129,11 +143,15 @@ module.exports.find = function(collectionName, query, fields, options, callback)
options = options || {};
fields = fields || {};

if (fields) {
options.projection = fields;
}

if (!('limit' in options)) {
options.limit = 1000;
}

collection.find(query, fields, options).toArray((err, docs) => {
collection.find(query, options).toArray((err, docs) => {
if (err) {
return callback(err);
}
@@ -25,7 +25,7 @@ module.exports = function(req, res, next) {
write.call(res, chunk, encoding);
} else {
if (typeof chunk === 'string') {
chunk = new Buffer(chunk, encoding || 'utf-8');
chunk = Buffer.from(chunk, encoding || 'utf-8');
}
buffer.push(chunk);
bufferLen += chunk.length;
@@ -40,7 +40,7 @@ module.exports = function(req, res, next) {
}

if (buffer) {
let buf = bufferLen ? Buffer.concat(buffer, bufferLen) : new Buffer(0);
let buf = bufferLen ? Buffer.concat(buffer, bufferLen) : Buffer.from(0);
let out = encodinglib.convert(buf, res.forceCharset);

res.setHeader('Content-Length', out.length);
@@ -27,7 +27,9 @@ function sendInvitation(req, ticket) {
link: `${req.siteProto}://${req.siteHostname}/account/join?username=${encodeURIComponent(ticket.address)}&ticket=${ticket._id.toString()}`,
title: 'Loo uus konto'
},
footer: `Said selle e-kirja, kuna saidi <a href="${req.siteProto}://${req.siteHostname}/">${req.siteHostname}</a> administraator soovis lisada Sinu e-posti aadressile uut kasutajakontot`
footer: `Said selle e-kirja, kuna saidi <a href="${req.siteProto}://${req.siteHostname}/">${
req.siteHostname
}</a> administraator soovis lisada Sinu e-posti aadressile uut kasutajakontot`
});

let mailOptions = {
@@ -58,7 +60,9 @@ function sendRegistration(req, user) {
title: req.siteTitle,
message: `${user.name}, sinu ${req.siteTitle} konto on valmis!
Sinu kasutajanimi: ${user.username}<br/>Sinu parool: registreerimisel kasutatud parool`,
footer: `Said selle e-kirja, kuna keegi kasutas sinu aadressi konto loomiseks saidil <a href="${req.siteProto}://${req.siteHostname}/">${req.siteHostname}</a>`
footer: `Said selle e-kirja, kuna keegi kasutas sinu aadressi konto loomiseks saidil <a href="${req.siteProto}://${req.siteHostname}/">${
req.siteHostname
}</a>`
});

let mailOptions = {
@@ -92,7 +96,9 @@ function sendResetLink(req, user, resetToken) {
link: `${req.siteProto}://${req.siteHostname}/account/reset-password?username=${encodeURIComponent(user.username)}&resetToken=${resetToken}`,
title: 'Lähtesta Parool'
},
footer: `Said selle e-kirja, kuna keegi üritas lähtestada sinu konto parooli saidil <a href="${req.siteProto}://${req.siteHostname}/">${req.siteHostname}</a>`
footer: `Said selle e-kirja, kuna keegi üritas lähtestada sinu konto parooli saidil <a href="${req.siteProto}://${req.siteHostname}/">${
req.siteHostname
}</a>`
});

let mailOptions = {

0 comments on commit 317eaa7

Please sign in to comment.
You can’t perform that action at this time.