Giter Club home page Giter Club logo

market's Introduction

market

๐Ÿช MarketPlace/AppStore integration

Build Status Quality Gate Status Security Rating Coverage

See the Frontend development document to get going.

market's People

Contributors

alexandbear avatar deepdiver1975 avatar dependabot-preview[bot] avatar dependabot-support avatar dependabot[bot] avatar dpakach avatar dschmidt avatar felixheidecke avatar fschade avatar geraldleikam avatar grgprarup avatar hanagemela avatar iljan avatar individual-it avatar jammingben avatar jasson99 avatar jnweiger avatar kiranparajuli589 avatar micbar avatar mmattel avatar patrickjahns avatar phil-davis avatar phisch avatar prsnbrg avatar pvince81 avatar sagargi avatar snyk-bot avatar swikritit avatar tboerger avatar vicdeo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

market's Issues

Auto-enable after install

I suggest that market::install and the UI automatically enable the app, it's much more intuitive.

In the event that an admin wants to install without enabling, if that's really needed, we could add an option market::install someapp --no-enable

@DeepDiver1975 @SergioBertolinSG @VicDeo thoughts ?

Tell admins upfront when market doesn't have compatible update versions

Not sure if we have this already in core, please look into it.

Goal is to avoid surprises and be able to know before the upgrade whether the market apps will work with the new version. For this, need to fetch the metadata of the apps for the next OC version.

If apps not compatible, display a warning about these that say they will be disabled and not available.
The admin can then decide to either upgrade later once these apps are available or skip the warning.

@VicDeo @DeepDiver1975

App fails to install but UI says 'installed'

  • Opened the market app
  • Tried to install user_ldap
  • Network tab shows:
    {"error":true,"message":"An exception occurred while executing 'CREATE TABLE oc_ldap_user_mapping (ldap_dnVARCHAR(255) DEFAULT '' NOT NULL,owncloud_nameVARCHAR(255) DEFAULT '' NOT NULL,directory_uuid VARCHAR(255) DEFAULT '' NOT NULL, UNIQUE INDEX ldap_dn_users (ldap_dn), PRIMARY KEY(owncloud_name)) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin ENGINE = InnoDB ROW_FORMAT = compressed':\n\nSQLSTATE[42S01]: Base table or view already exists: 1050 Table 'oc_ldap_user_mapping' already exists"}
  • UI Shows:
    screen shot 2017-05-09 at 12 21 51

DB creation migration of apps randomly not running

Steps

  1. Checkout core master
  2. Delete "apps/customgroups" if any available
  3. Setup OC from scratch
  4. Clear cookies and cache in browser
  5. Go to marketplace
  6. Install "customgroups" app
  7. Refresh the page

Expected result

App enabled properly.

Actual result

Internal server error.

{"reqId":"6OKjs4ULe7a6l47pujXB","level":3,"time":"2017-04-24T13:57:03+00:00","remoteAddr":"127.0.0.1","user":"admin","app":"index","method":"GET","url":"\/owncloud\/index.php\/apps\/market\/apps","message":"Exception: {\"Exception\":\"Doctrine\\\\DBAL\\\\Exception\\\\TableNotFoundException\",\"Message\":\"An exception occurred while executing 'SELECT m.`group_id`, m.`user_id`, m.`role`, g.`uri`, g.`display_name` FROM `oc_custom_group_member` m, `oc_custom_group` g WHERE (g.`group_id` = m.`group_id`) AND (`user_id` = ?) ORDER BY m.`group_id` ASC' with params [\\\"admin\\\"]:\\n\\nSQLSTATE[42S02]: Base table or view not found: 1146 Table 'owncloud.oc_custom_group_member' doesn't exist\",\"Code\":0,\"Trace\":\"#0 \\\/srv\\\/www\\\/htdocs\\\/owncloud\\\/lib\\\/composer\\\/doctrine\\\/dbal\\\/lib\\\/Doctrine\\\/DBAL\\\/DBALException.php(128): Doctrine\\\\DBAL\\\\Driver\\\\AbstractMySQLDriver->convertException('An exception oc...', Object(Doctrine\\\\DBAL\\\\Driver\\\\PDOException))\\n#1 \\\/srv\\\/www\\\/htdocs\\\/owncloud\\\/lib\\\/composer\\\/doctrine\\\/dbal\\\/lib\\\/Doctrine\\\/DBAL\\\/Connection.php(855): Doctrine\\\\DBAL\\\\DBALException::driverExceptionDuringQuery(Object(Doctrine\\\\DBAL\\\\Driver\\\\PDOMySql\\\\Driver), Object(Doctrine\\\\DBAL\\\\Driver\\\\PDOException), 'SELECT m.`group...', Array)\\n#2 \\\/srv\\\/www\\\/htdocs\\\/owncloud\\\/lib\\\/private\\\/DB\\\/Connection.php(190): Doctrine\\\\DBAL\\\\Connection->executeQuery('SELECT m.`group...', Array, Array, NULL)\\n#3 \\\/srv\\\/www\\\/htdocs\\\/owncloud\\\/lib\\\/composer\\\/doctrine\\\/dbal\\\/lib\\\/Doctrine\\\/DBAL\\\/Query\\\/QueryBuilder.php(206): OC\\\\DB\\\\Connection->executeQuery('SELECT m.`group...', Array, Array)\\n#4 \\\/srv\\\/www\\\/htdocs\\\/owncloud\\\/lib\\\/private\\\/DB\\\/QueryBuilder\\\/QueryBuilder.php(141): Doctrine\\\\DBAL\\\\Query\\\\QueryBuilder->execute()\\n#5 \\\/srv\\\/www\\\/htdocs\\\/owncloud\\\/apps\\\/customgroups\\\/lib\\\/CustomGroupsDatabaseHandler.php(128): OC\\\\DB\\\\QueryBuilder\\\\QueryBuilder->execute()\\n#6 \\\/srv\\\/www\\\/htdocs\\\/owncloud\\\/apps\\\/customgroups\\\/lib\\\/CustomGroupsBackend.php(82): OCA\\\\CustomGroups\\\\CustomGroupsDatabaseHandler->getUserMemberships('admin', NULL)\\n#7 \\\/srv\\\/www\\\/htdocs\\\/owncloud\\\/lib\\\/private\\\/Group\\\/Manager.php(300): OCA\\\\CustomGroups\\\\CustomGroupsBackend->getUserGroups('admin')\\n#8 \\\/srv\\\/www\\\/htdocs\\\/owncloud\\\/lib\\\/private\\\/legacy\\\/util.php(249): OC\\\\Group\\\\Manager->getUserIdGroups('admin')\\n#9 \\\/srv\\\/www\\\/htdocs\\\/owncloud\\\/lib\\\/base.php(909): OC_Util::setupFS()\\n#10 \\\/srv\\\/www\\\/htdocs\\\/owncloud\\\/index.php(49): OC::handleRequest()\\n#11 {main}\",\"File\":\"\\\/srv\\\/www\\\/htdocs\\\/owncloud\\\/lib\\\/composer\\\/doctrine\\\/dbal\\\/lib\\\/Doctrine\\\/DBAL\\\/Driver\\\/AbstractMySQLDriver.php\",\"Line\":53}"}

The DB creation migrations didn't run correctly.

Note that if you redo the same steps but keep the "customgroups" folder, then it will work fine.

Happens fairly consistently.

@SergioBertolinSG I remember you observed this once.

@DeepDiver1975

Display an application's version information

Recently, while attempting to report an issue about the Custom Groups marketplace application, it would have been handy to see the application's version information, when viewing the details of the application from the market integration within ownCloud (below), instead of having to get it from the marketplace.

Can the version be added to the app's meta information, alongside its category (or somewhere else, nearby) please?

app version meta information

Apps cannot be installed using UI button.

Steps to reproduce

  1. Having environment set up with certificate provided and vpn connected do:
  2. Go to market app.
  3. Choose an app available (for example, contacts one), click in more.
  4. Try to install it (click in install button).

Expected behaviour

Contacts is installed.

Actual behaviour

It cannot be installed.

Server configuration

Operating system:
Ubuntu 14.04

Web server:
Apache

Database:
MySQL

PHP version:
7.0

ownCloud version: (see ownCloud admin page)
{"installed":"true","maintenance":"false","needsDbUpgrade":"false","version":"10.0.0.7","versionstring":"10.0.0 RC1","edition":"Community","productname":"ownCloud"}

Updated from an older ownCloud or fresh install:
Fresh

The content of config/config.php:


Are you using external storage, if yes which one: local/smb/sftp/...
No.

Are you using encryption:
No

Logs

{"reqId":"EqhiFDfLNd9ZXs1g8U12","level":3,"time":"2017-04-21T06:57:41+00:00","remoteAddr":"127.0.0.1","user":"ser","app":"PHP","method":"POST","url":"\/tarball_20-04-17\/index.php\/apps\/market\/apps\/contacts\/install","message":"Undefined index: appdata at \/var\/www\/html\/tarball_20-04-17\/lib\/private\/Installer.php#336"}

Client configuration

Browser
Firefox

Logs

Improve install button behaviour

Steps

  1. Having market app well configured, access to an app description
  2. Click in install button.

Current behaviour:

Nothing happens in the UI. It doesn't tell if the installation is finished, ok or what has happened
if you click the install button again there is an exception in the logs saying that the app is already installed but nothing in the ui.

Expected behaviour

The UI tells you that the app has been installed correctly and the install button is no longer available to be pressed again.

Maybe change the install button for an uninstall button.

Cache never gets filled

The cache for the marketplace API calls never gets filled because it always returns the empty cache value:

		if ($this->cacheFactory->isAvailable()) {
			$cache = $this->cacheFactory->create('ocmp');
			$data = $cache->get($key);
			return json_decode($data, true);
		}

Button "install" -> "installed" after installation

If I install an app, for example the calendar app, I see the picture and 2 buttons, update and install.

Install is in blue. I click on install, the page reloads and now the button for install is white.

Should the button now say "installed" ?

API Ideas and Proposal

I gave this more thought and changed the (in hindsight not so bright) approach I had before to a more flexible and professional way of doing JSON API. I changed a big part of the text so it won't read as fluent as it did before โ€ฆ still, it gets my point across.


Reworking the Market API to stay future proof and improve the user experience.

Current state

Currently, there are two routes for listing apps and bundles available.

โ€ฆ/api/apps returns all available apps/themes and their respective details in a single list.

๐Ÿ’š PROS:

  • Only one http request is necessary to get all the data.

๐Ÿ’” CONS:

  • Loading all the data at once is pricy timewise and currently takes around 5 seconds wich blocks the UI.
  • Long loading times will increase with the amout of apps provided.
  • Updating information about a singe app requires fetching the whole bunch again, thusly resetting all other apps into the loadings state wich, in turn, blocks the whole UI again.

The same goes for โ€ฆ/api/bundles since the bundle also contains all detail data for the apps it contains and falls into the same trap as apps.

Proposal

I overhauled the apps and bundles API in the following two pages to minimse loading times and allow for future features such as lazy- and partial-loading, and overall fast app views.

Querys

Method: GET
Route: /apps

allow for a simple query to fetch filtered data.

โ€ฆ/api/apps?filter[type]=app&page=1&limit=5

Returns the first five apps in the database.

โ€ฆ/api/apps?filter[type]=apps&filter[downloads]=true&sort[downloads]=desc&limit=10

Returns the top 10 downloaded apps.

โ€ฆ/api/apps/contacts

Is guess you know what that does. Aaaaand it's already implemented :-)

My point

Basing the API on the conventions and format shown on by json:api and using it throughout the ownCloud Project, we could faster agree on, code and use JSON APIs all over the place. There are many PHP server-libraries already available.

Let's make JSON APIs future-proof and flexible.

Hard-coded absolute paths in build

~/temp/owncloud-10.0.0RC4/apps/market/js
  % grep -re checkout * 
Component.options.__file = "/home/sign/administration-internal/release-scripts/temp-checkout473751/market/src/components/Rating.vue"
Component.options.__file = "/home/sign/administration-internal/release-scripts/temp-checkout473751/market/src/App.vue"
Component.options.__file = "/home/sign/administration-internal/release-scripts/temp-checkout473751/market/src/components/Details.vue"
Component.options.__file = "/home/sign/administration-internal/release-scripts/temp-checkout473751/market/src/components/List.vue"
Component.options.__file = "/home/sign/administration-internal/release-scripts/temp-checkout473751/market/src/components/Navigation.vue"
Component.options.__file = "/home/sign/administration-internal/release-scripts/temp-checkout473751/market/src/components/Tile.vue"

Strangely the tarball works on one instance and the market app loads properly.
But in another instance I get JS errors:
market-js-error

@felixheidecke please fix the absolute paths issue. I hope this won't require a full retesting of the app.

I'll try and find out why one instance works fine but not the other.

Adjust update process to work with market

Here is how the core update must be work when running occ upgrade

  1. Check for apps that have missing app code, store in a list
  2. Check for apps that are present but are incompatible, store in same list
  3. Check market connectivity. If no internet => fail with message "please install app manually with tarball, or disable app with occ app:disable"
  4. For each app, try to retrieve and install from the market (but don't enable). If an app is missing, abort and display the message above.
  5. When all went well, enable all apps (or only the "authenitcation" ones) <= to be discussed, maybe the update process takes care of that already

This should already properly cover both unbundling and future app upgrades.

@VicDeo can you synergize the PRs to make them behave as per the steps above ?

cc @DeepDiver1975 @butonic as discussed

Disabled app list broken / cannot upgrade disabled app

Steps

  1. Setup OC 9.1.4 from git
  2. Enable contacts app
  3. Upgrade to 10.0 git master
  4. Disable contacts app (it is incompatible and this will be asked by owncloud/core#27711 once it's merged)
  5. occ upgrade
  6. Now I want to upgrade the contacts app, go to market app
  7. Click on "Disabled apps"

Expected result

Contacts appears

Actual result

Nothing changes, same list as before.

Workaround

Workaround is not possible: go to the "Apps" page. See that "Contacts" is not compatible, cannot enable, install or upgrade.

The only way is to manually download the tarball.

It is also likely that some people had older apps that they had installed and disabled. They need to be able to upgrade those too even when disabled.

Note that once owncloud/core#27711 is merged the update process will attempt upgrading the app if still enabled, but if it fails for whatever reason (offline or marketplace not available), then the user will find themselves in the situation described here: app is disabled, want to reenable but not possible.

@DeepDiver1975 @tboerger @IljaN @felixheidecke @felixboehm

Missing image breaks ownCloud

It still sucks that core fails when an image is missing (other issue...)

Here with the market:

  1. git clone master
  2. git clone market into "apps" folder
  3. setup OC
  4. Login as admin

Getting this:

{"reqId":"4a+Atud5UNNMTXyuZNu6","remoteAddr":"127.0.0.1","app":"index","message":"Exception: {\"Exception\":\"RuntimeException\",\"Message\":\"image not found: image:market.svg webroot:\\\/owncloud serverroot:\\\/srv\\\/www\\\/htdocs\\\/owncloud\",\"Code\":0,\"Trace\":\"
#0 \\\/srv\\\/www\\\/htdocs\\\/owncloud\\\/apps\\\/market\\\/lib\\\/Application.php(49): OC\\\\URLGenerator->imagePath('market', 'market.svg')\\n
#1 \\\/srv\\\/www\\\/htdocs\\\/owncloud\\\/lib\\\/private\\\/NavigationManager.php(63): OCA\\\\Market\\\\Application->OCA\\\\Market\\\\{closure}()\\n
#2 \\\/srv\\\/www\\\/htdocs\\\/owncloud\\\/lib\\\/private\\\/legacy\\\/app.php(713): OC\\\\NavigationManager->getAll()\\n
#3 \\\/srv\\\/www\\\/htdocs\\\/owncloud\\\/lib\\\/private\\\/TemplateLayout.php(83): OC_App::getNavigation()\\n
#4 \\\/srv\\\/www\\\/htdocs\\\/owncloud\\\/lib\\\/private\\\/legacy\\\/template.php(225): OC\\\\TemplateLayout->__construct('user', 'settings')\\n
#5 \\\/srv\\\/www\\\/htdocs\\\/owncloud\\\/lib\\\/private\\\/Template\\\/Base.php(131): OC_Template->fetchPage()\\n
#6 \\\/srv\\\/www\\\/htdocs\\\/owncloud\\\/settings\\\/admin.php(263): OC\\\\Template\\\\Base->printPage()\\n
#7 \\\/srv\\\/www\\\/htdocs\\\/owncloud\\\/lib\\\/private\\\/Route\\\/Route.php(154) : runtime-created function(1): require_once('\\\/srv\\\/www\\\/htdocs...')\\n
#8 [internal function]: __lambda_func(Array)\\n
#9 \\\/srv\\\/www\\\/htdocs\\\/owncloud\\\/lib\\\/private\\\/Route\\\/Router.php(299): call_user_func('\\\\x00lambda_1291', Array)\\n
#10 \\\/srv\\\/www\\\/htdocs\\\/owncloud\\\/lib\\\/base.php(894): OC\\\\Route\\\\Router->match('\\\/settings\\\/admin')\\n
#11 \\\/srv\\\/www\\\/htdocs\\\/owncloud\\\/index.php(46): OC::handleRequest()\\n
#12 {main}\",\"File\":\"\\\/srv\\\/www\\\/htdocs\\\/owncloud\\\/lib\\\/private\\\/URLGenerator.php\",\"Line\":201}","level":3,"time":"2016-11-14T16:31:26+00:00","method":"GET","url":"\/owncloud\/index.php\/settings\/admin","user":"admin"}
{"reqId":"lwzaghmUlKY3y0WpwK7i","remoteAddr":"127.0.0.1","app":"webdav","message":"Exception: {\"Message\":\"HTTP\\\/1.1 401 CSRF check not passed.\",\"Exception\":\"Sabre\\\\DAV\\\\Exception\\\\NotAuthenticated\",\"Code\":0,\"Trace\":\"#0 \\\/srv\\\/www\\\/htdocs\\\/owncloud\\\/apps\\\/dav\\\/lib\\\/Connector\\\/Sabre\\\/Auth.php(146): OCA\\\\DAV\\\\Connector\\\\Sabre\\\\Auth->auth(Object(Sabre\\\\HTTP\\\\Request), Object(Sabre\\\\HTTP\\\\Response))\\n#1 \\\/srv\\\/www\\\/htdocs\\\/owncloud\\\/lib\\\/composer\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/Auth\\\/Plugin.php(202): OCA\\\\DAV\\\\Connector\\\\Sabre\\\\Auth->check(Object(Sabre\\\\HTTP\\\\Request), Object(Sabre\\\\HTTP\\\\Response))\\n#2 \\\/srv\\\/www\\\/htdocs\\\/owncloud\\\/lib\\\/composer\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/Auth\\\/Plugin.php(150): Sabre\\\\DAV\\\\Auth\\\\Plugin->check(Object(Sabre\\\\HTTP\\\\Request), Object(Sabre\\\\HTTP\\\\Response))\\n#3 [internal function]: Sabre\\\\DAV\\\\Auth\\\\Plugin->beforeMethod(Object(Sabre\\\\HTTP\\\\Request), Object(Sabre\\\\HTTP\\\\Response))\\n#4 \\\/srv\\\/www\\\/htdocs\\\/owncloud\\\/lib\\\/composer\\\/sabre\\\/event\\\/lib\\\/EventEmitterTrait.php(105): call_user_func_array(Array, Array)\\n#5 \\\/srv\\\/www\\\/htdocs\\\/owncloud\\\/lib\\\/composer\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/Server.php(466): Sabre\\\\Event\\\\EventEmitter->emit('beforeMethod', Array)\\n#6 \\\/srv\\\/www\\\/htdocs\\\/owncloud\\\/lib\\\/composer\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/Server.php(254): Sabre\\\\DAV\\\\Server->invokeMethod(Object(Sabre\\\\HTTP\\\\Request), Object(Sabre\\\\HTTP\\\\Response))\\n#7 \\\/srv\\\/www\\\/htdocs\\\/owncloud\\\/apps\\\/dav\\\/appinfo\\\/v1\\\/webdav.php(57): Sabre\\\\DAV\\\\Server->exec()\\n#8 \\\/srv\\\/www\\\/htdocs\\\/owncloud\\\/remote.php(164): require_once('\\\/srv\\\/www\\\/htdocs...')\\n#9 {main}\",\"File\":\"\\\/srv\\\/www\\\/htdocs\\\/owncloud\\\/apps\\\/dav\\\/lib\\\/Connector\\\/Sabre\\\/Auth.php\",\"Line\":211,\"User\":\"admin\"}","level":0,"time":"2016-11-14T16:31:27+00:00","method":"PROPFIND","url":"\/owncloud\/remote.php\/webdav","user":"admin"}

and OC is not usable as the web page doesn't open.

php5-5.6.27-355.1.x86_64
apache2-2.4.16-15.1.x86_64

@DeepDiver1975

Market command unavailable when "update is required"

Steps

  1. Increase version in version.php
  2. Try running any market OCC commands

Expected

Still able to run commands, install apps, update apps, etc.

Actual

Commands not available.

On offline instances we expect admins to use tarballs to update apps, however in this "pending update" state the convenience command "occ market:install" with tarball is not available.

We should make this one available.
Workaround is to manually extract the tarball.

@DeepDiver1975 @VicDeo

Maybe we'll need new info.xml settings: "available in maintenance mode" and "available even when updates are pending"

Provide number of apps per category from the API

We should display the number of apps per category, but instead of calculating this on the frontend it should be much more performant to calculate that on the server-side and deliver it as part of the JSON payload to the frontend.

Install missing bundled apps that were moved to market

In the future we will want to move more and more bundled apps to the market.

The problem with this is that when the user updates core (tarball/updater/distro package), an app that was present before on the filesystem is now missing because it's not in the bundle any more.

Some apps MUST be enabled at occ upgrade time especially ones with user backends to make sure that all users get covered by repair steps.

So the goal is to have the market hook into the upgrade process and check which app is market as enabled in oc_appconfig but where the code is missing. For the missing apps, install the market version of these apps.

The challenge will likely be that such apps have no OCS ID currently, so we might need to bundle a hard-coded list of apps that we knew were bundled but aren't any more in a way that the market can find and reinstall them.

Raised here instead of updater because I think this could also affect tarball users.

@DeepDiver1975 @VicDeo please comment

Output when installing a local tarball is not nice for users.

When installing an app using market app coming from a tarball, we can see the logs as output:

screen shot 2017-04-21 at 09 44 45

./occ market:install -l customgroups.tar.gz 
{"reqId":"VS8Z9IAI7MmS7JsqFgSj","level":3,"time":"2017-04-21T07:41:07+00:00","remoteAddr":"","user":"--","app":"PHP","method":"--","url":"--","message":"Undefined index: appdata at \/var\/www\/html\/tarball_20-04-17\/lib\/private\/Installer.php#336"}
customgroups: Installing new app from customgroups.tar.gz
{"reqId":"VS8Z9IAI7MmS7JsqFgSj","level":3,"time":"2017-04-21T07:41:07+00:00","remoteAddr":"","user":"--","app":"PHP","method":"--","url":"--","message":"Undefined index: appdata at \/var\/www\/html\/tarball_20-04-17\/lib\/private\/Installer.php#336"}
customgroups: App installed.
{"reqId":"VS8Z9IAI7MmS7JsqFgSj","level":3,"time":"2017-04-21T07:41:07+00:00","remoteAddr":"","user":"--","app":"PHP","method":"--","url":"--","message":"chmod(): Operation not permitted at \/var\/www\/html\/tarball_20-04-17\/lib\/private\/Log\/Owncloud.php#119"}

This command should show information in a nicer way.

file or directory not found trying to upgrade apps on the market

mai-18-2017 13-54-36

{"reqId":"WR2KhH8AAQEAADDMg5kAAAAO","level":3,"time":"2017-05-18T11:50:31+00:00","remoteAddr":"91.45.217.39","user":"John","app":"PHP","method":"POST","url":"\/index.php\/apps\/market\/apps\/activity\/update","message":"mkdir(): No such file or directory at \/var\/www\/owncloud\/lib\/private\/legacy\/helper.php#183"}

configreport:

 {
    "basic": {
        "license key": "",
        "date": "Thu, 18 May 2017 12:00:18 +0000",
        "ownCloud version": "10.0.0.12",
        "ownCloud version string": "10.0.0",
        "ownCloud edition": "Community",
        "server OS": "Linux",
        "server OS version": "Linux jonaka.de 4.4.38-std-1 #1 SMP Mon Dec 12 10:45:29 UTC 2016 x86_64",
        "server SAPI": "apache2handler",
        "webserver version": "Apache",
        "hostname": "cloud.jonaka.de",
        "user count": 1,
        "user directories": 1,
        "logged-in user": "John"
    },
    "config": {
        "instanceid": "oce3lm9qjr1f",
        "passwordsalt": "***REMOVED SENSITIVE VALUE***",
        "secret": "***REMOVED SENSITIVE VALUE***",
        "trusted_domains": [
            "cloud.jonaka.de"
        ],
        "datadirectory": "\/var\/owncloud-data",
        "overwrite.cli.url": "https:\/\/cloud.jonaka.de",
        "dbtype": "mysql",
        "version": "10.0.0.12",
        "dbname": "owncloud",
        "dbhost": "localhost",
        "dbtableprefix": "oc_",
        "dbuser": "***REMOVED SENSITIVE VALUE***",
        "dbpassword": "***REMOVED SENSITIVE VALUE***",
        "logtimezone": "UTC",
        "installed": true,
        "maintenance": false
    },
    "integritychecker": {
        "passing": true,
        "enabled": true,
        "result": []
    },
    "core": {
        "OC_Channel": "production",
        "backgroundjobs_mode": "cron",
        "enable_external_storage": "yes",
        "installedat": "1493972964.0963",
        "lastcron": "1495108803",
        "lastupdateResult": "[]",
        "lastupdatedat": "1495108732",
        "public_files": "files_sharing\/public.php",
        "public_webdav": "dav\/appinfo\/v1\/publicwebdav.php"
    },
    "apps": [
        {
            "id": "files_pdfviewer",
            "name": "PDF Viewer",
            "description": "This application integrates the PDF.js library into ownCloud. Using this application users can view their PDF files online without the need to download the file.\n\nWhen this application is enabled publicly shared PDF documents will also get shown in the PDF Viewer instead of only showing a single static snapshot of the document. The PDF viewer requires a modern browser and will not work with Microsoft\u00ae Internet Explorer\u00ae versions below 9.\n\nPDF.js is a JavaScript library developed by Mozilla, you can learn more about the PDF.js project at https:\/\/mozilla.github.io\/pdf.js\/",
            "licence": "AGPL",
            "author": "Thomas M\u00fcller, Lukas Reschke",
            "version": "0.8.1",
            "dependencies": {
                "owncloud": {
                    "@attributes": {
                        "min-version": "10.0",
                        "max-version": "10.0"
                    }
                }
            },
            "shipped": "true",
            "default_enable": "",
            "documentation": {
                "user": "https:\/\/doc.owncloud.org\/missing",
                "admin": "https:\/\/doc.owncloud.org\/missing",
                "developer": "https:\/\/doc.owncloud.org\/missing"
            },
            "website": "https:\/\/github.com\/owncloud\/files_pdfviewer",
            "bugs": "https:\/\/github.com\/owncloud\/files_pdfviewer\/issues",
            "repository": {
                "@attributes": {
                    "type": "git"
                },
                "@value": "https:\/\/github.com\/owncloud\/files_pdfviewer.git"
            },
            "ocsid": "166049",
            "info": [],
            "remote": [],
            "public": [],
            "types": [],
            "repair-steps": {
                "install": [],
                "pre-migration": [],
                "post-migration": [],
                "live-migration": [],
                "uninstall": []
            },
            "background-jobs": [],
            "two-factor-providers": [],
            "commands": [],
            "groups": null,
            "active": true,
            "internal": true,
            "level": 200,
            "removable": false,
            "preview": "\/apps\/files_pdfviewer\/img\/app.svg",
            "previewAsIcon": true,
            "appconfig": {
                "enabled": "yes",
                "installed_version": "0.8.1",
                "ocsid": "166049",
                "signed": "true",
                "types": ""
            }
        },
        {
            "id": "federation",
            "name": "Federation",
            "description": "ownCloud Federation allows you to connect with other trusted ownClouds to exchange the user directory. For example this will be used to auto-complete external users for federated sharing.",
            "licence": "AGPL",
            "author": "Bjoern Schiessle",
            "version": "0.1.0",
            "namespace": "Federation",
            "category": "other",
            "dependencies": {
                "owncloud": {
                    "@attributes": {
                        "min-version": "10.0",
                        "max-version": "10.0"
                    }
                }
            },
            "default_enable": "",
            "types": [
                "authentication"
            ],
            "background-jobs": {
                "job": "OCA\\Federation\\SyncJob"
            },
            "commands": {
                "command": "OCA\\Federation\\Command\\SyncFederationAddressBooks"
            },
            "settings": {
                "admin": "OCA\\Federation\\Panels\\Admin"
            },
            "info": [],
            "remote": [],
            "public": [],
            "repair-steps": {
                "install": [],
                "pre-migration": [],
                "post-migration": [],
                "live-migration": [],
                "uninstall": []
            },
            "two-factor-providers": [],
            "groups": null,
            "active": true,
            "internal": true,
            "level": 200,
            "removable": false,
            "preview": "\/apps\/federation\/img\/app.svg",
            "previewAsIcon": true,
            "appconfig": {
                "enabled": "yes",
                "installed_version": "0.1.0",
                "types": "authentication"
            }
        },
        {
            "id": "files_texteditor",
            "name": "Text Editor",
            "description": "This application enables ownCloud users to open, save and edit text files in the web browser. If enabled, an entry in the New button at the top of the web browser the Text file entry appears. When clicked, a new text file opens in the browser and the file can be saved into the current ownCloud directory. Further, when a text file is clicked in the web browser, it will be opened and editable. If the privileges allow, a user can also edit shared files and save these changes back into the web browser. More information is available in the Text Editor documentation.",
            "licence": "AGPL",
            "author": "Tom Needham, Bj\u00f6rn Schie\u00dfle",
            "version": "2.1",
            "shipped": "true",
            "default_enable": "",
            "documentation": {
                "user": "https:\/\/github.com\/owncloud\/files_texteditor\/blob\/master\/README.md",
                "admin": "https:\/\/github.com\/owncloud\/files_texteditor\/blob\/master\/README.md",
                "developer": "https:\/\/github.com\/owncloud\/files_texteditor\/blob\/master\/README.md"
            },
            "website": "https:\/\/github.com\/owncloud\/files_texteditor",
            "bugs": "https:\/\/github.com\/owncloud\/files_texteditor\/issues",
            "repository": {
                "@attributes": {
                    "type": "git"
                },
                "@value": "https:\/\/github.com\/owncloud\/files_texteditor.git"
            },
            "ocsid": "166051",
            "dependencies": {
                "owncloud": {
                    "@attributes": {
                        "min-version": "10.0",
                        "max-version": "10.0"
                    }
                }
            },
            "info": [],
            "remote": [],
            "public": [],
            "types": [],
            "repair-steps": {
                "install": [],
                "pre-migration": [],
                "post-migration": [],
                "live-migration": [],
                "uninstall": []
            },
            "background-jobs": [],
            "two-factor-providers": [],
            "commands": [],
            "groups": null,
            "active": true,
            "internal": true,
            "level": 200,
            "removable": false,
            "preview": "\/apps\/files_texteditor\/img\/app.svg",
            "previewAsIcon": true,
            "appconfig": {
                "enabled": "yes",
                "installed_version": "2.1",
                "ocsid": "166051",
                "signed": "true",
                "types": ""
            }
        },
        {
            "id": "gpxpod",
            "name": "GpxPod",
            "description": "# GpxPod Owncloud application\n\nThis app's purpose is to display gpx, kml and tcx files collections, view elevation profiles and tracks stats, filter tracks, color tracks by speed or elevation and compare divergent parts of similar tracks.\n\nIf you want to help to translate this app in your language, take the english=>french files in \"l10n\" directory as examples.\n\nGpxPod :\n\n* can display gpx\/kml\/tcx\/igc\/fit files anywhere in your files, files shared with you, files in folders shared with you. kml, tcx, igc, fit files will be displayed only if **GpsBabel** is found on the server system. * supports metric and english measure system * draws elevation or speed interactive chart * displays geotagged pictures found in selected directory * generates public links pointing to a track\/folder. This link can be used if the file\/folder is shared by public link * is translated in French, German and Russian * can correct elevations for entire folders or specific track if SRTM.py (gpxelevations) is found on the server's system * can make global comparison of multiple tracks * can make visual pair comparison of divergent parts of similar tracks * allows to add personal map tile servers * saves\/restores user option values * allow user to manually set track line colors * detects browser timezone to correctly display dates and allows user to manually select another timezone * loads extra waypoint symbols from GpxEdit if installed * works with encrypted data folder (server side encryption) * proudly uses Leaflet with lots of plugins to display the map * is compatible with SQLite, MySQL and PostgreSQL databases * adds possibility to view .gpx files directly from the \"Files\" app\n\nThis app is tested on Owncloud 9 with Firefox and Chromium.\n\nThis app is under development.\n\nLink to Owncloud application website : https:\/\/apps.owncloud.com\/content\/show.php\/GpxPod+again?content=174733\n\n## Donation\n\nI develop this app during my free time. You can make a donation to me on Paypal. [There is a donation link HERE](https:\/\/gitlab.com\/eneiluj\/gpxpod-oc#donation) (you don't need a paypal account)\n\n## Install\n\nSee the [AdminDoc](https:\/\/gitlab.com\/eneiluj\/gpxpod-oc\/wikis\/admindoc) for more details (allow SRTM elevation correction, integration in \"Files\" app, kml compatibility...)\n\nThere are no more python dependencies ! (except for extra features like elevations correction)\n\nPut gpxpod directory in the Owncloud apps to install. There are several ways to do that :\n\n### Clone the git repository\n\n``` cd \/path\/to\/owncloud\/apps git clone https:\/\/gitlab.com\/eneiluj\/gpxpod-oc.git gpxpod ```\n\n### Download from https:\/\/apps.owncloud.com\n\nExtract gpxpod archive you just downloaded from the website : ``` cd \/path\/to\/owncloud\/apps tar xvf gpxpod-x.x.x.tar.gz ```\n\n## Known issues\n\n* bad management of file names including simple or double quotes * _WARNING_, kml conversion will NOT work with recent kml files using the proprietary \"gx:track\" extension tag.\n\nAny feedback will be appreciated.\n\n",
            "licence": "AGPL",
            "summary": "Display, analyse, compare and share gpx tracks",
            "author": [
                "Julien Veyssier",
                "Fritz Kleinschroth",
                "Slipeer"
            ],
            "version": "2.1.2",
            "namespace": "GpxPod",
            "documentation": {
                "user": "https:\/\/gitlab.com\/eneiluj\/gpxpod-oc\/wikis\/userdoc",
                "admin": "https:\/\/gitlab.com\/eneiluj\/gpxpod-oc\/wikis\/admindoc",
                "developer": "https:\/\/gitlab.com\/eneiluj\/gpxpod-oc\/wikis\/devdoc"
            },
            "category": [
                "tool",
                "multimedia"
            ],
            "website": "https:\/\/gitlab.com\/eneiluj\/gpxpod-oc",
            "bugs": "https:\/\/gitlab.com\/eneiluj\/gpxpod-oc\/issues",
            "screenshot": [
                "https:\/\/gitlab.com\/eneiluj\/gpxpod-oc\/uploads\/717322462e1143e477a9cf41d7498744\/screen1.jpg",
                "https:\/\/gitlab.com\/eneiluj\/gpxpod-oc\/uploads\/edb4334127d054f017e656d964efcc66\/screen2.jpg",
                "https:\/\/gitlab.com\/eneiluj\/gpxpod-oc\/uploads\/0ffda108daeede88dcd432a1021d21e4\/screen3.jpg"
            ],
            "dependencies": {
                "database": [
                    {
                        "@attributes": {
                            "min-version": "9.4"
                        },
                        "@value": "pgsql"
                    },
                    "sqlite",
                    {
                        "@attributes": {
                            "min-version": "5.5"
                        },
                        "@value": "mysql"
                    }
                ],
                "php": {
                    "@attributes": {
                        "min-version": "5.6"
                    }
                },
                "owncloud": {
                    "@attributes": {
                        "min-version": "9.0",
                        "max-version": "10.9"
                    }
                }
            },
            "ocsid": "174733",
            "info": [],
            "remote": [],
            "public": [],
            "types": [],
            "repair-steps": {
                "install": [],
                "pre-migration": [],
                "post-migration": [],
                "live-migration": [],
                "uninstall": []
            },
            "background-jobs": [],
            "two-factor-providers": [],
            "commands": [],
            "groups": null,
            "active": true,
            "internal": false,
            "level": 100,
            "removable": true,
            "preview": "\/apps\/gpxpod\/img\/app.svg",
            "previewAsIcon": true,
            "appconfig": {
                "enabled": "yes",
                "installed_version": "2.1.2",
                "signed": "true",
                "types": ""
            }
        },
        {
            "id": "market",
            "name": "Market",
            "description": "ownCloud marketplace integration and app management",
            "licence": "AGPL",
            "author": "Thomas M\u00fcller",
            "version": "0.1.0",
            "default_enable": "",
            "dependencies": {
                "owncloud": {
                    "@attributes": {
                        "min-version": "10.0",
                        "max-version": "10.0"
                    }
                }
            },
            "background-jobs": {
                "job": "OCA\\Market\\SyncJob"
            },
            "commands": [
                "OCA\\Market\\Command\\InstallApp",
                "OCA\\Market\\Command\\ListApps",
                "OCA\\Market\\Command\\UpgradeApp"
            ],
            "navigation": {
                "@attributes": {
                    "role": "admin"
                },
                "route": "market.page.index",
                "order": "100"
            },
            "info": [],
            "remote": [],
            "public": [],
            "types": [],
            "repair-steps": {
                "install": [],
                "pre-migration": [],
                "post-migration": [],
                "live-migration": [],
                "uninstall": []
            },
            "two-factor-providers": [],
            "groups": null,
            "active": true,
            "internal": true,
            "level": 200,
            "removable": false,
            "preview": "\/apps\/market\/img\/market.svg",
            "previewAsIcon": true,
            "appconfig": {
                "enabled": "yes",
                "installed_version": "0.1.0",
                "types": ""
            }
        },
        {
            "id": "external",
            "name": "External Sites",
            "description": "This application allows an admin to add a link in the ownCloud web interface Apps menu that points to an external website. By simply entering the URL and the name for the external site, icon appears. When this icon is clicked by a user, the external website appears in the ownCloud frame. For the user, this external site appears as if it is part of ownCloud but, in fact, this can be any external URL.\n\nNote that the External Site link must use the same type of encryption as provided by ownCloud. In other words, if ownCloud is hosted on HTTPS, the link in the external site must also be HTTPS. The same is also true for HTTP. More information is available in the External Sites documentation.",
            "licence": "AGPL",
            "author": "Frank Karlitschek",
            "dependencies": {
                "owncloud": {
                    "@attributes": {
                        "min-version": "10.0",
                        "max-version": "10.0"
                    }
                }
            },
            "shipped": "true",
            "version": "1.2",
            "ocsid": "166046",
            "info": [],
            "remote": [],
            "public": [],
            "types": [],
            "repair-steps": {
                "install": [],
                "pre-migration": [],
                "post-migration": [],
                "live-migration": [],
                "uninstall": []
            },
            "background-jobs": [],
            "two-factor-providers": [],
            "commands": [],
            "groups": null,
            "active": true,
            "internal": true,
            "level": 200,
            "removable": false,
            "preview": "\/apps\/external\/img\/external.svg",
            "previewAsIcon": true,
            "appconfig": {
                "enabled": "yes",
                "installed_version": "1.2",
                "ocsid": "166046",
                "types": ""
            }
        },
        {
            "id": "provisioning_api",
            "name": "Provisioning API",
            "description": "This application enables a set of APIs that external systems can use to create, edit, delete and query user attributes, query, set and remove groups, set quota and query total storage used in ownCloud. Group admin users can also query ownCloud and perform the same functions as an admin for groups they manage. The API also enables an admin to query for active ownCloud applications, application info, and to enable or disable an app remotely. Once the app is enabled, http requests can be used via a Basic Auth header to perform any of the functions listed above. More information is available in the Provisioning API documentation, including example calls and server responses.",
            "licence": "AGPL",
            "author": "Tom Needham",
            "default_enable": "",
            "documentation": {
                "admin": "https:\/\/doc.owncloud.org\/server\/10.0\/go.php?to=admin-provisioning-api"
            },
            "version": "0.5.0",
            "namespace": "Provisioning_API",
            "types": [
                "prevent_group_restriction"
            ],
            "dependencies": {
                "owncloud": {
                    "@attributes": {
                        "min-version": "10.0",
                        "max-version": "10.0"
                    }
                }
            },
            "info": [],
            "remote": [],
            "public": [],
            "repair-steps": {
                "install": [],
                "pre-migration": [],
                "post-migration": [],
                "live-migration": [],
                "uninstall": []
            },
            "background-jobs": [],
            "two-factor-providers": [],
            "commands": [],
            "groups": null,
            "active": true,
            "internal": true,
            "level": 200,
            "removable": false,
            "preview": "\/apps\/provisioning_api\/img\/app.svg",
            "previewAsIcon": true,
            "appconfig": {
                "enabled": "yes",
                "installed_version": "0.5.0",
                "types": "prevent_group_restriction"
            }
        },
        {
            "id": "customgroups",
            "name": "Custom groups",
            "namespace": "CustomGroups",
            "description": "Let users create and manage custom groups for sharing.",
            "website": "https:\/\/github.com\/owncloud\/customgroups\/",
            "bugs": "https:\/\/github.com\/owncloud\/customgroups\/issues",
            "repository": {
                "@attributes": {
                    "type": "git"
                },
                "@value": "http:\/\/github.com\/owncloud\/customgroups.git"
            },
            "licence": "AGPL",
            "author": "Vincent Petry",
            "version": "0.2",
            "category": "collaboration",
            "screenshot": "https:\/\/github.com\/owncloud\/screenshots\/raw\/a28a6cf38ed8d18d98a02fb7ecac82d1a264a791\/customgroups\/customgroups-screenshot.png",
            "types": [
                "authentication",
                "dav"
            ],
            "use-migrations": "true",
            "dependencies": {
                "owncloud": {
                    "@attributes": {
                        "min-version": "10.0",
                        "max-version": "10.0"
                    }
                }
            },
            "sabre": {
                "plugins": {
                    "plugin": "OCA\\CustomGroups\\Dav\\CustomGroupsPlugin"
                },
                "collections": {
                    "collection": "OCA\\CustomGroups\\Dav\\RootCollection"
                }
            },
            "settings": {
                "personal": "OCA\\CustomGroups\\SettingsPanel"
            },
            "info": [],
            "remote": [],
            "public": [],
            "repair-steps": {
                "install": [],
                "pre-migration": [],
                "post-migration": [],
                "live-migration": [],
                "uninstall": []
            },
            "background-jobs": [],
            "two-factor-providers": [],
            "commands": [],
            "groups": null,
            "active": true,
            "internal": false,
            "level": 100,
            "removable": true,
            "appconfig": {
                "enabled": "yes",
                "installed_version": "0.2",
                "signed": "true",
                "types": "authentication,dav"
            }
        },
        {
            "id": "gallery",
            "name": "Gallery",
            "description": "Media gallery for ownCloud and Nextcloud with the following features:\n\n- Support for large selection of media types (depending on server setup)\n\n- Large, zoomable previews\n\n- Sort images by name or date\n\n- Per album description and copyright statement\n\n- A la carte features\n\n- Image download straight from the slideshow or the gallery\n\n- Seamlessly jump between the gallery and the files view\n\n- Ignore folders containing a \".nomedia\" file\n\n- Native SVG support\n\n- Mobile support\n\nProvides a dedicated view of all images in a grid, adds image viewing capabilities to the files app and adds a gallery view to public links. Compatible with Firefox, Chrome and Internet Explorer 9+",
            "licence": "AGPL",
            "author": "Olivier Paroz, Robin Appelman",
            "version": "15.0.0",
            "namespace": "Gallery",
            "category": "Multimedia",
            "dependencies": {
                "php": {
                    "@attributes": {
                        "min-version": "5.4",
                        "max-version": "7"
                    }
                },
                "owncloud": {
                    "@attributes": {
                        "min-version": "10.0",
                        "max-version": "10.0"
                    }
                }
            },
            "default_enable": "",
            "shipped": "true",
            "info": [],
            "remote": [],
            "public": [],
            "types": [],
            "repair-steps": {
                "install": [],
                "pre-migration": [],
                "post-migration": [],
                "live-migration": [],
                "uninstall": []
            },
            "background-jobs": [],
            "two-factor-providers": [],
            "commands": [],
            "groups": null,
            "active": true,
            "internal": true,
            "level": 200,
            "removable": false,
            "preview": "\/apps\/gallery\/img\/app.svg",
            "previewAsIcon": true,
            "appconfig": {
                "enabled": "yes",
                "installed_version": "15.0.0",
                "signed": "true",
                "types": ""
            }
        },
        {
            "id": "guests",
            "name": "Guests",
            "description": "Allow classifying users or contacts as guests.",
            "version": "0.4.1",
            "licence": "AGPL",
            "author": "owncloud.org",
            "dependencies": {
                "owncloud": {
                    "@attributes": {
                        "min-version": "10.0",
                        "max-version": "10.0"
                    }
                },
                "php": {
                    "@attributes": {
                        "min-version": "5.4"
                    }
                }
            },
            "category": "collaboration",
            "types": [
                "authentication"
            ],
            "settings": {
                "admin": "OCA\\Guests\\Settings\\Admin"
            },
            "screenshot": "https:\/\/raw.githubusercontent.com\/owncloud\/screenshots\/ea949ddd1d35ea22aceb68609587c5536aeda5f6\/guests\/new_guest.png",
            "info": [],
            "remote": [],
            "public": [],
            "repair-steps": {
                "install": [],
                "pre-migration": [],
                "post-migration": [],
                "live-migration": [],
                "uninstall": []
            },
            "background-jobs": [],
            "two-factor-providers": [],
            "commands": [],
            "groups": null,
            "active": true,
            "internal": false,
            "level": 100,
            "removable": true,
            "appconfig": {
                "enabled": "yes",
                "installed_version": "0.4.1",
                "signed": "true",
                "types": "authentication"
            }
        },
        {
            "id": "firstrunwizard",
            "name": "First run wizard",
            "description": "This application enables a pop-up window when a user first logs into ownCloud. This window welcomes new users to ownCloud, and contains links to the standard ownCloud desktop client, Android app, and the iOS app. The window also shows a link for accessing ownCloud via WebDAV. At any time, the first run wizard button can be opened again via the link on the personal page. The First run wizard can be customized to meet specific design goals, or to change links and messages. Create an appropriate theme following the Theming documentation, and changes to the look and feel of this Wizard are simple. More information is available in the First run wizard documentation, as well as the theming documentation.",
            "licence": "AGPL",
            "author": "Frank Karlitschek, Jan-Christoph Borchardt",
            "dependencies": {
                "owncloud": {
                    "@attributes": {
                        "min-version": "10.0",
                        "max-version": "10.0"
                    }
                }
            },
            "version": "1.1",
            "shipped": "true",
            "default_enable": "",
            "ocsid": "166055",
            "info": [],
            "remote": [],
            "public": [],
            "types": [],
            "repair-steps": {
                "install": [],
                "pre-migration": [],
                "post-migration": [],
                "live-migration": [],
                "uninstall": []
            },
            "background-jobs": [],
            "two-factor-providers": [],
            "commands": [],
            "groups": null,
            "active": true,
            "internal": true,
            "level": 200,
            "removable": false,
            "preview": "\/apps\/firstrunwizard\/img\/app.svg",
            "previewAsIcon": true,
            "appconfig": {
                "enabled": "yes",
                "installed_version": "1.1",
                "ocsid": "166055",
                "types": ""
            }
        },
        {
            "id": "systemtags",
            "name": "Collaborative tags",
            "description": "Collaborative tagging functionality which shares tags among users. Great for teams. (If you are a provider with a multi-tenancy installation, it is advised to deactivate this app as tags are shared.)",
            "licence": "AGPL",
            "author": "Vincent Petry",
            "default_enable": "",
            "version": "0.3.0",
            "dependencies": {
                "owncloud": {
                    "@attributes": {
                        "min-version": "10.0",
                        "max-version": "10.0"
                    }
                }
            },
            "namespace": "SystemTags",
            "types": [
                "logging"
            ],
            "info": [],
            "remote": [],
            "public": [],
            "repair-steps": {
                "install": [],
                "pre-migration": [],
                "post-migration": [],
                "live-migration": [],
                "uninstall": []
            },
            "background-jobs": [],
            "two-factor-providers": [],
            "commands": [],
            "groups": null,
            "active": true,
            "internal": true,
            "level": 200,
            "removable": false,
            "appconfig": {
                "enabled": "yes",
                "installed_version": "0.3.0",
                "types": "logging"
            }
        },
        {
            "id": "example-theme",
            "name": "Example ownCloud Theme",
            "description": "This App provides the example ownCloud theme.",
            "licence": "AGPL",
            "author": "Philipp Schaffrath",
            "version": "1.0.0",
            "types": [
                "theme"
            ],
            "dependencies": {
                "owncloud": {
                    "@attributes": {
                        "min-version": "10.0",
                        "max-version": "10.0"
                    }
                }
            },
            "namespace": "Theme",
            "info": [],
            "remote": [],
            "public": [],
            "repair-steps": {
                "install": [],
                "pre-migration": [],
                "post-migration": [],
                "live-migration": [],
                "uninstall": []
            },
            "background-jobs": [],
            "two-factor-providers": [],
            "commands": [],
            "groups": null,
            "active": false,
            "internal": false,
            "level": 100,
            "removable": true
        },
        {
            "id": "files_videoplayer",
            "name": "Video player",
            "description": "A responsive video player using a skinned version of Video.js\n\nBased on this app: https:\/\/apps.owncloud.com\/content\/show.php\/Video+Js?content=159670\n\nVideo.js: http:\/\/videojs.com\/\n\nSkin: https:\/\/github.com\/cabin\/videojs-sublime-skin",
            "version": "0.9.8",
            "licence": "MIT",
            "author": "Bj\u00f6rn Korella",
            "default_enable": "",
            "documentation": {
                "user": "https:\/\/github.com\/owncloud\/files_videoplayer\/blob\/master\/README.md",
                "admin": "https:\/\/github.com\/owncloud\/files_videoplayer\/blob\/master\/README.md",
                "developer": "https:\/\/github.com\/owncloud\/files_videoplayer\/blob\/master\/README.md"
            },
            "website": "https:\/\/github.com\/owncloud\/files_videoplayer",
            "bugs": "https:\/\/github.com\/owncloud\/files_videoplayer\/issues",
            "repository": {
                "@attributes": {
                    "type": "git"
                },
                "@value": "https:\/\/github.com\/owncloud\/files_videoplayer.git"
            },
            "dependencies": {
                "owncloud": {
                    "@attributes": {
                        "min-version": "10.0",
                        "max-version": "10.0"
                    }
                }
            },
            "info": [],
            "remote": [],
            "public": [],
            "types": [],
            "repair-steps": {
                "install": [],
                "pre-migration": [],
                "post-migration": [],
                "live-migration": [],
                "uninstall": []
            },
            "background-jobs": [],
            "two-factor-providers": [],
            "commands": [],
            "groups": null,
            "active": true,
            "internal": true,
            "level": 200,
            "removable": false,
            "preview": "\/apps\/files_videoplayer\/img\/app.svg",
            "previewAsIcon": true,
            "appconfig": {
                "enabled": "yes",
                "installed_version": "0.9.8",
                "types": ""
            }
        },
        {
            "id": "calendar",
            "name": "Calendar",
            "version": "1.4.2",
            "licence": "AGPL",
            "author": "Georg Ehrke, Raghu Nayyar, Bernhard Fr\u00f6hler",
            "dependencies": {
                "owncloud": {
                    "@attributes": {
                        "min-version": "9.0",
                        "max-version": "10.0"
                    }
                }
            },
            "description": "Calendar GUI for the server-integrated CalDAV server",
            "documentation": {
                "user": "http:\/\/doc.owncloud.org\/server\/9.0\/user_manual\/pim\/calendar.html"
            },
            "category": "productivity",
            "screenshot": "https:\/\/raw.githubusercontent.com\/owncloud\/screenshots\/9d7c40b3f9694f4fabca464870524b9b962c8705\/calendar\/screenshot.png",
            "website": "https:\/\/github.com\/owncloud\/calendar\/",
            "bugs": "https:\/\/github.com\/owncloud\/calendar\/issues",
            "repository": {
                "@attributes": {
                    "type": "git"
                },
                "@value": "https:\/\/github.com\/owncloud\/calendar.git"
            },
            "ocsid": "168707",
            "info": [],
            "remote": [],
            "public": [],
            "types": [],
            "repair-steps": {
                "install": [],
                "pre-migration": [],
                "post-migration": [],
                "live-migration": [],
                "uninstall": []
            },
            "background-jobs": [],
            "two-factor-providers": [],
            "commands": [],
            "groups": null,
            "active": true,
            "internal": false,
            "level": 100,
            "removable": true,
            "preview": "\/apps\/calendar\/img\/calendar.svg",
            "previewAsIcon": true,
            "appconfig": {
                "enabled": "yes",
                "installed_version": "1.4.2",
                "ocsid": "168707",
                "signed": "true",
                "types": ""
            }
        },
        {
            "id": "files_versions",
            "name": "Versions",
            "licence": "AGPL",
            "author": "Frank Karlitschek, Bjoern Schiessle",
            "description": "This application enables ownCloud to automatically maintain older versions of files that are changed. When enabled, a hidden versions folder is provisioned in every user\u2019s directory and is used to store old file versions. A user can revert to an older version through the web interface at any time, with the replaced file becoming a version. ownCloud then automatically manages the versions folder to ensure the user doesn\u2019t run out of Quota because of versions. In addition to the expiry of versions, ownCloud\u2019s versions app makes certain never to use more than 50% of the user\u2019s currently available free space. If stored versions exceed this limit, ownCloud will delete the oldest versions first until it meets this limit. More information is available in the Versions documentation.\n\n",
            "version": "1.3.0",
            "types": [
                "filesystem"
            ],
            "namespace": "Files_Versions",
            "dependencies": {
                "owncloud": {
                    "@attributes": {
                        "min-version": "10.0",
                        "max-version": "10.0"
                    }
                }
            },
            "documentation": {
                "user": "https:\/\/doc.owncloud.org\/server\/10.0\/go.php?to=user-versions"
            },
            "default_enable": "",
            "background-jobs": {
                "job": "OCA\\Files_Versions\\BackgroundJob\\ExpireVersions"
            },
            "commands": [
                "OCA\\Files_Versions\\Command\\CleanUp",
                "OCA\\Files_Versions\\Command\\ExpireVersions"
            ],
            "info": [],
            "remote": [],
            "public": [],
            "repair-steps": {
                "install": [],
                "pre-migration": [],
                "post-migration": [],
                "live-migration": [],
                "uninstall": []
            },
            "two-factor-providers": [],
            "groups": null,
            "active": true,
            "internal": true,
            "level": 200,
            "removable": false,
            "preview": "\/apps\/files_versions\/img\/app.svg",
            "previewAsIcon": true,
            "appconfig": {
                "enabled": "yes",
                "installed_version": "1.3.0",
                "types": "filesystem"
            }
        },
        {
            "id": "updatenotification",
            "name": "Update notification",
            "description": "Displays update notifications for ownCloud and provides the SSO for the updater.",
            "licence": "AGPL",
            "author": "Lukas Reschke",
            "version": "0.2.1",
            "namespace": "UpdateNotification",
            "default_enable": "",
            "dependencies": {
                "owncloud": {
                    "@attributes": {
                        "min-version": "10.0",
                        "max-version": "10.0"
                    }
                }
            },
            "background-jobs": {
                "job": "OCA\\UpdateNotification\\Notification\\BackgroundJob"
            },
            "settings": {
                "admin": "OCA\\UpdateNotification\\Controller\\AdminController"
            },
            "info": [],
            "remote": [],
            "public": [],
            "types": [],
            "repair-steps": {
                "install": [],
                "pre-migration": [],
                "post-migration": [],
                "live-migration": [],
                "uninstall": []
            },
            "two-factor-providers": [],
            "commands": [],
            "groups": null,
            "active": true,
            "internal": true,
            "level": 200,
            "removable": false,
            "appconfig": {
                "enabled": "yes",
                "installed_version": "0.2.1",
                "types": ""
            }
        },
        {
            "id": "configreport",
            "name": "Admin Config Report",
            "description": "Generate a Config Report",
            "licence": "AGPL",
            "author": "owncloud.org",
            "version": "0.1.1",
            "namespace": "ConfigReport",
            "default_enable": [
                "",
                ""
            ],
            "types": [
                "filesystem"
            ],
            "dependencies": {
                "owncloud": {
                    "@attributes": {
                        "min-version": "9.1",
                        "max-version": "10.0"
                    }
                }
            },
            "shipped": "true",
            "commands": {
                "command": "OCA\\ConfigReport\\Command\\ConfigReport"
            },
            "settings": {
                "admin": "OCA\\ConfigReport\\AdminPanel"
            },
            "info": [],
            "remote": [],
            "public": [],
            "repair-steps": {
                "install": [],
                "pre-migration": [],
                "post-migration": [],
                "live-migration": [],
                "uninstall": []
            },
            "background-jobs": [],
            "two-factor-providers": [],
            "groups": null,
            "active": true,
            "internal": true,
            "level": 200,
            "removable": false,
            "appconfig": {
                "enabled": "yes",
                "installed_version": "0.1.1",
                "types": "filesystem"
            }
        },
        {
            "id": "comments",
            "name": "Comments",
            "description": "Files app plugin to add comments to files",
            "licence": "AGPL",
            "author": "Arthur Schiwon, Vincent Petry",
            "default_enable": "",
            "version": "0.3.0",
            "dependencies": {
                "owncloud": {
                    "@attributes": {
                        "min-version": "10.0",
                        "max-version": "10.0"
                    }
                }
            },
            "types": [
                "logging",
                "dav"
            ],
            "sabre": {
                "plugins": {
                    "plugin": "OCA\\Comments\\Dav\\CommentsPlugin"
                },
                "collections": {
                    "collection": "OCA\\Comments\\Dav\\RootCollection"
                }
            },
            "info": [],
            "remote": [],
            "public": [],
            "repair-steps": {
                "install": [],
                "pre-migration": [],
                "post-migration": [],
                "live-migration": [],
                "uninstall": []
            },
            "background-jobs": [],
            "two-factor-providers": [],
            "commands": [],
            "groups": null,
            "active": true,
            "internal": true,
            "level": 200,
            "removable": false,
            "appconfig": {
                "enabled": "yes",
                "installed_version": "0.3.0",
                "types": "logging,dav"
            }
        },
        {
            "id": "activity",
            "name": "Activity",
            "description": "This application enables users to view actions related to their files in ownCloud. Once enabled, users will see a new icon \u201cActivity\u201d in their apps menu. When clicked, a new page appears for users to track the activity related to files \u2013 from new files, to deleted files, move, rename, updates and shared activity. The user can configure their individual activity settings in their personal menu. This sets the type of activity to record, as well as whether to the user sees their own activities, whether these are only available online, and whether they get an email digest on a regular basis. More information is available in the Activity documentation.",
            "licence": "AGPL",
            "author": "Frank Karlitschek, Joas Schilling",
            "shipped": "true",
            "version": "2.3.3",
            "default_enable": "",
            "types": [
                "filesystem"
            ],
            "use-migrations": "true",
            "documentation": {
                "admin": "https:\/\/doc.owncloud.org\/server\/10.0\/admin_manual\/configuration_server\/activity_configuration.html"
            },
            "website": "https:\/\/github.com\/owncloud\/activity\/",
            "bugs": "https:\/\/github.com\/owncloud\/activity\/issues",
            "repository": {
                "@attributes": {
                    "type": "git"
                },
                "@value": "https:\/\/github.com\/owncloud\/activity.git"
            },
            "dependencies": {
                "owncloud": {
                    "@attributes": {
                        "min-version": "10.0",
                        "max-version": "10.0"
                    }
                }
            },
            "background-jobs": [
                "OCA\\Activity\\BackgroundJob\\EmailNotification",
                "OCA\\Activity\\BackgroundJob\\ExpireActivities"
            ],
            "navigation": {
                "order": "1",
                "route": "activity.Activities.showList"
            },
            "settings": {
                "personal": "OCA\\Activity\\PersonalPanel"
            },
            "info": [],
            "remote": [],
            "public": [],
            "repair-steps": {
                "install": [],
                "pre-migration": [],
                "post-migration": [],
                "live-migration": [],
                "uninstall": []
            },
            "two-factor-providers": [],
            "commands": [],
            "groups": null,
            "active": true,
            "internal": true,
            "level": 200,
            "removable": false,
            "preview": "\/apps\/activity\/img\/activity.svg",
            "previewAsIcon": true,
            "appconfig": {
                "enabled": "yes",
                "installed_version": "2.3.3",
                "signed": "true",
                "types": "filesystem"
            }
        },
        {
            "id": "files_antivirus",
            "name": "Antivirus App for files",
            "description": "This application inspects files that are uploaded to ownCloud for viruses before they are written to the ownCloud storage. If a file is identified as a virus, it is either logged or not uploaded to the server. The application relies on the underlying ClamAV virus scanning engine, which the admin points ownCloud to when configuring the application. For this app to be effective, the ClamAV virus definitions should be kept up to date. Also note that enabling this app will impact system performance as additional processing is required for every upload. More information is available in the Antivirus documentation.",
            "bugs": "https:\/\/github.com\/owncloud\/files_antivirus\/issues",
            "repository": {
                "@attributes": {
                    "type": "git"
                },
                "@value": "http:\/\/github.com\/owncloud\/files_antivirus.git"
            },
            "licence": "AGPL",
            "author": "Manuel Delgado, Bart Visscher, thinksilicon.de, Victor Dubiniuk",
            "version": "0.10.0.0",
            "types": [
                "filesystem"
            ],
            "dependencies": {
                "owncloud": {
                    "@attributes": {
                        "min-version": "10.0",
                        "max-version": "10.0"
                    }
                }
            },
            "ocsid": "157439",
            "settings": {
                "admin": "OCA\\Files_Antivirus\\AdminPanel"
            },
            "info": [],
            "remote": [],
            "public": [],
            "repair-steps": {
                "install": [],
                "pre-migration": [],
                "post-migration": [],
                "live-migration": [],
                "uninstall": []
            },
            "background-jobs": [],
            "two-factor-providers": [],
            "commands": [],
            "groups": null,
            "active": false,
            "internal": true,
            "level": 200,
            "removable": false,
            "preview": "\/apps\/files_antivirus\/img\/app.svg",
            "previewAsIcon": true
        },
        {
            "id": "notifications",
            "name": "Notifications",
            "description": "An app that notifies the user about important events of other apps.",
            "licence": "AGPL",
            "author": "Joas Schilling",
            "version": "0.3.0",
            "types": [
                "logging"
            ],
            "default_enable": "",
            "website": "https:\/\/github.com\/owncloud\/notifications",
            "bugs": "https:\/\/github.com\/owncloud\/notifications\/issues",
            "repository": {
                "@attributes": {
                    "type": "git"
                },
                "@value": "https:\/\/github.com\/owncloud\/notifications.git"
            },
            "dependencies": {
                "owncloud": {
                    "@attributes": {
                        "min-version": "10.0",
                        "max-version": "10.0"
                    }
                }
            },
            "info": [],
            "remote": [],
            "public": [],
            "repair-steps": {
                "install": [],
                "pre-migration": [],
                "post-migration": [],
                "live-migration": [],
                "uninstall": []
            },
            "background-jobs": [],
            "two-factor-providers": [],
            "commands": [],
            "groups": null,
            "active": true,
            "internal": true,
            "level": 200,
            "removable": false,
            "preview": "\/apps\/notifications\/img\/notifications.svg",
            "previewAsIcon": true,
            "appconfig": {
                "enabled": "yes",
                "installed_version": "0.3.0",
                "types": "logging"
            }
        },
        {
            "id": "files_sharing",
            "name": "Share Files",
            "description": "This application enables users to share files within ownCloud. If enabled, the admin can choose which groups can share files. The applicable users can then share files and folders with other users and groups within ownCloud. In addition, if the admin enables the share link feature, an external link can be used to share files with other users outside of ownCloud. Admins can also enforce passwords, expirations dates, and enable server to server sharing via share links, as well as sharing from mobile devices. Turning the feature off removes shared files and folders on the server for all share recipients, and also on the sync clients and mobile apps. More information is available in the ownCloud Documentation.\n\n",
            "licence": "AGPL",
            "author": "Michael Gapczynski, Bjoern Schiessle",
            "default_enable": "",
            "version": "0.10.0",
            "types": [
                "filesystem"
            ],
            "dependencies": {
                "owncloud": {
                    "@attributes": {
                        "min-version": "10.0",
                        "max-version": "10.0"
                    }
                }
            },
            "public": {
                "files": "public.php"
            },
            "namespace": "Files_Sharing",
            "background-jobs": [
                "OCA\\Files_Sharing\\DeleteOrphanedSharesJob",
                "OCA\\Files_Sharing\\ExpireSharesJob"
            ],
            "commands": {
                "command": "OCA\\Files_Sharing\\Command\\CleanupRemoteStorages"
            },
            "info": [],
            "remote": [],
            "repair-steps": {
                "install": [],
                "pre-migration": [],
                "post-migration": [],
                "live-migration": [],
                "uninstall": []
            },
            "two-factor-providers": [],
            "groups": null,
            "active": true,
            "internal": true,
            "level": 200,
            "removable": false,
            "preview": "\/apps\/files_sharing\/img\/app.svg",
            "previewAsIcon": true,
            "appconfig": {
                "enabled": "yes",
                "installed_version": "0.10.0",
                "types": "filesystem"
            }
        },
        {
            "id": "templateeditor",
            "name": "Mail Template Editor",
            "description": "This application enables ownCloud to send custom emails to users. By default, ownCloud can send password reset emails, shared file and share link emails, activity stream notifications and more. By configuring an email server, admins can enable these emails to be sent. By providing an email address on their Personal page, users can receive these emails. By default, all of these emails will contain ownCloud email templates. The template editor allows admins to change email templates for emails sent by the system. While it is possible to manually change email templates within ownCloud, this app makes it far simpler by updating this via the ownCloud admin panel. More information is available in the Mail Template Editor documentation.",
            "licence": "AGPL",
            "author": "J\u00f6rn Dreyer",
            "version": "0.1",
            "dependencies": {
                "owncloud": {
                    "@attributes": {
                        "min-version": "10.0",
                        "max-version": "10.0"
                    }
                }
            },
            "shipped": "true",
            "default_enable": "",
            "settings": {
                "admin": "OCA\\TemplateEditor\\AdminPanel"
            },
            "info": [],
            "remote": [],
            "public": [],
            "types": [],
            "repair-steps": {
                "install": [],
                "pre-migration": [],
                "post-migration": [],
                "live-migration": [],
                "uninstall": []
            },
            "background-jobs": [],
            "two-factor-providers": [],
            "commands": [],
            "groups": null,
            "active": true,
            "internal": true,
            "level": 200,
            "removable": false,
            "preview": "\/apps\/templateeditor\/img\/app.svg",
            "previewAsIcon": true,
            "appconfig": {
                "enabled": "yes",
                "installed_version": "0.1",
                "types": ""
            }
        },
        {
            "id": "contacts",
            "name": "Contacts",
            "description": "The new and improved app for your Contacts.",
            "licence": "AGPL",
            "author": "Hendrik Leppelsack, Thomas M\u00fcller, Alexander Weidinger, Jan-Christoph Borchardt, Tom Needham",
            "version": "1.5.2",
            "documentation": {
                "user": "https:\/\/doc.owncloud.org\/server\/10.0\/user_manual\/pim\/contacts.html",
                "admin": "https:\/\/doc.owncloud.org\/server\/10.0\/admin_manual\/configuration_server\/occ_command.html?highlight=contact#dav-commands",
                "developer": "https:\/\/github.com\/owncloud\/contacts\/blob\/master\/README.md"
            },
            "category": "collaboration",
            "website": "https:\/\/github.com\/owncloud\/contacts",
            "bugs": "https:\/\/github.com\/owncloud\/contacts\/issues",
            "repository": {
                "@attributes": {
                    "type": "git"
                },
                "@value": "https:\/\/github.com\/owncloud\/contacts.git"
            },
            "screenshot": "https:\/\/raw.githubusercontent.com\/owncloud\/screenshots\/760f2783b03fd26cbc920188b672f5f5efe548c0\/contacts\/contacts.png",
            "dependencies": {
                "owncloud": {
                    "@attributes": {
                        "min-version": "9.0",
                        "max-version": "10.0"
                    }
                }
            },
            "ocsid": "168708",
            "info": [],
            "remote": [],
            "public": [],
            "types": [],
            "repair-steps": {
                "install": [],
                "pre-migration": [],
                "post-migration": [],
                "live-migration": [],
                "uninstall": []
            },
            "background-jobs": [],
            "two-factor-providers": [],
            "commands": [],
            "groups": null,
            "active": true,
            "internal": false,
            "level": 100,
            "removable": true,
            "preview": "\/apps\/contacts\/img\/app.svg",
            "previewAsIcon": true,
            "appconfig": {
                "enabled": "yes",
                "installed_version": "1.5.2",
                "ocsid": "168708",
                "signed": "true",
                "types": ""
            }
        },
        {
            "id": "files_trashbin",
            "name": "Deleted files",
            "description": "This application enables users to restore files that were deleted from the system. It displays a list of deleted files in the web interface, and has options to restore those deleted files back to their ownCloud file directories or remove them permanently from the system. Restoring a file also restores related file versions, if the versions application is enabled. When a file is deleted from a share, it can be restored in the same manner, though it is no longer shared. By default, these files remain in the trash bin for 30 days. To prevent a user from running out of disk space, the ownCloud Deleted files app will not utilize more than 50% of the currently available free quota for deleted files. If the deleted files exceed this limit, ownCloud deletes the oldest files until it gets below this limit. More information is available in the Deleted Files documentation.\n\n",
            "licence": "AGPL",
            "author": "Bjoern Schiessle",
            "default_enable": "",
            "version": "0.9.0",
            "types": [
                "filesystem"
            ],
            "namespace": "Files_Trashbin",
            "dependencies": {
                "owncloud": {
                    "@attributes": {
                        "min-version": "10.0",
                        "max-version": "10.0"
                    }
                }
            },
            "documentation": {
                "user": "https:\/\/doc.owncloud.org\/server\/10.0\/go.php?to=user-trashbin"
            },
            "background-jobs": {
                "job": "OCA\\Files_Trashbin\\BackgroundJob\\ExpireTrash"
            },
            "commands": [
                "OCA\\Files_Trashbin\\Command\\CleanUp",
                "OCA\\Files_Trashbin\\Command\\ExpireTrash"
            ],
            "info": [],
            "remote": [],
            "public": [],
            "repair-steps": {
                "install": [],
                "pre-migration": [],
                "post-migration": [],
                "live-migration": [],
                "uninstall": []
            },
            "two-factor-providers": [],
            "groups": null,
            "active": true,
            "internal": true,
            "level": 200,
            "removable": false,
            "preview": "\/apps\/files_trashbin\/img\/app.svg",
            "previewAsIcon": true,
            "appconfig": {
                "enabled": "yes",
                "installed_version": "0.9.0",
                "types": "filesystem"
            }
        },
        {
            "id": "encryption",
            "description": "In order to use this encryption module you need to enable server-side encryption in the admin settings. Once enabled this module will encrypt all your files transparently. The encryption is based on AES 256 keys. The module won't touch existing files, only new files will be encrypted after server-side encryption was enabled. It is also not possible to disable the encryption again and switch back to a unencrypted system. Please read the documentation to know all implications before you decide to enable server-side encryption.",
            "name": "Default encryption module",
            "licence": "AGPL",
            "author": "Bjoern Schiessle, Clark Tomlinson",
            "documentation": {
                "user": "https:\/\/doc.owncloud.org\/server\/10.0\/go.php?to=user-encryption",
                "admin": "https:\/\/doc.owncloud.org\/server\/10.0\/go.php?to=admin-encryption"
            },
            "rememberlogin": "false",
            "version": "1.3.0",
            "types": [
                "filesystem"
            ],
            "dependencies": {
                "lib": "openssl",
                "owncloud": {
                    "@attributes": {
                        "min-version": "10.0",
                        "max-version": "10.0"
                    }
                }
            },
            "commands": [
                "OCA\\Encryption\\Command\\EnableMasterKey",
                "OCA\\Encryption\\Command\\MigrateKeys"
            ],
            "settings": {
                "admin": "OCA\\Encryption\\Panels\\Admin",
                "personal": "OCA\\Encryption\\Panels\\Personal"
            },
            "info": [],
            "remote": [],
            "public": [],
            "repair-steps": {
                "install": [],
                "pre-migration": [],
                "post-migration": [],
                "live-migration": [],
                "uninstall": []
            },
            "background-jobs": [],
            "two-factor-providers": [],
            "groups": null,
            "active": false,
            "internal": true,
            "level": 200,
            "removable": false,
            "preview": "\/apps\/encryption\/img\/app.svg",
            "previewAsIcon": true
        },
        {
            "id": "user_external",
            "name": "External user support",
            "description": "Use external user authentication methods like IMAP, SMB and FTP",
            "licence": "AGPL",
            "author": "Robin Appelman",
            "documentation": {
                "admin": "https:\/\/doc.owncloud.org\/server\/9.0\/admin_manual\/configuration_user\/user_auth_ftp_smb_imap.html"
            },
            "website": "https:\/\/github.com\/owncloud\/apps\/tree\/master\/user_external",
            "bugs": "https:\/\/github.com\/owncloud\/apps\/issues",
            "repository": {
                "@attributes": {
                    "type": "git"
                },
                "@value": "https:\/\/github.com\/owncloud\/apps.git"
            },
            "dependencies": {
                "owncloud": {
                    "@attributes": {
                        "min-version": "10.0",
                        "max-version": "10.0"
                    }
                }
            },
            "version": "0.4",
            "shipped": "true",
            "types": [
                "authentication",
                "prelogin"
            ],
            "ocsid": "166060",
            "info": [],
            "remote": [],
            "public": [],
            "repair-steps": {
                "install": [],
                "pre-migration": [],
                "post-migration": [],
                "live-migration": [],
                "uninstall": []
            },
            "background-jobs": [],
            "two-factor-providers": [],
            "commands": [],
            "groups": null,
            "active": true,
            "internal": true,
            "level": 200,
            "removable": false,
            "preview": "\/apps\/user_external\/img\/app.svg",
            "previewAsIcon": true,
            "appconfig": {
                "enabled": "yes",
                "installed_version": "0.4",
                "ocsid": "166060",
                "types": "authentication,prelogin"
            }
        }
    ],
    "phpinfo": {
        "apache2handler": {
            "Apache Version": "Apache",
            "Apache API Version": "20120211",
            "Server Administrator": "[no address given]",
            "Hostname:Port": "cloud.jonaka.de:0",
            "User\/Group": "www-data(33)\/33",
            "Max Requests": "Per Child: 0 - Keep Alive: on - Max Per Connection: 100",
            "Timeouts": "Connection: 300 - Keep-Alive: 5",
            "Virtual Server": "Yes",
            "Server Root": "\/etc\/apache2",
            "Loaded Modules": "core mod_so mod_watchdog http_core mod_log_config mod_logio mod_version mod_unixd mod_access_compat mod_alias mod_auth_basic mod_authn_core mod_authn_file mod_authz_core mod_authz_host mod_authz_user mod_autoindex mod_deflate mod_dir mod_env mod_expires mod_filter mod_headers mod_include mod_mime prefork mod_negotiation mod_php7 mod_rewrite mod_security2 mod_setenvif mod_socache_shmcb mod_ssl mod_status mod_unique_id",
            "engine": "1",
            "last_modified": "0",
            "xbithack": "0"
        },
        "Apache Environment": {
            "UNIQUE_ID": "WR2M0H8AAQEAADZrPMcAAAAE",
            "HOME": "\/var\/www\/owncloud",
            "HTTP_HOME": "\/var\/www\/owncloud",
            "modHeadersAvailable": "true",
            "htaccessWorking": "true",
            "HTTP_AUTHORIZATION": "no value",
            "HTTPS": "on",
            "SSL_TLS_SNI": "cloud.jonaka.de",
            "HTTP_HOST": "cloud.jonaka.de",
            "HTTP_CONNECTION": "keep-alive",
            "HTTP_UPGRADE_INSECURE_REQUESTS": "1",
            "HTTP_USER_AGENT": "Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/57.0.2987.133 Safari\/537.36",
            "HTTP_ACCEPT": "text\/html,application\/xhtml+xml,application\/xml;q=0.9,image\/webp,*\/*;q=0.8",
            "HTTP_DNT": "1",
            "HTTP_ACCEPT_ENCODING": "gzip, deflate, sdch, br",
            "HTTP_ACCEPT_LANGUAGE": "de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4,tr;q=0.2",
            "SERVER_SIGNATURE": "no value",
            "SERVER_SOFTWARE": "Apache",
            "SERVER_NAME": "cloud.jonaka.de",
            "SERVER_ADDR": "10.2.38.7",
            "SERVER_PORT": "443",
            "REMOTE_ADDR": "91.45.217.39",
            "DOCUMENT_ROOT": "\/var\/www\/owncloud",
            "REQUEST_SCHEME": "https",
            "CONTEXT_PREFIX": "no value",
            "CONTEXT_DOCUMENT_ROOT": "\/var\/www\/owncloud",
            "SERVER_ADMIN": "[no address given]",
            "SCRIPT_FILENAME": "\/var\/www\/owncloud\/index.php",
            "REMOTE_PORT": "55695",
            "GATEWAY_INTERFACE": "CGI\/1.1",
            "SERVER_PROTOCOL": "HTTP\/1.1",
            "REQUEST_METHOD": "GET",
            "QUERY_STRING": "no value",
            "REQUEST_URI": "\/index.php\/apps\/configreport\/report",
            "SCRIPT_NAME": "\/index.php",
            "PATH_INFO": "\/apps\/configreport\/report",
            "PATH_TRANSLATED": "\/var\/www\/owncloud\/apps\/configreport\/report"
        },
        "HTTP Headers Information": {
            "HTTP Request": "GET \/index.php\/apps\/configreport\/report HTTP\/1.1",
            "Host": "cloud.jonaka.de",
            "Connection": "keep-alive",
            "Upgrade-Insecure-Requests": "1",
            "User-Agent": "Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/57.0.2987.133 Safari\/537.36",
            "Accept": "text\/html,application\/xhtml+xml,application\/xml;q=0.9,image\/webp,*\/*;q=0.8",
            "DNT": "1",
            "Accept-Encoding": "gzip, deflate, sdch, br",
            "Accept-Language": "de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4,tr;q=0.2",
            "Expires": "Thu, 19 Nov 1981 08:52:00 GMT",
            "Cache-Control": "no-store, no-cache, must-revalidate",
            "Pragma": "no-cache",
            "Content-Security-Policy": "default-src self ; script-src self unsafe-eval ; style-src self unsafe-inline ; frame-src *; img-src * data: blob:; font-src self data:; media-src *; connect-src *"
        },
        "apcu": {
            "Version": "5.1.3",
            "APCu Debugging": "Disabled",
            "MMAP Support": "Enabled",
            "MMAP File Mask": "no value",
            "Serialization Support": "php",
            "Build Date": "Apr 5 2016 02:16:47",
            "apc.coredump_unmap": "Off",
            "apc.enable_cli": "Off",
            "apc.enabled": "On",
            "apc.entries_hint": "4096",
            "apc.gc_ttl": "3600",
            "apc.mmap_file_mask": "no value",
            "apc.preload_path": "no value",
            "apc.serializer": "php",
            "apc.shm_segments": "1",
            "apc.shm_size": "32M",
            "apc.slam_defense": "On",
            "apc.smart": "0",
            "apc.ttl": "0",
            "apc.use_request_time": "On",
            "apc.writable": "\/tmp"
        },
        "bz2": {
            "BZip2 Support": "Enabled",
            "Stream Wrapper support": "compress.bzip2:\/\/",
            "Stream Filter support": "bzip2.decompress, bzip2.compress",
            "BZip2 Version": "1.0.6, 6-Sept-2010"
        },
        "calendar": {
            "Calendar support": "enabled"
        },
        "Core": {
            "PHP Version": "7.0.15-0ubuntu0.16.04.4",
            "allow_url_fopen": "On",
            "allow_url_include": "Off",
            "arg_separator.input": "&amp;",
            "arg_separator.output": "&amp;",
            "auto_append_file": "no value",
            "auto_globals_jit": "On",
            "auto_prepend_file": "no value",
            "browscap": "no value",
            "default_charset": "UTF-8",
            "default_mimetype": "text\/html",
            "disable_classes": "no value",
            "disable_functions": "pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,",
            "display_errors": "Off",
            "display_startup_errors": "Off",
            "doc_root": "no value",
            "docref_ext": "no value",
            "docref_root": "no value",
            "enable_dl": "Off",
            "enable_post_data_reading": "On",
            "error_append_string": "no value",
            "error_log": "no value",
            "error_prepend_string": "no value",
            "error_reporting": [
                "32767",
                "22527"
            ],
            "exit_on_timeout": "Off",
            "expose_php": "Off",
            "extension_dir": "\/usr\/lib\/php\/20151012",
            "file_uploads": "On",
            "highlight.comment": "#FF8000",
            "highlight.default": "#0000BB",
            "highlight.html": "#000000",
            "highlight.keyword": "#007700",
            "highlight.string": "#DD0000",
            "html_errors": "On",
            "ignore_repeated_errors": "Off",
            "ignore_repeated_source": "Off",
            "ignore_user_abort": "Off",
            "implicit_flush": "Off",
            "input_encoding": "no value",
            "internal_encoding": "no value",
            "log_errors": "On",
            "log_errors_max_len": "1024",
            "mail.add_x_header": "On",
            "mail.force_extra_parameters": "no value",
            "mail.log": "no value",
            "max_execution_time": [
                "3600",
                "30"
            ],
            "max_file_uploads": "20",
            "max_input_nesting_level": "64",
            "max_input_time": "60",
            "max_input_vars": "1000",
            "memory_limit": [
                "512M",
                "128M"
            ],
            "open_basedir": "no value",
            "output_buffering": [
                "0",
                "4096"
            ],
            "output_encoding": "no value",
            "output_handler": "no value",
            "post_max_size": [
                "513M",
                "0"
            ],
            "precision": "14",
            "realpath_cache_size": "16K",
            "realpath_cache_ttl": "120",
            "register_argc_argv": "Off",
            "report_memleaks": "On",
            "report_zend_debug": "On",
            "request_order": "GP",
            "sendmail_from": "no value",
            "sendmail_path": "\/usr\/sbin\/sendmail -t -i ",
            "serialize_precision": "17",
            "short_open_tag": "Off",
            "SMTP": "localhost",
            "smtp_port": "25",
            "sql.safe_mode": "Off",
            "sys_temp_dir": "no value",
            "track_errors": "Off",
            "unserialize_callback_func": "no value",
            "upload_max_filesize": [
                "513M",
                "16G"
            ],
            "upload_tmp_dir": "no value",
            "user_dir": "no value",
            "user_ini.cache_ttl": "300",
            "user_ini.filename": ".user.ini",
            "variables_order": "GPCS",
            "xmlrpc_error_number": "0",
            "xmlrpc_errors": "Off",
            "zend.assertions": "-1",
            "zend.detect_unicode": "On",
            "zend.enable_gc": "On",
            "zend.multibyte": "Off",
            "zend.script_encoding": "no value"
        },
        "ctype": {
            "ctype functions": "enabled"
        },
        "curl": {
            "cURL support": "enabled",
            "cURL Information": "7.47.0",
            "Age": "3",
            "Features": null,
            "AsynchDNS": "Yes",
            "CharConv": "No",
            "Debug": "No",
            "GSS-Negotiate": "No",
            "IDN": "Yes",
            "IPv6": "Yes",
            "krb4": "No",
            "Largefile": "Yes",
            "libz": "Yes",
            "NTLM": "Yes",
            "NTLMWB": "Yes",
            "SPNEGO": "Yes",
            "SSL": "Yes",
            "SSPI": "No",
            "TLS-SRP": "Yes",
            "HTTP2": "No",
            "GSSAPI": "Yes",
            "KERBEROS5": "Yes",
            "UNIX_SOCKETS": "Yes",
            "PSL": "No",
            "Protocols": "dict, file, ftp, ftps, gopher, http, https, imap, imaps, ldap, ldaps, pop3, pop3s, rtmp, rtsp, smb, smbs, smtp, smtps, telnet, tftp",
            "Host": "x86_64-pc-linux-gnu",
            "SSL Version": "OpenSSL\/1.0.2g",
            "ZLib Version": "1.2.8"
        },
        "date": {
            "date\/time support": "enabled",
            "&quot;Olson&quot; Timezone Database Version": "0.system",
            "Timezone Database": "internal",
            "Default timezone": "UTC",
            "date.default_latitude": "31.7667",
            "date.default_longitude": "35.2333",
            "date.sunrise_zenith": "90.583333",
            "date.sunset_zenith": "90.583333",
            "date.timezone": "no value"
        },
        "dom": {
            "DOM\/XML": "enabled",
            "DOM\/XML API Version": "20031129",
            "libxml Version": "2.9.3",
            "HTML Support": "enabled",
            "XPath Support": "enabled",
            "XPointer Support": "enabled",
            "Schema Support": "enabled",
            "RelaxNG Support": "enabled"
        },
        "exif": {
            "EXIF Support": "enabled",
            "EXIF Version": "1.4 $Id: 8bdc0c8f27c2c9dd1f7551f1f9fe3ab57a06a4b1 $",
            "Supported EXIF Version": "0220",
            "Supported filetypes": "JPEG,TIFF",
            "exif.decode_jis_intel": "JIS",
            "exif.decode_jis_motorola": "JIS",
            "exif.decode_unicode_intel": "UCS-2LE",
            "exif.decode_unicode_motorola": "UCS-2BE",
            "exif.encode_jis": "no value",
            "exif.encode_unicode": "ISO-8859-15"
        },
        "fileinfo": {
            "fileinfo support": "enabled",
            "version": "1.0.5",
            "libmagic": "522"
        },
        "filter": {
            "Input Validation and Filtering": "enabled",
            "Revision": "$Id: 28fcca4bfda9c9907588a64d245b49cb398249d8 $",
            "filter.default": "unsafe_raw",
            "filter.default_flags": "no value"
        },
        "ftp": {
            "FTP support": "enabled",
            "FTPS support": "enabled"
        },
        "gd": {
            "GD Support": "enabled",
            "GD headers Version": "2.1.1",
            "GD library Version": "2.1.1",
            "FreeType Support": "enabled",
            "FreeType Linkage": "with freetype",
            "FreeType Version": "2.6.1",
            "GIF Read Support": "enabled",
            "GIF Create Support": "enabled",
            "JPEG Support": "enabled",
            "libJPEG Version": "8",
            "PNG Support": "enabled",
            "libPNG Version": "1.2.54",
            "WBMP Support": "enabled",
            "XPM Support": "enabled",
            "libXpm Version": "30411",
            "XBM Support": "enabled",
            "WebP Support": "enabled",
            "gd.jpeg_ignore_warning": [
                "1",
                "0"
            ]
        },
        "gettext": {
            "GetText Support": "enabled"
        },
        "hash": {
            "hash support": "enabled",
            "Hashing Engines": "md2 md4 md5 sha1 sha224 sha256 sha384 sha512 ripemd128 ripemd160 ripemd256 ripemd320 whirlpool tiger128,3 tiger160,3 tiger192,3 tiger128,4 tiger160,4 tiger192,4 snefru snefru256 gost gost-crypto adler32 crc32 crc32b fnv132 fnv1a32 fnv164 fnv1a64 joaat haval128,3 haval160,3 haval192,3 haval224,3 haval256,3 haval128,4 haval160,4 haval192,4 haval224,4 haval256,4 haval128,5 haval160,5 haval192,5 haval224,5 haval256,5",
            "MHASH support": "Enabled",
            "MHASH API Version": "Emulated Support"
        },
        "iconv": {
            "iconv support": "enabled",
            "iconv implementation": "glibc",
            "iconv library version": "2.23",
            "iconv.input_encoding": "no value",
            "iconv.internal_encoding": "no value",
            "iconv.output_encoding": "no value"
        },
        "igbinary": {
            "igbinary support": "enabled",
            "igbinary version": "1.2.2-dev",
            "igbinary APC serializer ABI": "no",
            "igbinary session support": "no",
            "igbinary.compact_strings": "On"
        },
        "json": {
            "json support": "enabled",
            "json version": "1.4.0"
        },
        "libxml": {
            "libXML support": "active",
            "libXML Compiled Version": "2.9.3",
            "libXML Loaded Version": "20903",
            "libXML streams": "enabled"
        },
        "mbstring": {
            "Multibyte Support": "enabled",
            "Multibyte string engine": "libmbfl",
            "HTTP input encoding translation": "disabled",
            "libmbfl version": "1.3.2",
            "oniguruma version": "5.9.6",
            "Multibyte (japanese) regex support": "enabled",
            "Multibyte regex (oniguruma) backtrack check": "On",
            "Multibyte regex (oniguruma) version": "5.9.6",
            "mbstring.detect_order": "no value",
            "mbstring.encoding_translation": "Off",
            "mbstring.func_overload": "0",
            "mbstring.http_input": "no value",
            "mbstring.http_output": "no value",
            "mbstring.http_output_conv_mimetypes": "^(text\/|application\/xhtml\\+xml)",
            "mbstring.internal_encoding": "no value",
            "mbstring.language": "neutral",
            "mbstring.strict_detection": "Off",
            "mbstring.substitute_character": "no value"
        },
        "mcrypt": {
            "Version": "2.5.8",
            "Api No": "20021217",
            "Supported ciphers": "cast-128 gost rijndael-128 twofish arcfour cast-256 loki97 rijndael-192 saferplus wake blowfish-compat des rijndael-256 serpent xtea blowfish enigma rc2 tripledes",
            "Supported modes": "cbc cfb ctr ecb ncfb nofb ofb stream",
            "mcrypt.algorithms_dir": "no value",
            "mcrypt.modes_dir": "no value"
        },
        "memcached": {
            "Version": "2.2.0",
            "libmemcached version": "1.0.18",
            "SASL support": "yes",
            "Session support": "yes",
            "igbinary support": "no",
            "json support": "no",
            "msgpack support": "no",
            "memcached.compression_factor": "1.3",
            "memcached.compression_threshold": "2000",
            "memcached.compression_type": "fastlz",
            "memcached.serializer": "php",
            "memcached.sess_binary": "0",
            "memcached.sess_connect_timeout": "1000",
            "memcached.sess_consistent_hash": "0",
            "memcached.sess_lock_expire": "0",
            "memcached.sess_lock_max_wait": "0",
            "memcached.sess_lock_wait": "150000",
            "memcached.sess_locking": "1",
            "memcached.sess_number_of_replicas": "0",
            "memcached.sess_prefix": "memc.sess.key.",
            "memcached.sess_randomize_replica_read": "0",
            "memcached.sess_remove_failed": "0",
            "memcached.sess_sasl_password": "no value",
            "memcached.sess_sasl_username": "no value",
            "memcached.store_retry_count": "2",
            "memcached.use_sasl": "0"
        },
        "mysqli": {
            "Client API library version": "mysqlnd 5.0.12-dev - 20150407 - $Id: b5c5906d452ec590732a93b051f3827e02749b83 $",
            "Active Persistent Links": "0",
            "Inactive Persistent Links": "0",
            "Active Links": "0",
            "mysqli.allow_local_infile": "On",
            "mysqli.allow_persistent": "On",
            "mysqli.default_host": "no value",
            "mysqli.default_port": "3306",
            "mysqli.default_pw": "no value",
            "mysqli.default_socket": "no value",
            "mysqli.default_user": "no value",
            "mysqli.max_links": "Unlimited",
            "mysqli.max_persistent": "Unlimited",
            "mysqli.reconnect": "Off",
            "mysqli.rollback_on_cached_plink": "Off"
        },
        "mysqlnd": {
            "Version": "mysqlnd 5.0.12-dev - 20150407 - $Id: b5c5906d452ec590732a93b051f3827e02749b83 $",
            "Compression": "supported",
            "core SSL": "supported",
            "extended SSL": "supported",
            "Command buffer size": "4096",
            "Read buffer size": "32768",
            "Read timeout": "31536000",
            "Collecting statistics": "Yes",
            "Collecting memory statistics": "No",
            "Tracing": "n\/a",
            "Loaded plugins": "mysqlnd,debug_trace,auth_plugin_mysql_native_password,auth_plugin_mysql_clear_password,auth_plugin_sha256_password",
            "API Extensions": "mysqli,pdo_mysql",
            "bytes_sent": "116557",
            "bytes_received": "398733",
            "packets_sent": "1408",
            "packets_received": "8342",
            "protocol_overhead_in": "33368",
            "protocol_overhead_out": "5632",
            "bytes_received_ok_packet": "0",
            "bytes_received_eof_packet": "0",
            "bytes_received_rset_header_packet": "5013",
            "bytes_received_rset_field_meta_packet": "0",
            "bytes_received_rset_row_packet": "7019",
            "bytes_received_prepare_response_packet": "252983",
            "bytes_received_change_user_packet": "128876",
            "packets_sent_command": "687",
            "packets_received_ok": "0",
            "packets_received_eof": "0",
            "packets_received_rset_header": "557",
            "packets_received_rset_field_meta": "0",
            "packets_received_rset_row": "671",
            "packets_received_prepare_response": "3587",
            "packets_received_change_user": "3493",
            "result_set_queries": "557",
            "non_result_set_queries": "114",
            "no_index_used": "224",
            "bad_index_used": "0",
            "slow_queries": "0",
            "buffered_sets": "557",
            "unbuffered_sets": "0",
            "ps_buffered_sets": "0",
            "ps_unbuffered_sets": "0",
            "flushed_normal_sets": "0",
            "flushed_ps_sets": "0",
            "ps_prepared_never_executed": "0",
            "ps_prepared_once_executed": "0",
            "rows_fetched_from_server_normal": "2936",
            "rows_fetched_from_server_ps": "0",
            "rows_buffered_from_client_normal": "2936",
            "rows_buffered_from_client_ps": "0",
            "rows_fetched_from_client_normal_buffered": "2936",
            "rows_fetched_from_client_normal_unbuffered": "0",
            "rows_fetched_from_client_ps_buffered": "0",
            "rows_fetched_from_client_ps_unbuffered": "0",
            "rows_fetched_from_client_ps_cursor": "0",
            "rows_affected_normal": "58",
            "rows_affected_ps": "0",
            "rows_skipped_normal": "2936",
            "rows_skipped_ps": "0",
            "copy_on_write_saved": "0",
            "copy_on_write_performed": "0",
            "command_buffer_too_small": "0",
            "connect_success": "17",
            "connect_failure": "0",
            "connection_reused": "0",
            "reconnect": "0",
            "pconnect_success": "0",
            "active_connections": "18446744073709551601",
            "active_persistent_connections": "0",
            "explicit_close": "16",
            "implicit_close": "0",
            "disconnect_close": "0",
            "in_middle_of_command_close": "0",
            "explicit_free_result": "557",
            "implicit_free_result": "0",
            "explicit_stmt_close": "0",
            "implicit_stmt_close": "0",
            "mem_emalloc_count": "0",
            "mem_emalloc_amount": "0",
            "mem_ecalloc_count": "0",
            "mem_ecalloc_amount": "0",
            "mem_erealloc_count": "0",
            "mem_erealloc_amount": "0",
            "mem_efree_count": "0",
            "mem_efree_amount": "0",
            "mem_malloc_count": "0",
            "mem_malloc_amount": "0",
            "mem_calloc_count": "0",
            "mem_calloc_amount": "0",
            "mem_realloc_count": "0",
            "mem_realloc_amount": "0",
            "mem_free_count": "0",
            "mem_free_amount": "0",
            "mem_estrndup_count": "0",
            "mem_strndup_count": "0",
            "mem_estndup_count": "0",
            "mem_strdup_count": "0",
            "proto_text_fetched_null": "0",
            "proto_text_fetched_bit": "0",
            "proto_text_fetched_tinyint": "0",
            "proto_text_fetched_short": "72",
            "proto_text_fetched_int24": "0",
            "proto_text_fetched_int": "1482",
            "proto_text_fetched_bigint": "338",
            "proto_text_fetched_decimal": "0",
            "proto_text_fetched_float": "0",
            "proto_text_fetched_double": "0",
            "proto_text_fetched_date": "0",
            "proto_text_fetched_year": "0",
            "proto_text_fetched_time": "0",
            "proto_text_fetched_datetime": "0",
            "proto_text_fetched_timestamp": "0",
            "proto_text_fetched_string": "5689",
            "proto_text_fetched_blob": "0",
            "proto_text_fetched_enum": "2239",
            "proto_text_fetched_set": "0",
            "proto_text_fetched_geometry": "0",
            "proto_text_fetched_other": "0",
            "proto_binary_fetched_null": "0",
            "proto_binary_fetched_bit": "0",
            "proto_binary_fetched_tinyint": "0",
            "proto_binary_fetched_short": "0",
            "proto_binary_fetched_int24": "0",
            "proto_binary_fetched_int": "0",
            "proto_binary_fetched_bigint": "0",
            "proto_binary_fetched_decimal": "0",
            "proto_binary_fetched_float": "0",
            "proto_binary_fetched_double": "0",
            "proto_binary_fetched_date": "0",
            "proto_binary_fetched_year": "0",
            "proto_binary_fetched_time": "0",
            "proto_binary_fetched_datetime": "0",
            "proto_binary_fetched_timestamp": "0",
            "proto_binary_fetched_string": "0",
            "proto_binary_fetched_json": "0",
            "proto_binary_fetched_blob": "0",
            "proto_binary_fetched_enum": "0",
            "proto_binary_fetched_set": "0",
            "proto_binary_fetched_geometry": "0",
            "proto_binary_fetched_other": "0",
            "init_command_executed_count": "0",
            "init_command_failed_count": "0",
            "com_quit": "16",
            "com_init_db": "0",
            "com_query": "671",
            "com_field_list": "0",
            "com_create_db": "0",
            "com_drop_db": "0",
            "com_refresh": "0",
            "com_shutdown": "0",
            "com_statistics": "0",
            "com_process_info": "0",
            "com_connect": "0",
            "com_process_kill": "0",
            "com_debug": "0",
            "com_ping": "0",
            "com_time": "0",
            "com_delayed_insert": "0",
            "com_change_user": "0",
            "com_binlog_dump": "0",
            "com_table_dump": "0",
            "com_connect_out": "0",
            "com_register_slave": "0",
            "com_stmt_prepare": "0",
            "com_stmt_execute": "0",
            "com_stmt_send_long_data": "0",
            "com_stmt_close": "0",
            "com_stmt_reset": "0",
            "com_stmt_set_option": "0",
            "com_stmt_fetch": "0",
            "com_deamon": "0",
            "bytes_received_real_data_normal": "104959",
            "bytes_received_real_data_ps": "0"
        },
        "openssl": {
            "OpenSSL support": "enabled",
            "OpenSSL Library Version": "OpenSSL 1.0.2g 1 Mar 2016",
            "OpenSSL Header Version": "OpenSSL 1.0.2g 1 Mar 2016",
            "Openssl default config": "\/usr\/lib\/ssl\/openssl.cnf",
            "openssl.cafile": "no value",
            "openssl.capath": "no value"
        },
        "pcre": {
            "PCRE (Perl Compatible Regular Expressions) Support": "enabled",
            "PCRE Library Version": "8.38 2015-11-23",
            "PCRE JIT Support": "enabled",
            "pcre.backtrack_limit": "1000000",
            "pcre.jit": "1",
            "pcre.recursion_limit": "100000"
        },
        "PDO": {
            "PDO drivers": "mysql"
        },
        "pdo_mysql": {
            "Client API version": "mysqlnd 5.0.12-dev - 20150407 - $Id: b5c5906d452ec590732a93b051f3827e02749b83 $",
            "pdo_mysql.default_socket": "\/var\/run\/mysqld\/mysqld.sock"
        },
        "Phar": {
            "Phar EXT version": "2.0.2",
            "Phar API version": "1.1.1",
            "SVN revision": "$Id: bf89220e0ebdb68ebb5379ffc0a32997f94e77e7 $",
            "Phar-based phar archives": "enabled",
            "Tar-based phar archives": "enabled",
            "ZIP-based phar archives": "enabled",
            "gzip compression": "enabled",
            "bzip2 compression": "enabled",
            "Native OpenSSL support": "enabled",
            "Phar based on pear\/PHP_Archive, original concept by Davey Shafik.Phar fully realized by Gregory Beaver and Marcus Boerger.Portions of tar implementation Copyright (c) 2003-2009 Tim Kientzle.": null,
            "phar.cache_list": "no value",
            "phar.readonly": "On",
            "phar.require_hash": "On"
        },
        "posix": {
            "Revision": "$Id: b691ca925e7a085e6929579c4eba8fed0732e0ef $"
        },
        "readline": {
            "Readline library": "EditLine wrapper",
            "cli.pager": "no value",
            "cli.prompt": "\\b \\&gt; "
        },
        "redis": {
            "Redis Version": "2.2.8-devphp7"
        },
        "Reflection": {
            "Version": "$Id: 3054da9d8c9ebb2a7e0a7df1f0cdf3cbbe9f8bd8 $"
        },
        "session": {
            "Session Support": "enabled",
            "Registered save handlers": "files user memcached redis rediscluster redis rediscluster",
            "Registered serializer handlers": "php_serialize php php_binary wddx",
            "session.auto_start": "Off",
            "session.cache_expire": "180",
            "session.cache_limiter": "nocache",
            "session.cookie_domain": "no value",
            "session.cookie_httponly": [
                "On",
                "Off"
            ],
            "session.cookie_lifetime": "0",
            "session.cookie_path": "\/",
            "session.cookie_secure": [
                "On",
                "Off"
            ],
            "session.entropy_file": "\/dev\/urandom",
            "session.entropy_length": "32",
            "session.gc_divisor": "1000",
            "session.gc_maxlifetime": "1440",
            "session.gc_probability": "0",
            "session.hash_bits_per_character": "5",
            "session.hash_function": "0",
            "session.lazy_write": "On",
            "session.name": [
                "oce3lm9qjr1f",
                "PHPSESSID"
            ],
            "session.referer_check": "no value",
            "session.save_handler": "files",
            "session.save_path": "\/var\/lib\/php\/sessions",
            "session.serialize_handler": "php",
            "session.upload_progress.cleanup": "On",
            "session.upload_progress.enabled": "On",
            "session.upload_progress.freq": "1%",
            "session.upload_progress.min_freq": "1",
            "session.upload_progress.name": "PHP_SESSION_UPLOAD_PROGRESS",
            "session.upload_progress.prefix": "upload_progress_",
            "session.use_cookies": "On",
            "session.use_only_cookies": "On",
            "session.use_strict_mode": "Off",
            "session.use_trans_sid": "0"
        },
        "shmop": {
            "shmop support": "enabled"
        },
        "SimpleXML": {
            "Revision": "$Id: b8b5c37931a53e50a937c0aef2a26d351e173215 $",
            "Schema support": "enabled"
        },
        "sockets": {
            "Sockets Support": "enabled"
        },
        "SPL": {
            "Interfaces": "Countable, OuterIterator, RecursiveIterator, SeekableIterator, SplObserver, SplSubject",
            "Classes": "AppendIterator, ArrayIterator, ArrayObject, BadFunctionCallException, BadMethodCallException, CachingIterator, CallbackFilterIterator, DirectoryIterator, DomainException, EmptyIterator, FilesystemIterator, FilterIterator, GlobIterator, InfiniteIterator, InvalidArgumentException, IteratorIterator, LengthException, LimitIterator, LogicException, MultipleIterator, NoRewindIterator, OutOfBoundsException, OutOfRangeException, OverflowException, ParentIterator, RangeException, RecursiveArrayIterator, RecursiveCachingIterator, RecursiveCallbackFilterIterator, RecursiveDirectoryIterator, RecursiveFilterIterator, RecursiveIteratorIterator, RecursiveRegexIterator, RecursiveTreeIterator, RegexIterator, RuntimeException, SplDoublyLinkedList, SplFileInfo, SplFileObject, SplFixedArray, SplHeap, SplMinHeap, SplMaxHeap, SplObjectStorage, SplPriorityQueue, SplQueue, SplStack, SplTempFileObject, UnderflowException, UnexpectedValueException"
        },
        "standard": {
            "Dynamic Library Support": "enabled",
            "Path to sendmail": "\/usr\/sbin\/sendmail -t -i",
            "assert.active": "1",
            "assert.bail": "0",
            "assert.callback": "no value",
            "assert.exception": "0",
            "assert.quiet_eval": "0",
            "assert.warning": "1",
            "auto_detect_line_endings": "0",
            "default_socket_timeout": "60",
            "from": "no value",
            "url_rewriter.tags": "a=href,area=href,frame=src,input=src,form=fakeentry",
            "user_agent": "no value"
        },
        "sysvmsg": {
            "sysvmsg support": "enabled",
            "Revision": "$Id: dfb999763f95bfe9609fae60b4e07a492888ec7c $"
        },
        "sysvsem": {
            "Version": "7.0.15-0ubuntu0.16.04.4"
        },
        "sysvshm": {
            "Version": "7.0.15-0ubuntu0.16.04.4"
        },
        "tokenizer": {
            "Tokenizer Support": "enabled"
        },
        "wddx": {
            "WDDX Session Serializer": "enabled"
        },
        "xml": {
            "XML Support": "active",
            "XML Namespace Support": "active",
            "libxml2 Version": "2.9.3"
        },
        "xmlreader": {
            "XMLReader": "enabled"
        },
        "xmlwriter": {
            "XMLWriter": "enabled"
        },
        "xsl": {
            "XSL": "enabled",
            "libxslt Version": "1.1.28",
            "libxslt compiled against libxml Version": "2.9.3",
            "EXSLT": "enabled",
            "libexslt Version": "1.1.28"
        },
        "Zend OPcache": {
            "Opcode Caching": "Up and Running",
            "Optimization": "Enabled",
            "SHM Cache": "Enabled",
            "File Cache": "Disabled",
            "Startup": "OK",
            "Shared memory model": "mmap",
            "Cache hits": "469577",
            "Cache misses": "1041",
            "Used memory": "26076752",
            "Free memory": "41032112",
            "Wasted memory": "0",
            "Interned Strings Used memory": "2558824",
            "Interned Strings Free memory": "1635480",
            "Cached scripts": "1041",
            "Cached keys": "2001",
            "Max keys": "3907",
            "OOM restarts": "0",
            "Hash keys restarts": "0",
            "Manual restarts": "0",
            "opcache.blacklist_filename": "no value",
            "opcache.consistency_checks": "0",
            "opcache.dups_fix": "Off",
            "opcache.enable": "On",
            "opcache.enable_cli": "Off",
            "opcache.enable_file_override": "Off",
            "opcache.error_log": "no value",
            "opcache.fast_shutdown": "0",
            "opcache.file_cache": "no value",
            "opcache.file_cache_consistency_checks": "1",
            "opcache.file_cache_only": "0",
            "opcache.file_update_protection": "2",
            "opcache.force_restart_timeout": "180",
            "opcache.huge_code_pages": "Off",
            "opcache.inherited_hack": "On",
            "opcache.interned_strings_buffer": "4",
            "opcache.lockfile_path": "\/tmp",
            "opcache.log_verbosity_level": "1",
            "opcache.max_accelerated_files": "2000",
            "opcache.max_file_size": "0",
            "opcache.max_wasted_percentage": "5",
            "opcache.memory_consumption": "64",
            "opcache.optimization_level": "0x7FFFBFFF",
            "opcache.preferred_memory_model": "no value",
            "opcache.protect_memory": "0",
            "opcache.restrict_api": "no value",
            "opcache.revalidate_freq": "2",
            "opcache.revalidate_path": "Off",
            "opcache.save_comments": "1",
            "opcache.use_cwd": "On",
            "opcache.validate_permission": "Off",
            "opcache.validate_root": "Off",
            "opcache.validate_timestamps": "On"
        },
        "zip": {
            "Zip": "enabled",
            "Zip version": "1.13.5",
            "Libzip version": "1.0.1"
        },
        "zlib": {
            "Stream Wrapper": "compress.zlib:\/\/",
            "Stream Filter": "zlib.inflate, zlib.deflate",
            "Compiled Version": "1.2.8",
            "Linked Version": "1.2.8",
            "zlib.output_compression": "Off",
            "zlib.output_compression_level": "-1",
            "zlib.output_handler": "no value"
        },
        "Environment": {
            "APACHE_RUN_DIR": "\/var\/run\/apache2",
            "APACHE_PID_FILE": "\/var\/run\/apache2\/apache2.pid",
            "APACHE_LOCK_DIR": "\/var\/lock\/apache2",
            "LANG": "C",
            "APACHE_RUN_USER": "www-data",
            "APACHE_RUN_GROUP": "www-data",
            "APACHE_LOG_DIR": "\/var\/log\/apache2",
            "PWD": "\/"
        }
    }
}

Add Makefile

Please add a Makefile which installs the dependencies.

Ideally, make dist would build a releasable version (cleant up) in a subdir "build" or "dist" in which the release script can pick it up.

[UI] requirement for the front end

What do we want to display?

  • list of purchased apps
  • list of free apps
  • list of installed apps (those can be enabled or disabled)
  • each list offers categories for splitting the list into pieces

What does a user want to do?

  • install an app (free or purchase)
  • uninstall an app
  • enable and disable an app
  • each app list should support filtering
  • upload an app package - necessary for instances which have no internet access

What information is available for an app?

here is an example of the information as comminicated to to owncloud 9.1 between fe and be - we will change this structure. take this as an idea ...

     {
         "missingDependencies" : [],
         "internal" : 0,
         "label" : "",
         "id" : "174779",
         "author" : "netknights",
         "typename" : "ownCloud Productivity",
         "dependencies" : {
            "owncloud" : {
               "@attributes" : {
                  "min-version" : "9.1.4.2",
                  "max-version" : "9.1.4.2"
               }
            }
         },
         "active" : false,
         "missingMinOwnCloudVersion" : false,
         "version" : "2.2.0",
         "preview-full" : "https://apps.owncloud.com/CONTENT/content-pre1/174779-1.png",
         "personid" : "netknights",
         "license" : "AGPL",
         "update" : false,
         "ocs_id" : "174779",
         "licence" : "AGPL",
         "groups" : [],
         "name" : "privacyIDEA ownCloud App",
         "detailpage" : "https://apps.owncloud.com/content/show.php?content=174779",
         "missingMaxOwnCloudVersion" : false,
         "preview" : "https://apps.owncloud.com/CONTENT/content-m1/m174779-1.png",
         "score" : "53",
         "description" : "Flexible, enterprise ready two factor authentication\n\nThis app helps you secure the access to the ownCloud Web UI in your company. It adds a second factor to the Web UI login. This second factor can be any Smartphone App, key fob tokens, smartdisplayer cards, SMS or Email, Yubikey or the Nitrokey and all common OTP tokens.\n\nThe authentication devices are manages centrally in the privacyIDEA server. Running one privacyIDEA server in your network enables you to add second factor not only to your ownCloud installation but also to any other application like web portals, firewall, VPN, Windows Desktop login, SSH servers...\n\nThe privacyIDEA ownCloud Application runs in a demo mode after download and installation. You need a working privacyIDEA installation and a subscription file provided by NetKnights for productive use.\n\nNote: After activating the App *all* users will be verified with a second factor. I.e. be sure to have your privacyIDEA server up and running and to configure the privacyIDEA ownCloud App correctly.\n\nWe recommend that you first get a basic understanding of the privacyIDEA server!\n\nSee the youtube video to get an idea https://www.youtube.com/watch?v=Lgum_cTY_Y8&amp;t=21s how this works.",
         "canUnInstall" : false,
         "changed" : 1486019868,
         "needsDownload" : true,
         "removable" : false,
         "profilepage" : "http://opendesktop.org/usermanager/search.php?username=netknights",
         "type" : "922",
         "canInstall" : true,
         "downloads" : 291,
         "level" : 100
      },


Update market app through marketplace

Idea: provide updates for the market app through the marketplace.

Every release would still bundle the latest version of the market app.
Subsequent non-bundled releases can then be published in the marketplace itself so instances could update it.

There is some risk associated because if the updated market app is broken, no more online update is possible. Also, self-updating code can be tricky.

Setting to backlog, needs discussion.

@DeepDiver1975

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.