Add app for logging access to shared files
This commit is contained in:
parent
12b34d2dda
commit
4510571aa1
9 changed files with 197 additions and 0 deletions
|
@ -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);
|
||||
}
|
||||
|
|
22
apps/files_sharing_log/appinfo/app.php
Normal file
22
apps/files_sharing_log/appinfo/app.php
Normal 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');
|
44
apps/files_sharing_log/appinfo/database.xml
Normal file
44
apps/files_sharing_log/appinfo/database.xml
Normal 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>
|
10
apps/files_sharing_log/appinfo/info.xml
Normal file
10
apps/files_sharing_log/appinfo/info.xml
Normal 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>
|
1
apps/files_sharing_log/appinfo/version
Normal file
1
apps/files_sharing_log/appinfo/version
Normal file
|
@ -0,0 +1 @@
|
|||
0.1
|
7
apps/files_sharing_log/css/style.css
Normal file
7
apps/files_sharing_log/css/style.css
Normal file
|
@ -0,0 +1,7 @@
|
|||
#files_sharing_log {
|
||||
padding: 2em;
|
||||
}
|
||||
#files_sharing_log th,
|
||||
#files_sharing_log td {
|
||||
padding: 0 1em;
|
||||
}
|
21
apps/files_sharing_log/index.php
Normal file
21
apps/files_sharing_log/index.php
Normal 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();
|
34
apps/files_sharing_log/log.php
Normal file
34
apps/files_sharing_log/log.php
Normal 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;
|
||||
}
|
||||
}
|
42
apps/files_sharing_log/templates/index.php
Normal file
42
apps/files_sharing_log/templates/index.php
Normal 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>
|
Loading…
Reference in a new issue