Bonjou, Habr. Sa a se 2yèm atik nan seri ssh-chat la.
Kisa nou pral fè:
- Ann ajoute kapasite pou kreye pwòp fonksyon konsepsyon ou
- Ann ajoute sipò markdown
- Ann ajoute sipò bot
- Ogmante sekirite modpas (hash ak sèl)
Padon, men pap gen okenn voye fichye yo.
Karakteristik konsepsyon koutim
Kounye a, fonksyon konsepsyon sa yo sipòte:
@color
@bold
@underline
@hex
@box
Men, li vo ajoute kapasite nan kreye pwòp fonksyon ou:
Tout fonksyon yo estoke nanобъекте под названием methods
Se konsa, li pral ase yo kreye yon fonksyonregisterMethod
:
// parserExec.js at end
module.exports.registerMethod = function(name, func) {
methods[name] = func
}
Ou bezwen tou retounen metòd sa a apre ou fin kreye sèvè a
// index.js at require part
const { registerMethod } = require('./parserExec')
// index.js at end
module.exports.registerMethod = registerMethod
Koulye a, lè w ap kreye yon sèvè, nou ka anrejistre metòd fòma. Egzanp:
const chat = require('.')
const { formatNick } = require('./format')
chat({})
chat.registerMethod('hello', function(p, name){
return 'Hi, ' + formatNick(name) + '!'
})
Markdown sipò
Markdown trè pratik, kidonk ann ajoute li lè l sèvi avèk
// format.js near require
const marked = require('marked');
const TerminalRenderer = require('marked-terminal');
marked.setOptions({
renderer: new TerminalRenderer()
});
// format.js line 23
message = marked(message)
Bots
Ki jan li pral travay
let writeBotBob = chat.registerBot({
name: 'botBob',
onConnect(nick, write){
write('@hello{' + nick + '}')
},
onDisconnect(nick, write){},
onMessage(nick, message, write) {
if(message == 'botBob!') write('I'm here')
},
onCommand(command, write) {
write('Doing ' + command)
}
})
onCommand
ka rele lè l sèvi avèk @bot(botBob){Command}
Tout bagay pou travay ak bot yo dekri nan dosye a:
let bots = []; // Все боты
let onWrite = () => {};
function getWrite(bot) { // Генерирует метод отправки сообщения для бота
return msg => {
onWrite(bot.name, msg);
};
}
module.exports.message = function message(nick, message) { // index.js выполнит эту функцию после отправки сообщения
bots.forEach(bot => {
try {
bot.onMessage(nick, message, getWrite(bot));
} catch (e) {
console.error(e);
}
});
};
module.exports.connect = function message(nick) { // При соединении
bots.forEach(bot => {
try {
bot.onConnect(nick, getWrite(bot));
} catch (e) {
console.error(e);
}
});
};
module.exports.disConnect = function message(nick) { // При отсоединении
bots.forEach(bot => {
try {
bot.onDisconnect(nick, message, getWrite(bot));
} catch (e) {
console.error(e);
}
});
};
module.exports.command = function message(name, message) { // При выполнении команды
bots.forEach(bot => {
if (bot.name == name) {
try {
bot.onCommand(message, getWrite(bot));
} catch (e) {
console.error(e);
}
}
});
};
module.exports.registerBot = function(bot) {
bots.push(bot);
return getWrite(bot)
};
module.exports.onMessage = func => {
onWrite = func;
};
Ki sa ou ka fè ak bots:
- Chaj pou kontwole
- deplwaye
- Tablo travay
Hash ak sèl
Poukisa yo pa ssh kle? Paske kle ssh yo pral diferan sou aparèy diferan
Ann kreye yon dosye ki pral responsab pou tcheke ak kreye modpas
// crypto.js
const crypto = require('crypto');
function genRandomString(length) {
return crypto
.randomBytes(Math.ceil(length / 2))
.toString('hex')
.slice(0, length);
}
function sha512(password, salt){
const hash = crypto.createHmac('sha512', salt); /** Hashing algorithm sha512 */
hash.update(password);
const value = hash.digest('hex');
return value
};
function checkPass(pass, obj){
return obj.password == sha512(pass, obj.salt)
}
function encodePass(pass){
const salt = genRandomString(16)
return JSON.stringify({
salt,
password: sha512(pass, salt)
})
}
module.exports.encodePass = encodePass
module.exports.checkPass = checkPass
Epitou yon script pou sale ak hashing modpas la
// To generate password run node ./encryptPassword password
const { encodePass } =require('./crypto')
console.log(encodePass(process.argv[2]))
Nou mete ajou nan users.json epi olye pou n konpare nan lobby.js nou itilize checkPassword
Total
Kòm yon rezilta, nou gen yon chat atravè ssh ak kapasite konsepsyon ak bots.
Sous: www.habr.com