Ssh-chat, qaybta 2

Hello, Habr. Kani waa maqaalkii 2aad ee taxanaha ssh-chat.

Waxa aanu samayn doono:

  • Aynu ku darno awoodda aad ku abuuri karto hawlahaaga naqshadaynta
  • Aynu ku darno taageerada calaamadaynta
  • Aynu ku darno taageerada bot
  • Kordhi ammaanka erayga sirta ah (xash iyo milix)
    Waan ka xunahay, laakiin ma jiri doonto diritaan faylal ah.

Tilmaamaha naqshadeynta gaarka ah

Hadda, hawlaha naqshadaynta ee soo socda ayaa la taageeray:

// parserExec.js at end
module.exports.registerMethod  =  function(name, func) {
  methods[name] =  func
}

Waxaad sidoo kale u baahan tahay inaad soo celiso habkan ka dib markaad abuurto server-ka

// index.js at require part
const { registerMethod } = require('./parserExec')

// index.js at end
module.exports.registerMethod  =  registerMethod

Hadda, marka la abuurayo server, waxaan diiwaan gelin karnaa hababka qaabeynta. Tusaale:

const  chat  =  require('.')
const { formatNick } =  require('./format')

chat({})

chat.registerMethod('hello', function(p, name){
  return  'Hi, '  +  formatNick(name) +  '!'
})

Ssh-chat, qaybta 2

Taageerada Markdown

Markdown waa mid aad u habboon, markaa aan ku darno annagoo isticmaalaya terminal calaamadeysan

// 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)

Ssh-chat, qaybta 2

Bots

Sidee u shaqayn doontaa

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 waxaa lagu magacaabi karaa iyadoo la isticmaalayo @bot(botBob){Command}

Wax kasta oo loogu talagalay la shaqeynta bots ayaa lagu sifeeyay faylka:

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;
};

Ssh-chat, qaybta 2

Waxa aad ku samayn karto bots:

  • Korjoogteynta culeyska
  • diraysa
  • Guddiga shaqada

Xashiish iyo milix

Maxaa diidaya furayaasha ssh? Sababtoo ah furayaasha ssh waxay ku kala duwanaan doonaan aaladaha kala duwan
Aan abuurno fayl mas'uul ka noqon doona hubinta iyo abuurista ereyada sirta ah

// 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

Sidoo kale qoraal loogu talagalay cusbaynta iyo hashing the password

// To generate password run node ./encryptPassword password
const { encodePass } =require('./crypto')
console.log(encodePass(process.argv[2]))

Waxaan ku cusboonaysiinnaa isticmaalaha.json oo halkii aan ku barbar dhigi lahayn lobby.js waxaan isticmaalnaa CheckPassword

Natiijada

Natiijo ahaan, waxaan ku leennahay sheekeysiga ssh oo leh awood naqshadeyn iyo bots.
Kaydka ugu dambeeya

Source: www.habr.com

Add a comment