
Cały system jest oparty nie o plik XML lecz o serwer w php i bazę w mySQL'u.
Serwer składa się z 2-óch plików i zajmuje 5,4 KB

Dodatkową zaletą jest system autoryzacji pozwalający na wyświetlanie newsów tylko dla danej grupy (na razie jest to tylko tymczasowe i dosyć trywailne rozwiązanie), np tylko grupa trzymająca browar dostanie newsa: w piątek idziemy się integrować

Wszystko komunikuje się w protokole będącym "nakładką" na HTTP oraz małym autorkskim systemikiem podawania danych jakim jest DFML.
Posiadamy małe zabezpieczenie połączenia (tzn. porównywanie hasha hasła na obu komputerach) które jest związane z autoryzacją użytkownika.
connect.php
<00WallTray><!WallTray> <?php /** * WallTrayServer server info send application * * Server version: 0.6.2 * Protocole version: v1b * * @author Artek Wiśniewski <aart3k@gmail.pl> * @version $Id: connect.php,v 0.6 2006/01/15 20:35:38 aart3k Exp $ * @package WallTrayServer */ include('config.php'); if(!$dbConnention OR !$dbBase) // Secure $_GET } if($_GET['mode'] == 'hash'){ // Authorization level 1 // Check for existement of ConnectionId $resHash = mysql_query('SELECT '.$config['usrTblConnId'].' FROM '.$config['usrTbl'].' WHERE '.$config['usrTblUsrNam'].'=''.$_GET['user'].'' LIMIT 1'); // Doing first level of Auth 'UPDATE '.$config['usrTbl'].' SET '.$config['usrTblConnId'].'= ''.$hashingId.'/'.$expTime.'' WHERE '.$config['usrTblUsrNam'].'=''.$_GET['user'].'' LIMIT 1' ); if($result) <00hashtype>'.$config['usrTblHashTp'].'<!hashtype>'; else } elseif($_GET['mode'] == 'data') { // Authorization level 2 'SELECT '.$config['usrTblUsrNam'].','.$config['usrTblPasswd'].','.$config['usrTblConnId'].','.$config['usrTblPrivil'].' FROM '.$config['usrTbl'].' WHERE '.$config['usrTblUsrNam'].'=''.$_GET['user'].'' LIMIT 1' $userName = $userData[0]; $userPass = $userData[1]; $userPrivileiges = $userData[2]; // Timeout // Hashing by Boczek (my concept ^^) for($i=0; $i<strlen($userPass);$i++){ $tmp=ord($userPass{$i}); $tmp=($tmp*$userHash)%256; $code.=$tmp; } if($code != $_GET['pass']) else{ // TODO: Anormal tables // Get data from DB $id = $data[0]; $date = $data[1]; $title = $data[2]; $text = $data[3]; $link = $data[4]; $prio = $data[5]; $priv = $data[6]; // Skipping old events continue; // TODO: sign parsing /*if($userPrivileges '.$priv.') $avalabile = true; else $avalabile = false;'*/ ); if($avalabile){ <00'.$id.'>'.$date.'<!'.$id.'
>
<00'.$id.':t>'.$text.'<!'.$id.':t> <00'.$id.':l>'.$link.'<!'.$id.':l> <00'.$id.'>'.$prio.'<!'.$id.'
>';
} } 'UPDATE '.$config['usrTbl'].' SET '.$config['usrTblConnId'].'= 'none' WHERE '.$config['usrTblUsrNam'].'=''.$_GET['user'].'' LIMIT 1' ); } }else{ } /** * Error codes ^^: * 00: Required data not present * 01: Database connection. * 02: Database update failed. * 03: User Authorization not found in DB * 04: Operation timeout * 05: Bad hash sent * 06: ConnectionId exists and is valid! * 07: No user like %user * * Priors: * 0: info * 1: alert * 2: stop */ ?>
config.php
<?php /** * WallTrayServer config file * * @author Artek Wiśniewski <aart3k@gmail.pl> * @version $Id: config.php,v 1.00 2006/01/08 20:35:38 aart3k Exp $ * @package WallTrayServer */ 'dbHost' => '', 'dbUser' => '', 'dbPass' => '', 'dbBase' => '', 'timeout' => 120, //Czas ważności połączenia (w sek) 'skipOldEvents' => true, 'usrTbl' => '_members', // Tabela z użytkownikami 'usrTblUsrNam' => 'name', //Pole z nazwa/loginem uzytkonika 'usrTblPasswd' => 'wt_md5pass', //Pole z zakodowanym hasłem 'usrTblConnId' => 'wt_connectid', //Pole w tabeli z identyfikatorem połącznia oraz czasem ważności 'usrTblPrivil' => 'wt_privlevel', //Pole w tabeli z poziomem uprawnień 'usrTblHashTp' => 1, //Sposob kodowania hasla w tabeli (na razie supportowane md5, dojdzie sha1 i inne) 1= md5 / 2= sha1 'evntTbl' => 'wt_events', //Tabela z eventami dla WT 'evntTblType' => 'normal', //Typ tabeli: normalna (domyslna dla WT)|własna gdybys chciał wykorzystać dane z innej tabeli //Pola tabeli niestandardowej //NIE ZAIMPLEMENTOWANE!! 'custTblId' => '', 'custTblTopic' => '', 'custTblDate' => '', 'custTblText' => '', 'custTblLink' => '', 'custTblPrio' => '', 'custTblPriv' => '', ); ?>
Programowałem proceduralnie (chyba?) gdyz nie widziałem zbytniej potrzeby zaśmiecania pamięci objektami.
klient: Stronka z Downloadem
Przykładowy kanał informacji jest od razu ustawiany po instalacji WT z tym że należy ustawić:
user: public
pass: public
Dodam iż klient jest w fazie alpha więc proszę nie oczekiwać za wiele

_____
AHA:
Jeszcze tymczasowy klient w php jakby ktoś się chciał pobawić z protokołem

<? $userPass = '4c9184f37cff01bcdc32dc486ec36961'; $userHash = 29; for($i=0; $i<strlen($userPass);$i++){ $tmp=ord($userPass{$i}); $tmp=($tmp*$userHash)%256; $code.=$tmp; } ?>
$code jest juz zhashowanym hasłem.