Witam
Pisze bota w php do kanałów irc. Chciałem dodać taką funkcję że:
admin bota dodaje op'ów do pliku tekstowego (nick, hasło). Następnie jeśli wejdzie user na kanal to moze sie zalogowac (jesli jego nick istnieje w pliku i haslo sie zgadza) i uzyskac dostep do komend bota. Zrobilem hashowanie hasel md5(sha1(...)), ale nie wiem co sie dzieje że hasła za każdym razem mają inna postać i w efekcie nie mozna się zalogować. Sprawdzałem czy zmienne (wszystkie) zawierają przed hashowaniem prawidłowe dane i wszystko jest ok. Ale w jednej linijce wszystko mi sie zmienia i nie umie tego poprawić (IMG:
http://forum.php.pl/style_emoticons/default/sad.gif) Oto część kodu:
<?php
if(preg_match('#^\.add op (.*\S){1,30} (.*)#', $this->message, $this->tmp)) // jeśli privmsg ma postac .add op (nick) (haslo) to robi sie akcja. Zmienna $message przechowuje tresc privmsg
{
if($this->save_op( $this->tmp[1], $this->tmp[2] ))
$this->privmsg('Dodano uzytkownika do listy');
else
$this->privmsg('Nie dodano uzytkownika do listy');
}
// metoda zapisuje op'a do pliku jesli nie istnieje w bazie.
private function save_op( $what, $pass )
{
if(!file_exists($this->config['op_file']) || $this->is_op_exists( $what )) return false; else
{
$dane[] = array('nick' => $what, 'pass' => $this->hash($pass)); file_put_contents
($this->config['op_file'], serialize($dane)); return true;
}
}
// regexp ktore rozpoznaje czy user sie chce logowac:
elseif(preg_match('#^\.log in (.+)#', $this->message)) { // czyli postac .log in tajnehaslo
$this->log_in();
}
// sedno całego problemu metoda logowania
private function log_in()
{
if(!$this->is_op_exists()) return false;
else
{
$dane = $this->read_op(); // odczytuje plik i unserializuje zawartosc
foreach($dane as $numbers => $user)
{
if($user['nick'] == $this->from) // zmienna $this->from zawiera autora privmsg
{
if($user['pass'] == $this->hash(substr($this->message, 8))) // tu sie dzieja dziwne rzeczy z haslem ;/ {
$this->access[] = $this->from; // dodanie usera do zalogowanych
$this->privmsg('Zostales zalogowany');
return true;
}
else
{
$this->privmsg('Nie zostales zalogowany');
return false;
}
}
}
}
}
// metoda hashujaca
private function hash( $pass )
{
}
?>
Z gory blogosławieństwo za pomoc (IMG:
http://forum.php.pl/style_emoticons/default/tongue.gif)
Ten post edytował Apo 22.03.2006, 15:10:15