Skip to content

Commit

Permalink
Enable audit by configuration #163
Browse files Browse the repository at this point in the history
  • Loading branch information
Flávio Gomes da Silva Lisboa committed Jul 26, 2018
1 parent b345546 commit 38d5b42
Show file tree
Hide file tree
Showing 5 changed files with 148 additions and 20 deletions.
36 changes: 22 additions & 14 deletions lib/Model/BaseMember.php
Original file line number Diff line number Diff line change
Expand Up @@ -277,20 +277,7 @@ public function jsonSerialize() {
}

public function getLevelString() {
switch ($this->getLevel()) {
case self::LEVEL_NONE:
return 'Not a member';
case self::LEVEL_MEMBER:
return 'Member';
case self::LEVEL_MODERATOR:
return 'Moderator';
case self::LEVEL_ADMIN:
return 'Admin';
case self::LEVEL_OWNER:
return 'Owner';
}

return 'none';
return self::getLevelStringFromCode($this->getLevel());
}


Expand All @@ -308,4 +295,25 @@ public function getTypeString() {

return 'none';
}

/**
* @param integer $code
* @return string
*/
public static function getLevelStringFromCode($code) {
switch ($code) {
case self::LEVEL_NONE:
return 'Not a member';
case self::LEVEL_MEMBER:
return 'Member';
case self::LEVEL_MODERATOR:
return 'Moderator';
case self::LEVEL_ADMIN:
return 'Admin';
case self::LEVEL_OWNER:
return 'Owner';
}

return 'none';
}
}
47 changes: 47 additions & 0 deletions lib/Service/BaseService.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
<?php
/**
* Circles - Bring cloud-users closer together.
*
* This file is licensed under the Affero General Public License version 3 or
* later. See the COPYING file.
*
* @author Flávio Gomes da Silva Lisboa <flavio.lisboa@fgsl.eti.br>
*
* @copyright 2018
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/

namespace OCA\Circles\Service;

use OCA\Circles\AppInfo\Application;
use OC\User\User;

abstract class BaseService {
protected static $user = null;

/**
* @return User
*/
protected function getUser()
{
if (self::$user == null){
$app = new Application();
self::$user = $app->getContainer()->query('UserSession')->getUser();
}
return self::$user;
}
}
44 changes: 40 additions & 4 deletions lib/Service/CirclesService.php
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@


use Exception;
use OCA\Circles\AppInfo\Application;
use OCA\Circles\Db\CircleProviderRequest;
use OCA\Circles\Db\CirclesRequest;
use OCA\Circles\Db\FederatedLinksRequest;
Expand All @@ -47,7 +46,7 @@
use OCA\Circles\Model\Member;
use OCP\IL10N;

class CirclesService {
class CirclesService extends BaseService {

/** @var string */
private $userId;
Expand Down Expand Up @@ -150,6 +149,8 @@ public function createCircle($type, $name) {
try {
$this->circlesRequest->createCircle($circle, $this->userId);
$this->membersRequest->createMember($circle->getOwner());
$owner = $circle->getOwner()->getDisplayName();
$this->miscService->log("user $owner created circle $name");
} catch (CircleAlreadyExistsException $e) {
throw $e;
}
Expand Down Expand Up @@ -292,15 +293,23 @@ public function settingsCircle($circleUniqueId, $settings) {
$circle = $this->circlesRequest->getCircle($circleUniqueId, $this->userId);
$circle->getHigherViewer()
->hasToBeOwner();

$ak = array_keys($settings);
$formerCircleName = $circle->getName();
$changes = '';
foreach ($ak AS $k) {
if (trim($circle->getSetting($k)) !== trim($settings[$k])){
$changes .= ((empty($changes) ? '' : ' and ') . "$k to {$settings[$k]}");
}
$circle->setSetting($k, $settings[$k]);
}

$this->circlesRequest->updateCircle($circle, $this->userId);

$this->eventsService->onSettingsChange($circle);

$user = $this->getUser()->getDisplayName();
$this->miscService->log("user $user updated circle $formerCircleName changing $changes");
} catch (\Exception $e) {
throw $e;
}
Expand All @@ -325,11 +334,24 @@ public function joinCircle($circleUniqueId) {
$member = $this->membersRequest->getFreshNewMember(
$circleUniqueId, $this->userId, Member::TYPE_USER
);
$formerStatus = $member->getStatus();
$member->hasToBeAbleToJoinTheCircle();
$member->joinCircle($circle->getType());
$this->membersRequest->updateMember($member);

$this->eventsService->onMemberNew($circle, $member);

$circleName = $circle->getName();
$circleType = $circle->getType();
$memberName = $member->getDisplayName();

if ($formerStatus == Member::STATUS_INVITED){
$this->miscService->log("member $memberName accepted invitation to circle $circleName");
} else if ($type == Circle::CIRCLES_CLOSED) {
$this->miscService->log("member $memberName requested to join circle $circleName");
} else {
$this->miscService->log("member $memberName joined circle $circleName");
}
} catch (\Exception $e) {
throw $e;
}
Expand All @@ -354,11 +376,23 @@ public function leaveCircle($circleUniqueId) {
$member->hasToBeMemberOrAlmost();
$member->cantBeOwner();

$circleName = $circle->getName();
$formerStatus = $member->getStatus();
$memberName = $member->getDisplayName();

$this->eventsService->onMemberLeaving($circle, $member);

$this->membersRequest->removeMember($member);
$this->sharesRequest->removeSharesFromMember($member);

if ($formerStatus == Member::STATUS_INVITED){
$this->miscService->log("member $memberName refused invitation to circle $circleName");
} else if ($type == Circle::CIRCLES_CLOSED) {
$this->miscService->log("member $memberName cancelled invitation from circle $circleName");
} else {
$this->miscService->log("member $memberName left circle $circleName");
}

return $member;
}

Expand All @@ -381,6 +415,9 @@ public function removeCircle($circleUniqueId) {

$this->membersRequest->removeAllFromCircle($circleUniqueId);
$this->circlesRequest->destroyCircle($circleUniqueId);
$circleName = $circle->getName();
$user = $this->getUser()->getDisplayName();
$this->miscService->log("user $user destroyed circle $circleName");

}

Expand Down Expand Up @@ -527,5 +564,4 @@ public function getFilesForCircles($circleUniqueIds, $limit = -1, $offset = 0) {

return $objectIds;
}

}
19 changes: 17 additions & 2 deletions lib/Service/MembersService.php
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@
use OCP\IL10N;
use OCP\IUserManager;

class MembersService {
class MembersService extends BaseService {

/** @var string */
private $userId;
Expand Down Expand Up @@ -122,6 +122,11 @@ public function addMember($circleUniqueId, $ident, $type) {
if (!$this->addMassiveMembers($circle, $ident, $type)) {
$this->addSingleMember($circle, $ident, $type);
}

$action = ($type == Circle::CIRCLES_CLOSED ? 'invited' : 'added');
$circleName = $circle->getName();
$user = $this->getUser()->getDisplayName();
$this->miscService->log("user $user $action member $ident to circle $circleName");
} catch (\Exception $e) {
throw $e;
}
Expand Down Expand Up @@ -403,6 +408,11 @@ public function levelMember($circleUniqueId, $name, $type, $level) {
$member->levelHasToBeEditable();
$this->updateMemberLevel($circle, $member, $level);

$circleName = $circle->getName();
$levelString = Member::getLevelStringFromCode($level);
$memberName = $member->getDisplayName();
$user = $this->getUser()->getDisplayName();
$this->miscService->log("$user changed level of $memberName from circle $circleName to $levelString");
return $this->membersRequest->getMembers(
$circle->getUniqueId(), $circle->getHigherViewer()
);
Expand Down Expand Up @@ -507,6 +517,11 @@ public function removeMember($circleUniqueId, $name, $type) {

$circle->getHigherViewer()
->hasToBeHigherLevel($member->getLevel());

$user = $this->getUser()->getDisplayName();
$memberName = $member->getDisplayName();
$circleName = $circle->getName();
$this->miscService->log("user $user removed member $memberName from circle $circleName");
} catch (\Exception $e) {
throw $e;
}
Expand All @@ -532,4 +547,4 @@ public function onUserRemoved($userId) {
}


}
}
22 changes: 22 additions & 0 deletions lib/ShareByCircleProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,10 @@ public function create(IShare $share) {
'\OCA\Circles\Circles\FileSharingBroadcaster'
);

$user = $this->getUser()->getDisplayName();
$target = $share->getTarget();
$shareWith = $share->getSharedWith();
$this->miscService->log("user $user shared $target with $shareWith");
return $this->getShareById($shareId);
} catch (\Exception $e) {
throw $e;
Expand All @@ -188,6 +192,9 @@ public function update(IShare $share) {
->set('uid_initiator', $qb->createNamedParameter($share->getSharedBy()));
$qb->execute();

$user = $this->getUser()->getDisplayName();
$target = $share->getTarget();
$this->miscService->log("user $user updated shared $target");
return $share;
}

Expand All @@ -202,6 +209,10 @@ public function delete(IShare $share) {
$qb = $this->getBaseDeleteSql();
$this->limitToShareAndChildren($qb, $share->getId());

$user = $this->getUser()->getDisplayName();
$target = $share->getTarget();
$shareWith = $share->getSharedWith();
$this->miscService->log("user $user unshared $target with $shareWith");
$qb->execute();
}

Expand Down Expand Up @@ -748,4 +759,15 @@ private function shareObjectToArray(IShare $share) {
'password' => $share->getPassword()
];
}

/**
* @return User
*/
private function getUser() {
if (self::$user == null){
$app = new Application();
self::$user = $app->getContainer()->query('UserSession')->getUser();
}
return self::$user;
}
}

0 comments on commit 38d5b42

Please sign in to comment.