]> git.mxchange.org Git - friendica.git/commitdiff
We can now delegate again like before
authorMichael <heluecht@pirati.ca>
Thu, 8 Feb 2018 22:18:34 +0000 (22:18 +0000)
committerMichael <heluecht@pirati.ca>
Thu, 8 Feb 2018 22:18:34 +0000 (22:18 +0000)
boot.php
include/security.php
mod/manage.php
src/Database/DBStructure.php

index feca5039978d67ee0c481c627ac057626454e104..6816915417b1fb694afc0dca23e1aa2833b9cd78 100644 (file)
--- a/boot.php
+++ b/boot.php
@@ -39,7 +39,7 @@ define('FRIENDICA_PLATFORM',     'Friendica');
 define('FRIENDICA_CODENAME',     'Asparagus');
 define('FRIENDICA_VERSION',      '3.6-dev');
 define('DFRN_PROTOCOL_VERSION',  '2.23');
-define('DB_UPDATE_VERSION',      1251);
+define('DB_UPDATE_VERSION',      1252);
 define('NEW_UPDATE_ROUTINE_VERSION', 1170);
 
 /**
index 45f8d86b10f4808238059e97515cd5fc3eeffb1f..af424df26c65c6122ff76a2070c936b426cdc46d 100644 (file)
@@ -107,12 +107,35 @@ function authenticate_success($user_record, $login_initial = false, $interactive
                }
        }
 
-       $r = dba::select('user', ['uid', 'username', 'nickname'],
-               ['password' => $master_record['password'], 'email' => $master_record['email'], 'account_removed' => false]);
-       if (DBM::is_result($r)) {
-               $a->identities = dba::inArray($r);
+       if ($master_record['parent-uid'] == 0) {
+               // First add our own entry
+               $a->identities = [['uid' => $master_record['uid'],
+                               'username' => $master_record['username'],
+                               'nickname' => $master_record['nickname']]];
+
+               // Then add all the children
+               $r = dba::select('user', ['uid', 'username', 'nickname'],
+                       ['parent-uid' => $master_record['uid'], 'account_removed' => false]);
+               if (DBM::is_result($r)) {
+                       $a->identities = array_merge($a->identities, dba::inArray($r));
+               }
        } else {
+               // Just ensure that the array is always defined
                $a->identities = [];
+
+               // First entry is our parent
+               $r = dba::select('user', ['uid', 'username', 'nickname'],
+                       ['uid' => $master_record['parent-uid'], 'account_removed' => false]);
+               if (DBM::is_result($r)) {
+                       $a->identities = dba::inArray($r);
+               }
+
+               // Then add all siblings
+               $r = dba::select('user', ['uid', 'username', 'nickname'],
+                       ['parent-uid' => $master_record['parent-uid'], 'account_removed' => false]);
+               if (DBM::is_result($r)) {
+                       $a->identities = array_merge($a->identities, dba::inArray($r));
+               }
        }
 
        $r = dba::p("SELECT `user`.`uid`, `user`.`username`, `user`.`nickname`
@@ -146,7 +169,7 @@ function authenticate_success($user_record, $login_initial = false, $interactive
 
                // Set the login date for all identities of the user
                dba::update('user', ['login_date' => DateTimeFormat::utcNow()],
-                       ['password' => $master_record['password'], 'email' => $master_record['email'], 'account_removed' => false]);
+                       ['parent-uid' => $master_record['uid'], 'account_removed' => false]);
        }
 
        if ($login_initial) {
index a454d414739e0bf2bc7681ec70ab7828cedcebfd..0f60e704e4d299e5566dc044e9ce92646a4d48d9 100644 (file)
@@ -35,8 +35,8 @@ function manage_post(App $a) {
 
        $submanage = $r;
 
-       $identity = ((x($_POST['identity'])) ? intval($_POST['identity']) : 0);
-       if (! $identity) {
+       $identity = (x($_POST['identity']) ? intval($_POST['identity']) : 0);
+       if (!$identity) {
                return;
        }
 
@@ -57,14 +57,36 @@ function manage_post(App $a) {
                        intval($limited_id)
                );
        } else {
-               $r = q("SELECT * FROM `user` WHERE `uid` = %d AND `email` = '%s' AND `password` = '%s' LIMIT 1",
+               // Check if the target user is one of our children
+               $r = q("SELECT * FROM `user` WHERE `uid` = %d AND `parent-uid` = %d LIMIT 1",
                        intval($identity),
-                       dbesc($orig_record['email']),
-                       dbesc($orig_record['password'])
+                       dbesc($orig_record['uid'])
                );
+
+               // Check if the target user is one of our siblings
+               if (!DBM::is_result($r) && ($orig_record['parent-uid'] != 0)) {
+                       $r = q("SELECT * FROM `user` WHERE `uid` = %d AND `parent-uid` = %d LIMIT 1",
+                               intval($identity),
+                               dbesc($orig_record['parent-uid'])
+                       );
+               }
+
+               // Check if it's our parent
+               if (!DBM::is_result($r) && ($orig_record['parent-uid'] != 0) && ($orig_record['parent-uid'] == $identity)) {
+                       $r = q("SELECT * FROM `user` WHERE `uid` = %d LIMIT 1",
+                               intval($identity)
+                       );
+               }
+
+               // Finally check if it's out own user
+               if (!DBM::is_result($r) && ($orig_record['uid'] != 0) && ($orig_record['uid'] == $identity)) {
+                       $r = q("SELECT * FROM `user` WHERE `uid` = %d LIMIT 1",
+                               intval($identity)
+                       );
+               }
        }
 
-       if (! DBM::is_result($r)) {
+       if (!DBM::is_result($r)) {
                return;
        }
 
index 9ab866de9dc0eb18701f9ffcd27fa080a2175a79..9c3c0d82a3c259f00a54992a9de27a5df9e08718 100644 (file)
@@ -1707,6 +1707,7 @@ class DBStructure
                                "comment" => "The local users",
                                "fields" => [
                                                "uid" => ["type" => "mediumint", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => ""],
+                                               "parent-uid" => ["type" => "mediumint", "not null" => "1", "default" => "0", "relation" => ["user" => "uid"], "comment" => "The parent user that has full control about this user"],
                                                "guid" => ["type" => "varchar(64)", "not null" => "1", "default" => "", "comment" => ""],
                                                "username" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],
                                                "password" => ["type" => "varchar(255)", "not null" => "1", "default" => "", "comment" => ""],