kamailio
Este commit está contenido en:
7
production/kamailio/nodekami/Dockerfile
Archivo normal
7
production/kamailio/nodekami/Dockerfile
Archivo normal
@@ -0,0 +1,7 @@
|
||||
FROM node:8-slim
|
||||
RUN apt update && apt -y upgrade && apt install -y git python build-essential && apt clean
|
||||
RUN git clone https://github.com/gurumelo/nodekami /nodekami
|
||||
RUN chown node.node -R /nodekami
|
||||
USER node
|
||||
WORKDIR /nodekami/app
|
||||
RUN yarn
|
||||
8
production/kamailio/nodekami/confi.json
Archivo normal
8
production/kamailio/nodekami/confi.json
Archivo normal
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"dominio": "hatthieves.es",
|
||||
"ip": "172.127.0.101",
|
||||
"puerto": 3000,
|
||||
"secreto": "nohayclave",
|
||||
"bd": "kamailio.sqlite"
|
||||
}
|
||||
|
||||
139
production/kamailio/nodekami/index.js
Archivo normal
139
production/kamailio/nodekami/index.js
Archivo normal
@@ -0,0 +1,139 @@
|
||||
var confi = require('./confi.json');
|
||||
var express = require('express');
|
||||
var session = require('express-session');
|
||||
var bodyParser = require('body-parser');
|
||||
var validator = require('validator');
|
||||
var fs = require('fs');
|
||||
var ursa = require('ursa');
|
||||
var key = ursa.createPrivateKey(fs.readFileSync('./rsaprivada.pem'));
|
||||
var sqlite3 = require('sqlite3');
|
||||
var crypto = require('crypto');
|
||||
var bandera = 0;
|
||||
var app = express();
|
||||
|
||||
// Templates/vistas ejs
|
||||
app.set('views', __dirname + '/views');
|
||||
app.set('view engine', 'ejs');
|
||||
|
||||
// Servir directorio public
|
||||
app.use(express.static('./public'));
|
||||
|
||||
// Sesiones
|
||||
app.use(session({
|
||||
name: '',
|
||||
secret: confi.secreto,
|
||||
resave: false,
|
||||
saveUninitialized: false
|
||||
}));
|
||||
|
||||
// Body-parser
|
||||
app.use(bodyParser.json());
|
||||
app.use(bodyParser.urlencoded({extended: false}));
|
||||
|
||||
|
||||
// Función SQLITE
|
||||
var sentencia = function(lacontra, retrollamada) {
|
||||
bandera = 1;
|
||||
var db = new sqlite3.Database(confi.bd);
|
||||
|
||||
db.get("SELECT MAX(id) AS id FROM subscriber", function(err, row) {
|
||||
if (row.id == null) {
|
||||
var id = 1;
|
||||
} else {
|
||||
var id = row.id + 1;
|
||||
}
|
||||
var aha1 = id +':'+ confi.dominio +':'+ lacontra;
|
||||
var aha1b = id +'@'+ confi.dominio +':'+ confi.dominio +':'+ lacontra;
|
||||
var ha1 = crypto.createHash('md5').update(aha1).digest('hex');
|
||||
var ha1b = crypto.createHash('md5').update(aha1b).digest('hex');
|
||||
|
||||
db.run("INSERT INTO subscriber(username, domain, ha1, ha1b) VALUES (?, ?, ?, ?)", [ id, confi.dominio, ha1, ha1b ], function(error) {
|
||||
bandera = 0;
|
||||
retrollamada({ 'estado': 1, 'n': id });
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
db.close();
|
||||
|
||||
};
|
||||
|
||||
// banderas
|
||||
var vamosalla = function(lacontra,retrollamada) {
|
||||
if (bandera == 0) {
|
||||
sentencia(lacontra,retrollamada);
|
||||
} else {
|
||||
setTimeout(vamosalla, 50);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
// Sirve index
|
||||
app.get('/', function(req, res) {
|
||||
//Sesión
|
||||
sess = req.session;
|
||||
|
||||
// Creamos una variable con una cadena alfanumérica aleatoria.
|
||||
var aleatori = Math.random().toString(36).slice(2);
|
||||
|
||||
//Creamos variable de sesión
|
||||
sess.aleatori = aleatori;
|
||||
|
||||
// Se renderiza la vista enviando variable
|
||||
res.render('index', {
|
||||
aleatori: aleatori
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
// Procesa alta
|
||||
var cosa = { 'estado': 0 };
|
||||
|
||||
app.post('/t', function(req, res) {
|
||||
if ( (Object.keys(req.body).length == 3) && (validator.isBase64(req.body.contrasena)) && (validator.isBase64(req.body.paso)) && (validator.isBase64(req.body.aleatori)) ) {
|
||||
var paso = key.decrypt(req.body.paso,'base64', 'utf8', ursa.RSA_PKCS1_PADDING);
|
||||
if ( validator.isEmpty(paso) ) {
|
||||
// Puede que no sea un bot
|
||||
var aleatori = key.decrypt(req.body.aleatori,'base64', 'utf8', ursa.RSA_PKCS1_PADDING);
|
||||
//descifrar aleatori, comprobar que es alfanumérico y comprobar que es igual a la session.
|
||||
if ( validator.isAlphanumeric(aleatori) ) {
|
||||
sess = req.session;
|
||||
|
||||
if (sess.aleatori && sess.aleatori == aleatori) {
|
||||
var contrasena = key.decrypt(req.body.contrasena,'base64', 'utf8', ursa.RSA_PKCS1_PADDING);
|
||||
//mayor a 1 y menor a 25
|
||||
if ( validator.isLength(contrasena, 1, 25) ) {
|
||||
//SQLITE
|
||||
vamosalla(contrasena, function(numerito){
|
||||
res.send(numerito);
|
||||
});
|
||||
|
||||
req.session.destroy();
|
||||
|
||||
}
|
||||
else {
|
||||
res.send(cosa);
|
||||
}
|
||||
}
|
||||
else {
|
||||
res.send(cosa);
|
||||
}
|
||||
|
||||
}
|
||||
else {
|
||||
res.send(cosa);
|
||||
}
|
||||
|
||||
}
|
||||
else {
|
||||
res.send(cosa);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
// A funcionar
|
||||
app.listen(confi.puerto, confi.ip);
|
||||
|
||||
75
production/kamailio/nodekami/publicindex.js
Archivo normal
75
production/kamailio/nodekami/publicindex.js
Archivo normal
@@ -0,0 +1,75 @@
|
||||
$('#crear').on('click', function() {
|
||||
$('#invi').slideDown(500,function() { $('#contrasena').focus(); });
|
||||
$('#crear').slideUp();
|
||||
});
|
||||
|
||||
$('#menu').on('click', function() {
|
||||
$('#cbp-spmenu-s1').toggleClass('cbp-spmenu-open');
|
||||
$('body').toggleClass('cbp-spmenu-push-toright');
|
||||
});
|
||||
|
||||
$(document).on('click', '#recuerda', function() {
|
||||
$(this).fadeOut('slow', function() {
|
||||
$(this).html(':)').fadeIn('slow');
|
||||
});
|
||||
$('#cbp-spmenu-s1').toggleClass('cbp-spmenu-open');
|
||||
$('body').toggleClass('cbp-spmenu-push-toright');
|
||||
});
|
||||
|
||||
|
||||
$('#t').submit( function(e) {
|
||||
e.preventDefault();
|
||||
var crypt = new JSEncrypt();
|
||||
crypt.setKey('-----BEGIN PUBLIC KEY-----MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvXjSYGTGw9kLoI6ui9mRhS2PQQNvhTRA47dXuv7dFRzG7ceL5/Ay8Uuupu2FqsKEDT3k7ADJY3FjomLANhtRmp/JI07M2SbyloRD9vegQzHEt1AaYMNMnvuL/iTjeUAHdvZNHx5GeWrGyUKs75AuiVQOzYGnAYZ0jM/wxnR5CwcTZLy8Yd7w2qGyVxUUElYMbPu2H2OWup+nqj9rvgmDQq7MgkQnsCeUnfdv93LaD1fQCxXMQ6rSjgUIy2nN5YfRGmqm8tjozqDILYIcNsn4GyNmiLobjX7gIpv7Z6Wqyn9kZJWGp2BQCRyZDC7bkjCU/FN1aMVsy36znqlQLTBsjwIDAQAB-----END PUBLIC KEY-----');
|
||||
var contrasena = $('#contrasena').val();
|
||||
var paso = $('#paso').val();
|
||||
var aleatori = $('#aleatori').val();
|
||||
var enccontrasena = crypt.encrypt(contrasena);
|
||||
var encpaso = crypt.encrypt(paso);
|
||||
var encaleatori = crypt.encrypt(aleatori);
|
||||
|
||||
$.ajax({
|
||||
dataType: 'json',
|
||||
type: 'POST',
|
||||
cache: false,
|
||||
url: '/t',
|
||||
data: { contrasena: enccontrasena, paso: encpaso, aleatori: encaleatori },
|
||||
beforeSend: function() {
|
||||
$('#carga').show();
|
||||
$('#crearsubmit, #contrasena').attr('disabled', 'disabled');
|
||||
$('#crearsubmit').css('padding-right', '10px');
|
||||
}
|
||||
}).done( function(queviene) {
|
||||
if (queviene.estado == 1) {
|
||||
var resultante = 'Tu número<span class="azul">.</span><div style="font-size: 40px; text-shadow: 2px 1px 1px #000;"><a class="azul" href="sip:' + queviene.n + ':' + $("#contrasena").val() + '@hatthieves.es:5061;transport=TLS;method=SUBSCRIBE">' + queviene.n + '</a></div>Tu contraseña<span class="azul">.</span><div style="font-size: 45px; text-shadow: 2px 1px 1px #000;">*****</div><div id="recuerda" class="blinkime azul"><img src="img/menu.png" /></div>';
|
||||
$('#cajaf').html(resultante);
|
||||
|
||||
}
|
||||
if (queviene.estado == 0) {
|
||||
$('#err').html('Clave errónea<span class="azul">!</span>').css('display','inline-block');
|
||||
$('#carga').hide();
|
||||
$('#crearsubmit, #contrasena').removeAttr('disabled');
|
||||
$('#crearsubmit').css('padding-right', '28px');
|
||||
$('#err').on('click', function() {
|
||||
$(this).hide();
|
||||
});
|
||||
}
|
||||
}).fail(function() {
|
||||
$('#err').html('<span class="azul">¡</span>Error<span class="azul">!</span>').css('display','inline-block');
|
||||
$('#carga').hide();
|
||||
$('#crearsubmit, #contrasena').removeAttr('disabled');
|
||||
$('#crearsubmit').css('padding-right', '28px');
|
||||
$('#err').on('click', function() {
|
||||
$(this).hide();
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
$('#configlinux').on('click', function() {
|
||||
$('#configs').show();
|
||||
});
|
||||
$('#cerrar').on('click', function() {
|
||||
$('#configs').hide();
|
||||
});
|
||||
|
||||
Referencia en una nueva incidencia
Block a user