mirror of
https://github.com/Shadowss/TravianZ.git
synced 2026-08-12 14:21:03 +00:00
Fix sitter
Fix sitter
This commit is contained in:
+15
-2
@@ -385,10 +385,23 @@ class Account {
|
||||
}
|
||||
|
||||
setcookie("COOKUSR", $username, time() + COOKIE_EXPIRE, COOKIE_PATH);
|
||||
$session->login($username);
|
||||
|
||||
// dupa Login(), ca sa nu fie suprascris de initializarea sesiunii
|
||||
/**
|
||||
* BUG CRITIC REPARAT: aceasta linie era DUPA $session->login().
|
||||
*
|
||||
* Session::Login() se termina cu header("Location: dorf1.php"); exit;
|
||||
* deci tot ce urma dupa apel era cod mort. $_SESSION['sitter_uid'] nu se
|
||||
* scria NICIODATA, sesiunea sitterului arata identic cu a proprietarului
|
||||
* si toate verificarile de permisiuni treceau - indiferent ce bifai in
|
||||
* interfata.
|
||||
*
|
||||
* Setarea INAINTE de Login() are si un avantaj: Login() apeleaza intern
|
||||
* PopulateVar(), care citeste chiar aceasta cheie, deci permisiunile sunt
|
||||
* corecte inca din prima cerere, nu de la a doua.
|
||||
*/
|
||||
$_SESSION['sitter_uid'] = $sitterUid;
|
||||
|
||||
$session->login($username);
|
||||
}
|
||||
|
||||
private function Logout() {
|
||||
|
||||
@@ -246,10 +246,18 @@ trait DatabaseUserQueries {
|
||||
}
|
||||
|
||||
// no need to cache this method
|
||||
/**
|
||||
* Conturile pe care utilizatorul $uid e sitter.
|
||||
*
|
||||
* Intoarce si sloturile si mastile de permisiuni, ca pagina de cont sa
|
||||
* poata afisa CE drepturi i-a dat fiecare proprietar. Inainte se selecta
|
||||
* doar "id", deci sitterul nu avea de unde sa stie ce are voie sa faca.
|
||||
* Cheia 'id' ramane neschimbata, deci codul existent nu e afectat.
|
||||
*/
|
||||
function getSitee($uid) {
|
||||
list($uid) = $this->escape_input((int) $uid);
|
||||
|
||||
$q = "SELECT id from " . TB_PREFIX . "users where sit1 = $uid or sit2 = $uid";
|
||||
$q = "SELECT id, sit1, sit2, sit1_perm, sit2_perm from " . TB_PREFIX . "users where sit1 = $uid or sit2 = $uid";
|
||||
$result = mysqli_query($this->dblink,$q);
|
||||
return $this->mysqli_fetch_all($result);
|
||||
}
|
||||
|
||||
@@ -4392,4 +4392,5 @@ tz_def('SITTER_P_REINF', 'send reinforcements');
|
||||
tz_def('SITTER_P_RES', 'send resources to other players');
|
||||
tz_def('SITTER_P_GOLD', 'spend Gold');
|
||||
tz_def('SITTER_P_DENIED', 'Your sitter permissions do not allow this action.');
|
||||
|
||||
tz_def('SITTER_P_HINT', 'Permissions for the new sitter:');
|
||||
tz_def('SITTER_P_NOT_SITTING', 'You are not a sitter on any account.');
|
||||
|
||||
@@ -4334,4 +4334,6 @@ tz_def('SITTER_P_RAID', 'envoyer des raids');
|
||||
tz_def('SITTER_P_REINF', 'envoyer des renforts');
|
||||
tz_def('SITTER_P_RES', 'envoyer des ressources à d’autres joueurs');
|
||||
tz_def('SITTER_P_GOLD', 'dépenser de l’or');
|
||||
tz_def('SITTER_P_DENIED', 'Vos permissions de sitter ne vous permettent pas d’effectuer cette action.');
|
||||
tz_def('SITTER_P_DENIED', 'Vos permissions de sitter ne vous permettent pas d’effectuer cette action.');
|
||||
tz_def('SITTER_P_HINT', 'Permissions du nouveau sitter :');
|
||||
tz_def('SITTER_P_NOT_SITTING', 'Vous n\'etes sitter sur aucun compte.');
|
||||
@@ -4129,4 +4129,6 @@ tz_def('SITTER_P_RAID', 'trimite raiduri');
|
||||
tz_def('SITTER_P_REINF', 'trimite intariri');
|
||||
tz_def('SITTER_P_RES', 'trimite resurse altor jucatori');
|
||||
tz_def('SITTER_P_GOLD', 'cheltuie aur');
|
||||
tz_def('SITTER_P_DENIED', 'Permisiunile tale de sitter nu iti permit aceasta actiune.');
|
||||
tz_def('SITTER_P_DENIED', 'Permisiunile tale de sitter nu iti permit aceasta actiune.');
|
||||
tz_def('SITTER_P_HINT', 'Permisiuni pentru noul sitter:');
|
||||
tz_def('SITTER_P_NOT_SITTING', 'Nu esti sitter pe niciun cont.');
|
||||
@@ -30,9 +30,37 @@ class Profile {
|
||||
'villages' => []
|
||||
];
|
||||
|
||||
/**
|
||||
* Sesiunea curenta e a unui sitter?
|
||||
* Verificat defensiv, ca Profile.php sa mearga si daca ajunge intr-un
|
||||
* context unde $session inca nu e initializat.
|
||||
*/
|
||||
private function isSitter() {
|
||||
global $session;
|
||||
|
||||
return isset($session) && is_object($session)
|
||||
&& method_exists($session, 'isSitterSession')
|
||||
&& $session->isSitterSession();
|
||||
}
|
||||
|
||||
public function procProfile($post) {
|
||||
global $session;
|
||||
|
||||
/**
|
||||
* RESTRICTIE SITTER - al doilea nivel, cel care conteaza.
|
||||
*
|
||||
* spieler.php blocheaza deja accesul la taburi, dar aceasta metoda e
|
||||
* punctul unic prin care trec TOATE formularele de profil (p1..p5:
|
||||
* descriere, preferinte, cont, parola, vacanta). Un sitter putea
|
||||
* trimite POST-ul direct catre spieler.php, fara sa deschida tabul.
|
||||
*
|
||||
* Aici se opreste definitiv: un sitter nu modifica setarile
|
||||
* proprietarului, indiferent pe unde intra.
|
||||
*/
|
||||
if ($this->isSitter()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (isset($post['ft'])) {
|
||||
switch ($post['ft']) {
|
||||
case "p1":
|
||||
@@ -214,6 +242,21 @@ class Profile {
|
||||
}
|
||||
|
||||
public function procSpecial($get) {
|
||||
|
||||
/**
|
||||
* Aceleasi motive ca la procProfile(). Actiunile de aici sunt chiar mai
|
||||
* sensibile, fiindca se declanseaza prin simplu GET:
|
||||
* e=2 removeMeSit - se scoate ca sitter de pe un cont
|
||||
* e=3 removeSitter - sterge un sitter al proprietarului (deci un
|
||||
* sitter l-ar fi putut elimina pe celalalt, sau
|
||||
* pe sine, ca sa scape de urme)
|
||||
* e=4 cancelDeleting - anuleaza stergerea contului proprietarului
|
||||
* Niciuna nu are ce cauta intr-o sesiune de sitter.
|
||||
*/
|
||||
if ($this->isSitter()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (isset($get['e'])) {
|
||||
switch ($get['e']) {
|
||||
case 2:
|
||||
|
||||
Reference in New Issue
Block a user