Add app for logging access to shared files

This commit is contained in:
Bart Visscher 2012-05-30 17:46:49 +02:00
parent 12b34d2dda
commit 4510571aa1
9 changed files with 197 additions and 0 deletions

View file

@ -320,6 +320,11 @@ class OC_Filestorage_Shared extends OC_Filestorage {
public function file_get_contents($path) {
$source = $this->getSource($path);
if ($source) {
$info = array(
'target' => $this->datadir.$path,
'source' => $source,
);
OCP\Util::emitHook('OC_Filestorage_Shared', 'file_get_contents', $info);
$storage = OC_Filesystem::getStorage($source);
return $storage->file_get_contents($this->getInternalPath($source));
}
@ -329,6 +334,11 @@ class OC_Filestorage_Shared extends OC_Filestorage {
if ($this->is_writable($path)) {
$source = $this->getSource($path);
if ($source) {
$info = array(
'target' => $this->datadir.$path,
'source' => $source,
);
OCP\Util::emitHook('OC_Filestorage_Shared', 'file_put_contents', $info);
$storage = OC_Filesystem::getStorage($source);
$result = $storage->file_put_contents($this->getInternalPath($source), $data);
if ($result) {
@ -416,6 +426,12 @@ class OC_Filestorage_Shared extends OC_Filestorage {
public function fopen($path, $mode) {
$source = $this->getSource($path);
if ($source) {
$info = array(
'target' => $this->datadir.$path,
'source' => $source,
'mode' => $mode,
);
OCP\Util::emitHook('OC_Filestorage_Shared', 'fopen', $info);
$storage = OC_Filesystem::getStorage($source);
return $storage->fopen($this->getInternalPath($source), $mode);
}

View file

@ -0,0 +1,22 @@
<?php
/**
* Copyright (c) 2012 Bart Visscher <bartv@thisnet.nl>
* This file is licensed under the Affero General Public License version 3 or
* later.
* See the COPYING-README file.
*/
OC::$CLASSPATH['OC_Files_Sharing_Log'] = 'apps/files_sharing_log/log.php';
$l=new OC_L10N('files_sharing_log');
OCP\App::addNavigationEntry( array(
'id' => 'files_sharing_log_index',
'order' => 5,
'href' => OCP\Util::linkTo( 'files_sharing_log', 'index.php' ),
'icon' => OCP\Util::imagePath( 'files_sharing_log', 'icon.png' ),
'name' => $l->t('Shared files log'))
);
OCP\Util::connectHook('OC_Filestorage_Shared', 'fopen', 'OC_Files_Sharing_Log', 'fopen');
OCP\Util::connectHook('OC_Filestorage_Shared', 'file_get_contents', 'OC_Files_Sharing_Log', 'file_get_contents');
OCP\Util::connectHook('OC_Filestorage_Shared', 'file_put_contents', 'OC_Files_Sharing_Log', 'file_put_contents');

View file

@ -0,0 +1,44 @@
<?xml version="1.0" encoding="ISO-8859-1" ?>
<database>
<name>*dbname*</name>
<create>true</create>
<overwrite>false</overwrite>
<charset>latin1</charset>
<table>
<name>*dbprefix*sharing_log</name>
<declaration>
<field>
<name>user_id</name>
<type>text</type>
<notnull>true</notnull>
<length>64</length>
</field>
<field>
<name>source</name>
<type>text</type>
<notnull>true</notnull>
<length>128</length>
</field>
<field>
<name>uid_who</name>
<type>text</type>
<notnull>true</notnull>
<length>64</length>
</field>
<field>
<name>when</name>
<type>integer</type>
<default></default>
<notnull>false</notnull>
<unsigned>true</unsigned>
<length>4</length>
</field>
<field>
<name>mode</name>
<type>text</type>
<notnull>true</notnull>
<length>4</length>
</field>
</declaration>
</table>
</database>

View file

@ -0,0 +1,10 @@
<?xml version="1.0"?>
<info>
<id>files_sharing_log</id>
<name>File Shared access logging app</name>
<description>Log access to shared files</description>
<licence>AGPL</licence>
<author>Bart Visscher</author>
<require>4</require>
<shipped>true</shipped>
</info>

View file

@ -0,0 +1 @@
0.1

View file

@ -0,0 +1,7 @@
#files_sharing_log {
padding: 2em;
}
#files_sharing_log th,
#files_sharing_log td {
padding: 0 1em;
}

View file

@ -0,0 +1,21 @@
<?php
/**
* Copyright (c) 2012 Bart Visscher <bartv@thisnet.nl>
* This file is licensed under the Affero General Public License version 3 or
* later.
* See the COPYING-README file.
*/
OCP\User::checkLoggedIn();
OCP\App::checkAppEnabled('files_sharing_log');
OCP\App::setActiveNavigationEntry('files_sharing_log_index');
OCP\Util::addStyle('files_sharing_log', 'style');
$query = OCP\DB::prepare('SELECT * FROM *PREFIX*sharing_log WHERE user_id = ?');
$log = $query->execute(array(OCP\User::getUser()))->fetchAll();
$output = new OCP\Template('files_sharing_log', 'index', 'user');
$output->assign('log', $log);
$output->printPage();

View file

@ -0,0 +1,34 @@
<?php
class OC_Files_Sharing_Log {
static public function fopen($arguments) {
$target = $arguments['target'];
$source = $arguments['source'];
$mode = $arguments['mode'];
self::log($target, $source, $mode);
}
static public function file_get_contents($arguments) {
$target = $arguments['target'];
$source = $arguments['source'];
$mode = 'get';
self::log($target, $source, $mode);
}
static public function file_put_contents($arguments) {
$target = $arguments['target'];
$source = $arguments['source'];
$mode = 'put';
self::log($target, $source, $mode);
}
static public function log($target, $source, $mode) {
$query = OCP\DB::prepare("SELECT * FROM *PREFIX*sharing WHERE source = ? AND target = ?");
$info = $query->execute(array($source, $target))->fetchAll();
$info = $info[0];
//var_dump($info);
$query = OCP\DB::prepare("INSERT INTO *PREFIX*sharing_log VALUES (?,?,?,?,?)");
$query->execute(array($info['uid_owner'], $source, OCP\User::getUser(), time(), $mode));
//die;
}
}

View file

@ -0,0 +1,42 @@
<table id="files_sharing_log">
<thead>
<tr>
<th><?php echo $l->t('File') ?></th>
<th><?php echo $l->t('Who') ?></th>
<th><?php echo $l->t('When') ?></th>
<th><?php echo $l->t('What') ?></th>
</tr>
</thead>
<tbody>
<?php foreach($_['log'] as $log): ?>
<tr>
<td>
<?php echo $log['source'] ?>
</td>
<td>
<?php echo $log['uid_who'] ?>
</td>
<td>
<?php echo date('Y-m-d H:i:s', $log['when']) ?>
</td>
<td>
<?php switch ($log['mode']):
case 'get':
echo $l->t('Read');
break;
case 'put':
echo $l->t('Write');
break;
default:
if (strpos('r', $log['mode']) !== false):
echo $l->t('Read');
else:
echo $l->t('Write');
endif;
endswitch;
?>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>