Salama, Habr. Ity no lahatsoratra faha-2 amin'ny andiany ssh-chat.
Inona no hataontsika:
- Andeha ampio ny fahafahana mamorona asa famolavolana anao manokana
- Andeha isika hanampy markdown fanohanana
- Andeha isika hanampy bot fanohanana
- Ampitomboy ny fiarovana ny tenimiafina (hash sy sira)
Miala tsiny fa tsy hisy fandefasana rakitra.
endri-javatra famolavolana manokana
Amin'izao fotoana izao, ireto asa famolavolana manaraka ireto dia tohana:
@color
@bold
@underline
@hex
@box
Saingy ilaina ny manampy ny fahafahana mamorona ny asanao manokana:
Ny fiasa rehetra dia voatahiry aoΠΎΠ±ΡΠ΅ΠΊΡΠ΅ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ methods
Noho izany dia ho ampy ny mamorona asaregisterMethod
:
// parserExec.js at end
module.exports.registerMethod = function(name, func) {
methods[name] = func
}
Mila mamerina ity fomba ity ihany koa ianao rehefa avy namorona ny mpizara
// index.js at require part
const { registerMethod } = require('./parserExec')
// index.js at end
module.exports.registerMethod = registerMethod
Ankehitriny, rehefa mamorona mpizara, dia afaka misoratra anarana fomba fandrafetana. Ohatra:
const chat = require('.')
const { formatNick } = require('./format')
chat({})
chat.registerMethod('hello', function(p, name){
return 'Hi, ' + formatNick(name) + '!'
})
Fanohanana markdown
Tena mety ny Markdown, koa andao hampiasaina
// 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)
Bot
Hanao ahoana izany
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
azo antsoina hoe mampiasa @bot(botBob){Command}
Ny zava-drehetra momba ny fiasana amin'ny bots dia voalaza ao amin'ny rakitra:
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;
};
Inona no azonao atao amin'ny bots:
- Load monitor
- miisa
- Tabilao asa
Hash sy sira
Nahoana no tsy ssh keys? Satria ny fanalahidy ssh dia tsy mitovy amin'ny fitaovana samihafa
Andao hamorona rakitra iray izay ho tompon'andraikitra amin'ny fanamarinana sy famoronana tenimiafina
// 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
Misy ihany koa script ho an'ny sira sy hashing ny tenimiafina
// To generate password run node ./encryptPassword password
const { encodePass } =require('./crypto')
console.log(encodePass(process.argv[2]))
Manavao amin'ny users.json izahay fa tsy mampitaha ao amin'ny lobby.js dia mampiasa checkPassword
Ny vokany
Vokatr'izany dia manana chat amin'ny ssh izahay miaraka amin'ny fahaiza-manao famolavolana sy bots.
Source: www.habr.com