summaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorBart Visscher <bartv@thisnet.nl>2012-05-30 17:46:49 +0200
committerBart Visscher <bartv@thisnet.nl>2012-06-14 17:44:41 +0200
commit4510571aa15d18d958947efd380b211a9a12aaaa (patch)
tree4e9d75b41730a4845cdb529a86f391887bbca549 /apps
parent12b34d2dda6569f0f06ead29488c19ec8b9a5a8c (diff)
downloadnextcloud-server-4510571aa15d18d958947efd380b211a9a12aaaa.tar.gz
nextcloud-server-4510571aa15d18d958947efd380b211a9a12aaaa.zip
Add app for logging access to shared files
Diffstat (limited to 'apps')
-rw-r--r--apps/files_sharing/sharedstorage.php16
-rw-r--r--apps/files_sharing_log/appinfo/app.php22
-rw-r--r--apps/files_sharing_log/appinfo/database.xml44
-rw-r--r--apps/files_sharing_log/appinfo/info.xml10
-rw-r--r--apps/files_sharing_log/appinfo/version1
-rw-r--r--apps/files_sharing_log/css/style.css7
-rw-r--r--apps/files_sharing_log/index.php21
-rw-r--r--apps/files_sharing_log/log.php34
-rw-r--r--apps/files_sharing_log/templates/index.php42
9 files changed, 197 insertions, 0 deletions
diff --git a/apps/files_sharing/sharedstorage.php b/apps/files_sharing/sharedstorage.php
index 3bb6e73035e..e8aa73dd564 100644
--- a/apps/files_sharing/sharedstorage.php
+++ b/apps/files_sharing/sharedstorage.php
@@ -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);
}
diff --git a/apps/files_sharing_log/appinfo/app.php b/apps/files_sharing_log/appinfo/app.php
new file mode 100644
index 00000000000..23cae61fbf4
--- /dev/null
+++ b/apps/files_sharing_log/appinfo/app.php
@@ -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');
diff --git a/apps/files_sharing_log/appinfo/database.xml b/apps/files_sharing_log/appinfo/database.xml
new file mode 100644
index 00000000000..92e5f0125bd
--- /dev/null
+++ b/apps/files_sharing_log/appinfo/database.xml
@@ -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>
diff --git a/apps/files_sharing_log/appinfo/info.xml b/apps/files_sharing_log/appinfo/info.xml
new file mode 100644
index 00000000000..d5e3283df3f
--- /dev/null
+++ b/apps/files_sharing_log/appinfo/info.xml
@@ -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>
diff --git a/apps/files_sharing_log/appinfo/version b/apps/files_sharing_log/appinfo/version
new file mode 100644
index 00000000000..49d59571fbf
--- /dev/null
+++ b/apps/files_sharing_log/appinfo/version
@@ -0,0 +1 @@
+0.1
diff --git a/apps/files_sharing_log/css/style.css b/apps/files_sharing_log/css/style.css
new file mode 100644
index 00000000000..069d3a45e0d
--- /dev/null
+++ b/apps/files_sharing_log/css/style.css
@@ -0,0 +1,7 @@
+#files_sharing_log {
+padding: 2em;
+}
+#files_sharing_log th,
+#files_sharing_log td {
+padding: 0 1em;
+}
diff --git a/apps/files_sharing_log/index.php b/apps/files_sharing_log/index.php
new file mode 100644
index 00000000000..ffacbdd8604
--- /dev/null
+++ b/apps/files_sharing_log/index.php
@@ -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();
diff --git a/apps/files_sharing_log/log.php b/apps/files_sharing_log/log.php
new file mode 100644
index 00000000000..e6a12b9fb1d
--- /dev/null
+++ b/apps/files_sharing_log/log.php
@@ -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;
+ }
+}
diff --git a/apps/files_sharing_log/templates/index.php b/apps/files_sharing_log/templates/index.php
new file mode 100644
index 00000000000..55bfc1d6a3c
--- /dev/null
+++ b/apps/files_sharing_log/templates/index.php
@@ -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>