Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/undo-ransomware/ransomware_detection.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.dependabot/config.yml7
-rw-r--r--.travis.yml16
-rw-r--r--README.md2
-rw-r--r--appinfo/info.xml17
-rw-r--r--lib/Monitor.php9
-rw-r--r--package-lock.json117
-rw-r--r--package.json222
7 files changed, 235 insertions, 155 deletions
diff --git a/.dependabot/config.yml b/.dependabot/config.yml
new file mode 100644
index 0000000..56423d0
--- /dev/null
+++ b/.dependabot/config.yml
@@ -0,0 +1,7 @@
+version: 1
+update_configs:
+ # Keep package.json (& lockfiles) secure and up-to-date,
+ # batching pull requests daily
+ - package_manager: "javascript"
+ directory: "/"
+ update_schedule: "daily" \ No newline at end of file
diff --git a/.travis.yml b/.travis.yml
index 94d7634..06e2cd4 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -2,7 +2,7 @@ language: php
env:
global:
- - CORE_BRANCH=stable19
+ - CORE_BRANCH=stable20
- APP_NAME=ransomware_detection
- KRANKERL_VERSION=0.12.3
@@ -26,42 +26,42 @@ jobs:
- env: "CHECKSTYLE=2"
include:
- stage: test
- php: 7.2
+ php: 7.3
env:
- DB=mysql
script:
- cd apps/$APP_NAME/
- phpunit --configuration phpunit.xml
- stage: test
- php: 7.2
+ php: 7.3
env:
- DB=pgsql
script:
- cd apps/$APP_NAME/
- phpunit --configuration phpunit.xml
- stage: test
- php: 7.2
+ php: 7.3
env:
- DB=mysql
script:
- cd apps/$APP_NAME/
- phpunit --configuration phpunit.xml
- stage: test
- php: 7.2
+ php: 7.3
env:
- DB=mysql
- CHECKSTYLE=1
script:
- ./occ app:check-code $APP_NAME -c private -c strong-comparison
- stage: test
- php: 7.2
+ php: 7.3
env:
- DB=mysql
- CHECKSTYLE=2
script:
- ./occ app:check-code $APP_NAME -c deprecation
- stage: report
- php: 7.2
+ php: 7.3
env:
- DB=sqlite
script:
@@ -69,7 +69,7 @@ jobs:
- wget https://codecov.io/bash -O codecov.sh
- bash codecov.sh
- stage: release
- php: 7.2
+ php: 7.3
env:
- DB=sqlite
script:
diff --git a/README.md b/README.md
index 51a08b4..c7b9ae0 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,5 @@
+# **WARNING: Because of an open [problem](https://github.com/undo-ransomware/ransomware_detection/issues/48#issue-763599989) that can lead to the deletion of all files, I advise against using the current version 0.9.0. I have already removed this version from the Appstore.**
+
# Nextcloud Ransomware Recovery
[![Build Status](https://travis-ci.com/undo-ransomware/ransomware_detection.svg?branch=master)](https://travis-ci.com/undo-ransomware/ransomware_detection)
diff --git a/appinfo/info.xml b/appinfo/info.xml
index 9ed70cd..0c40b02 100644
--- a/appinfo/info.xml
+++ b/appinfo/info.xml
@@ -3,8 +3,21 @@
xsi:noNamespaceSchemaLocation="https://apps.nextcloud.com/schema/apps/info.xsd">
<id>ransomware_detection</id>
<name>Ransomware recovery</name>
- <summary><![CDATA[This app offers synchronization monitoring and a file storage scanner for a guided user-controlled one-step ransomare recovery.]]></summary>
- <description><![CDATA[This app monitors file operations during the synchronization to detect ransomware attacks and also offers a post infection file storage scanner, which works even if it happend that you didn't have this app installed during an attack. This is done by using generic indicators for a guided user-controlled one-step recovery utilizing the integrated file versioning methods. Sponsored by the German Federal Ministry of Education and Research, and Prototype Fund.]]></description>
+ <summary><![CDATA[Ransomware detection with a guided user-controlled one-step recovery.]]></summary>
+ <description><![CDATA[This app monitors file operations during the synchronization to detect ransomware attacks. This is done by using generic indicators for a guided user-controlled one-step recovery utilizing the integrated file versioning methods.
+
+ ## Frequently Asked Questions
+
+ * *Can the Ransomware Recovery app used together with the Nextcloud official Ransomware Protection app?*
+ Yes, it can be used together with the Nextloud official Ransomware Protection app.
+
+ * *What's the difference between the Ransomware Recovery app and the Nextcloud official Ransomware Protection app?*
+ The difference between this apps is pretty simple: The Nextcloud official Ransomware Protection app uses white- and blacklisting of file extensions to protect you against ransomware files, this only works for already known ransomware families.
+ In contrast, the Ransomware Recovery app utilises the ransomware behaviour to mark possible ransomware attacks with an user-controlled recovery to give an easy-to-use mechanism to recover from unknown ransomware families.
+
+ ## Acknowledgements
+
+ Sponsored by the German Federal Ministry of Education and Research, and Prototype Fund.]]></description>
<version>0.9.0</version>
<licence>agpl</licence>
<author mail="matthias.held@uni-konstanz.de">Matthias Held</author>
diff --git a/lib/Monitor.php b/lib/Monitor.php
index b1dad47..66cb750 100644
--- a/lib/Monitor.php
+++ b/lib/Monitor.php
@@ -136,6 +136,11 @@ class Monitor
public function analyze($paths, $mode)
{
$path = $paths[0];
+
+ if ($path === '') {
+ $this->logger->debug("Path is empty.");
+ return;
+ }
$storage = $this->rootFolder->getUserFolder($this->userId)->get(dirname($path))->getStorage();
if ($this->userId === null || $this->nestingLevel !== 0 || /*!$this->isUploadedFile($storage, $path) ||*/ $this->isCreatingSkeletonFiles()) {
@@ -216,7 +221,7 @@ class Monitor
return;
case self::DELETE:
- $this->logger->debug("Delete", ['app' => Application::APP_ID]);
+ $this->logger->debug("Delete ".$path, ['app' => Application::APP_ID]);
// reset PROPFIND_COUNT
$this->resetProfindCount();
@@ -242,7 +247,7 @@ class Monitor
return;
case self::CREATE:
- $this->logger->debug("Create", ['app' => Application::APP_ID]);
+ $this->logger->debug("Create ".$path, ['app' => Application::APP_ID]);
// reset PROPFIND_COUNT
$this->resetProfindCount();
diff --git a/package-lock.json b/package-lock.json
index ca3abd0..cb3067e 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -2548,6 +2548,16 @@
"unset-value": "^1.0.0"
}
},
+ "call-bind": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz",
+ "integrity": "sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.0"
+ }
+ },
"caller-path": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
@@ -5407,6 +5417,25 @@
"integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==",
"dev": true
},
+ "get-intrinsic": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.1.tgz",
+ "integrity": "sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1"
+ },
+ "dependencies": {
+ "has-symbols": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
+ "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==",
+ "dev": true
+ }
+ }
+ },
"get-stdin": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
@@ -5535,9 +5564,9 @@
"dev": true
},
"globule": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz",
- "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.2.tgz",
+ "integrity": "sha512-7IDTQTIu2xzXkT+6mlluidnWo+BypnbSoEVVQCGfzqnl5Ik8d3e1d4wycb8Rj9tWW+Z39uPWsdlquqiqPCd/pA==",
"dev": true,
"requires": {
"glob": "~7.1.1",
@@ -5877,9 +5906,9 @@
"dev": true
},
"in-publish": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz",
- "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.1.tgz",
+ "integrity": "sha512-oDM0kUSNFC31ShNxHKUyfZKy8ZeXZBWMjMdZHKLOk13uvT27VTL/QzRGfRUcevJhpkZAvlhPYuXkF7eNWrtyxQ==",
"dev": true
},
"indent-string": {
@@ -6146,13 +6175,10 @@
"dev": true
},
"is-finite": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
- "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
- "dev": true,
- "requires": {
- "number-is-nan": "^1.0.0"
- }
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz",
+ "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==",
+ "dev": true
},
"is-fullwidth-code-point": {
"version": "2.0.0",
@@ -7931,9 +7957,9 @@
}
},
"node-sass": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.12.0.tgz",
- "integrity": "sha512-A1Iv4oN+Iel6EPv77/HddXErL2a+gZ4uBeZUy+a8O35CFYTXhgA8MgLCWBtwpGZdCvTvQ9d+bQxX/QC36GDPpQ==",
+ "version": "4.13.1",
+ "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.13.1.tgz",
+ "integrity": "sha512-TTWFx+ZhyDx1Biiez2nB0L3YrCZ/8oHagaDalbuBSlqXgUPsdkUSzJsVxeDO9LtPB49+Fh3WQl3slABo6AotNw==",
"dev": true,
"requires": {
"async-foreach": "^0.1.3",
@@ -7943,7 +7969,7 @@
"get-stdin": "^4.0.1",
"glob": "^7.0.3",
"in-publish": "^2.0.0",
- "lodash": "^4.17.11",
+ "lodash": "^4.17.15",
"meow": "^3.7.0",
"mkdirp": "^0.5.1",
"nan": "^2.13.2",
@@ -7990,6 +8016,12 @@
"which": "^1.2.9"
}
},
+ "lodash": {
+ "version": "4.17.20",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
+ "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==",
+ "dev": true
+ },
"strip-ansi": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
@@ -8153,6 +8185,26 @@
"isobject": "^3.0.0"
}
},
+ "object.assign": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz",
+ "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.0",
+ "define-properties": "^1.1.3",
+ "has-symbols": "^1.0.1",
+ "object-keys": "^1.1.1"
+ },
+ "dependencies": {
+ "has-symbols": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
+ "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==",
+ "dev": true
+ }
+ }
+ },
"object.getownpropertydescriptors": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz",
@@ -9971,9 +10023,9 @@
}
},
"sass-graph": {
- "version": "2.2.4",
- "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz",
- "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=",
+ "version": "2.2.6",
+ "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.6.tgz",
+ "integrity": "sha512-MKuEYXFSGuRSi8FZ3A7imN1CeVn9Gpw0/SFJKdL1ejXJneI9a5rwlEZrKejhEFAA3O6yr3eIyl/WuvASvlT36g==",
"dev": true,
"requires": {
"glob": "^7.0.0",
@@ -10165,9 +10217,9 @@
"dev": true
},
"yargs": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz",
- "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=",
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.1.tgz",
+ "integrity": "sha512-huO4Fr1f9PmiJJdll5kwoS2e4GqzGSsMT3PPMpOwoVkOK8ckqAewMTZyA6LXVQWflleb/Z8oPBEvNsMft0XE+g==",
"dev": true,
"requires": {
"camelcase": "^3.0.0",
@@ -10182,16 +10234,17 @@
"string-width": "^1.0.2",
"which-module": "^1.0.0",
"y18n": "^3.2.1",
- "yargs-parser": "^5.0.0"
+ "yargs-parser": "5.0.0-security.0"
}
},
"yargs-parser": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz",
- "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=",
+ "version": "5.0.0-security.0",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0-security.0.tgz",
+ "integrity": "sha512-T69y4Ps64LNesYxeYGYPvfoMTt/7y1XtfpIslUeK4um+9Hu7hlGoRtaDLvdXb7+/tfq4opVa2HRY5xGip022rQ==",
"dev": true,
"requires": {
- "camelcase": "^3.0.0"
+ "camelcase": "^3.0.0",
+ "object.assign": "^4.1.0"
}
}
}
@@ -12054,11 +12107,11 @@
}
},
"vue-moment": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/vue-moment/-/vue-moment-4.0.0.tgz",
- "integrity": "sha512-lNkEPuA3i3A4q4TDSwOXoRF4Y2vHHdaTOSvpPyGgxoFQP8n4sUh6jU5aJj3FIMlXo5UaHLPIz5hvvpvYx9Wj0w==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/vue-moment/-/vue-moment-4.1.0.tgz",
+ "integrity": "sha512-Gzisqpg82ItlrUyiD9d0Kfru+JorW2o4mQOH06lEDZNgxci0tv/fua1Hl0bo4DozDV2JK1r52Atn/8QVCu8qQw==",
"requires": {
- "moment": "^2.11.1"
+ "moment": "^2.19.2"
}
},
"vue-multiselect": {
diff --git a/package.json b/package.json
index 4f7b9b9..e744e43 100644
--- a/package.json
+++ b/package.json
@@ -1,113 +1,113 @@
{
- "name": "ransomware_detection",
- "version": "0.1.0",
- "description": "[![Build Status](https://travis-ci.com/undo-ransomware/ransomware_detection.svg?branch=master)](https://travis-ci.com/undo-ransomware/ransomware_detection)\r [![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/undo-ransomware/ransomware_detection/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/undo-ransomware/ransomware_detection/?branch=master)\r [![codecov](https://codecov.io/gh/undo-ransomware/ransomware_detection/branch/master/graph/badge.svg)](https://codecov.io/gh/undo-ransomware/ransomware_detection)",
- "main": "main.js",
- "directories": {
- "lib": "lib",
- "test": "tests"
- },
- "scripts": {
- "dev": "cross-env NODE_ENV=development webpack --config webpack.dev.js",
- "watch": "cross-env NODE_ENV=development webpack --progress --watch --config webpack.dev.js",
- "build": "cross-env NODE_ENV=production webpack --progress --hide-modules --config webpack.prod.js",
- "lint": "eslint --ext .js,.vue src",
- "lint:fix": "eslint --ext .js,.vue src --fix",
- "test": "jest",
- "test:coverage": "jest --coverage"
- },
- "repository": {
- "type": "git",
- "url": "git+https://github.com/undo-ransomware/ransomware_detection.git"
- },
- "author": "Matthias Held",
- "license": "AGPL-3.0-or-later",
- "bugs": {
- "url": "https://github.com/undo-ransomware/ransomware_detection/issues"
- },
- "homepage": "https://github.com/undo-ransomware/ransomware_detection#readme",
- "engines": {
- "node": ">=10.0.0"
- },
- "dependencies": {
- "@polymer/iron-icon": "^3.0.1",
- "@polymer/iron-icons": "^3.0.1",
- "@polymer/iron-pages": "^3.0.1",
- "@polymer/paper-button": "^3.0.1",
- "@polymer/paper-card": "^3.0.1",
- "@polymer/paper-spinner": "^3.0.2",
- "core-js": "^3.0.1",
- "moment": "^2.24.0",
- "nextcloud-axios": "^0.2.0",
- "nextcloud-server": "^0.15.9",
- "nextcloud-vue": "^0.11.4",
- "time-elements": "^2.0.2",
- "vue": "^2.6.10",
- "vue-async-computed": "^3.7.0",
- "vue-moment": "^4.0.0",
- "vue-router": "^3.0.6",
- "vuetify": "^2.3.10",
- "vuetify-loader": "^1.6.0",
- "vuex-router-sync": "^5.0.0"
- },
- "devDependencies": {
- "@babel/core": "^7.4.5",
- "@babel/plugin-syntax-dynamic-import": "^7.2.0",
- "@babel/plugin-transform-runtime": "^7.4.4",
- "@babel/preset-env": "^7.4.5",
- "@babel/runtime": "^7.4.5",
- "@vue/test-utils": "^1.0.0-beta.29",
- "acorn": "^6.1.1",
- "babel-eslint": "^10.0.1",
- "babel-jest": "^24.8.0",
- "babel-loader": "^8.0.6",
- "cross-env": "^5.2.0",
- "css-loader": "^2.1.1",
- "deepmerge": "^4.2.2",
- "eslint": "^5.16.0",
- "eslint-config-standard": "^12.0.0",
- "eslint-friendly-formatter": "^4.0.1",
- "eslint-loader": "^2.1.1",
- "eslint-plugin-import": "^2.17.3",
- "eslint-plugin-node": "^8.0.1",
- "eslint-plugin-promise": "^4.1.1",
- "eslint-plugin-standard": "^4.0.0",
- "eslint-plugin-vue": "^5.2.2",
- "fibers": "^5.0.0",
- "file-loader": "^3.0.1",
- "jest": "^24.8.0",
- "jest-serializer-vue": "^2.0.2",
- "node-sass": "^4.12.0",
- "prettier-eslint": "^8.8.2",
- "raw-loader": "^2.0.0",
- "sass": "^1.26.11",
- "sass-loader": "^7.3.1",
- "style-loader": "^0.23.1",
- "stylelint": "^8.4.0",
- "stylelint-config-recommended-scss": "^3.3.0",
- "stylelint-webpack-plugin": "^0.10.5",
- "vue-jest": "^3.0.4",
- "vue-loader": "^15.7.0",
- "vue-style-loader": "^4.1.1",
- "vue-template-compiler": "^2.6.10",
- "webpack": "^4.32.2",
- "webpack-cli": "^3.3.2",
- "webpack-merge": "^4.2.1"
- },
- "jest": {
- "moduleFileExtensions": [
- "js",
- "vue"
- ],
- "moduleNameMapper": {
- "^@/(.*)$": "<rootDir>/src/$1"
- },
- "transform": {
- "^.+\\.js$": "<rootDir>/node_modules/babel-jest",
- ".*\\.(vue)$": "<rootDir>/node_modules/vue-jest"
- },
- "snapshotSerializers": [
- "<rootDir>/node_modules/jest-serializer-vue"
- ]
- }
+ "name": "ransomware_detection",
+ "version": "0.1.0",
+ "description": "[![Build Status](https://travis-ci.com/undo-ransomware/ransomware_detection.svg?branch=master)](https://travis-ci.com/undo-ransomware/ransomware_detection)\r [![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/undo-ransomware/ransomware_detection/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/undo-ransomware/ransomware_detection/?branch=master)\r [![codecov](https://codecov.io/gh/undo-ransomware/ransomware_detection/branch/master/graph/badge.svg)](https://codecov.io/gh/undo-ransomware/ransomware_detection)",
+ "main": "main.js",
+ "directories": {
+ "lib": "lib",
+ "test": "tests"
+ },
+ "scripts": {
+ "dev": "cross-env NODE_ENV=development webpack --config webpack.dev.js",
+ "watch": "cross-env NODE_ENV=development webpack --progress --watch --config webpack.dev.js",
+ "build": "cross-env NODE_ENV=production webpack --progress --hide-modules --config webpack.prod.js",
+ "lint": "eslint --ext .js,.vue src",
+ "lint:fix": "eslint --ext .js,.vue src --fix",
+ "test": "jest",
+ "test:coverage": "jest --coverage"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/undo-ransomware/ransomware_detection.git"
+ },
+ "author": "Matthias Held",
+ "license": "AGPL-3.0-or-later",
+ "bugs": {
+ "url": "https://github.com/undo-ransomware/ransomware_detection/issues"
+ },
+ "homepage": "https://github.com/undo-ransomware/ransomware_detection#readme",
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "dependencies": {
+ "@polymer/iron-icon": "^3.0.1",
+ "@polymer/iron-icons": "^3.0.1",
+ "@polymer/iron-pages": "^3.0.1",
+ "@polymer/paper-button": "^3.0.1",
+ "@polymer/paper-card": "^3.0.1",
+ "@polymer/paper-spinner": "^3.0.2",
+ "core-js": "^3.0.1",
+ "moment": "^2.24.0",
+ "nextcloud-axios": "^0.2.0",
+ "nextcloud-server": "^0.15.9",
+ "nextcloud-vue": "^0.11.4",
+ "time-elements": "^2.0.2",
+ "vue": "^2.6.10",
+ "vue-async-computed": "^3.7.0",
+ "vue-moment": "^4.1.0",
+ "vue-router": "^3.0.6",
+ "vuetify": "^2.3.10",
+ "vuetify-loader": "^1.6.0",
+ "vuex-router-sync": "^5.0.0"
+ },
+ "devDependencies": {
+ "@babel/core": "^7.4.5",
+ "@babel/plugin-syntax-dynamic-import": "^7.2.0",
+ "@babel/plugin-transform-runtime": "^7.4.4",
+ "@babel/preset-env": "^7.4.5",
+ "@babel/runtime": "^7.4.5",
+ "@vue/test-utils": "^1.0.0-beta.29",
+ "acorn": "^6.1.1",
+ "babel-eslint": "^10.0.1",
+ "babel-jest": "^24.8.0",
+ "babel-loader": "^8.0.6",
+ "cross-env": "^5.2.0",
+ "css-loader": "^2.1.1",
+ "deepmerge": "^4.2.2",
+ "eslint": "^5.16.0",
+ "eslint-config-standard": "^12.0.0",
+ "eslint-friendly-formatter": "^4.0.1",
+ "eslint-loader": "^2.1.1",
+ "eslint-plugin-import": "^2.17.3",
+ "eslint-plugin-node": "^8.0.1",
+ "eslint-plugin-promise": "^4.1.1",
+ "eslint-plugin-standard": "^4.0.0",
+ "eslint-plugin-vue": "^5.2.2",
+ "fibers": "^5.0.0",
+ "file-loader": "^3.0.1",
+ "jest": "^24.8.0",
+ "jest-serializer-vue": "^2.0.2",
+ "node-sass": "^4.13.1",
+ "prettier-eslint": "^8.8.2",
+ "raw-loader": "^2.0.0",
+ "sass": "^1.26.11",
+ "sass-loader": "^7.3.1",
+ "style-loader": "^0.23.1",
+ "stylelint": "^8.4.0",
+ "stylelint-config-recommended-scss": "^3.3.0",
+ "stylelint-webpack-plugin": "^0.10.5",
+ "vue-jest": "^3.0.4",
+ "vue-loader": "^15.7.0",
+ "vue-style-loader": "^4.1.1",
+ "vue-template-compiler": "^2.6.10",
+ "webpack": "^4.32.2",
+ "webpack-cli": "^3.3.2",
+ "webpack-merge": "^4.2.1"
+ },
+ "jest": {
+ "moduleFileExtensions": [
+ "js",
+ "vue"
+ ],
+ "moduleNameMapper": {
+ "^@/(.*)$": "<rootDir>/src/$1"
+ },
+ "transform": {
+ "^.+\\.js$": "<rootDir>/node_modules/babel-jest",
+ ".*\\.(vue)$": "<rootDir>/node_modules/vue-jest"
+ },
+ "snapshotSerializers": [
+ "<rootDir>/node_modules/jest-serializer-vue"
+ ]
+ }
}