Rename app id from occweb to extended_occweb, prep for App Store
Nextcloud's app id "occweb" is effectively unavailable for a new store listing: the original Adphi/occweb still owns that App Store slot (stale, v0.2.3), and el-choco/occweb_v2 has since published a same-lineage rewrite under its own id. Rather than fight over the "occweb" name, publish this fork under its own id, matching the <name> this app has always had: "Extended OCC Web". Renames every place the literal app id is used: info.xml <id> and the auto-generated navigation <route>, script()/style() registrations in templates/index.php, the TemplateResponse app name in OccController::index(), the /apps/... base URL in js/index.js, and the 'app' log context tag in DbController.php. The GitHub repo name and its <website>/<bugs>/<repository>/<screenshot> links are unaffected - those identify the repo, not the Nextcloud app. Docs (README, INSTALL-AIO.md, install.sh) updated to clone into and reference an "extended_occweb" directory, since Nextcloud requires the app folder name to match its id - a plain `git clone` of this repo no longer produces a correctly-named install directory on its own. Version bump to 0.4.0 given the scope (breaking change for anyone who already deployed under the old "occweb" id - requires disable+remove of the old app and a fresh enable under the new id, not an in-place upgrade).
This commit is contained in:
+7
-7
@@ -27,14 +27,14 @@ tar -C "$STAGE" -cf /tmp/occweb-deploy.tar .
|
|||||||
# 2. Copy it onto the Docker host, then into the container
|
# 2. Copy it onto the Docker host, then into the container
|
||||||
scp /tmp/occweb-deploy.tar <docker-host>:/tmp/occweb-deploy.tar
|
scp /tmp/occweb-deploy.tar <docker-host>:/tmp/occweb-deploy.tar
|
||||||
ssh <docker-host> "docker cp /tmp/occweb-deploy.tar nextcloud-aio-nextcloud:/tmp/occweb-deploy.tar && \
|
ssh <docker-host> "docker cp /tmp/occweb-deploy.tar nextcloud-aio-nextcloud:/tmp/occweb-deploy.tar && \
|
||||||
docker exec nextcloud-aio-nextcloud sh -c 'mkdir -p /var/www/html/custom_apps/occweb && \
|
docker exec nextcloud-aio-nextcloud sh -c 'mkdir -p /var/www/html/custom_apps/extended_occweb && \
|
||||||
tar -xf /tmp/occweb-deploy.tar -C /var/www/html/custom_apps/occweb && rm /tmp/occweb-deploy.tar'"
|
tar -xf /tmp/occweb-deploy.tar -C /var/www/html/custom_apps/extended_occweb && rm /tmp/occweb-deploy.tar'"
|
||||||
|
|
||||||
# 3. Fix ownership - tar preserves the source uid/gid, not www-data
|
# 3. Fix ownership - tar preserves the source uid/gid, not www-data
|
||||||
ssh <docker-host> "docker exec nextcloud-aio-nextcloud chown -R www-data:www-data /var/www/html/custom_apps/occweb"
|
ssh <docker-host> "docker exec nextcloud-aio-nextcloud chown -R www-data:www-data /var/www/html/custom_apps/extended_occweb"
|
||||||
|
|
||||||
# 4. Fresh install only (skip when updating an already-enabled app):
|
# 4. Fresh install only (skip when updating an already-enabled app):
|
||||||
ssh <docker-host> "docker exec -u www-data nextcloud-aio-nextcloud php occ app:enable occweb"
|
ssh <docker-host> "docker exec -u www-data nextcloud-aio-nextcloud php occ app:enable extended_occweb"
|
||||||
```
|
```
|
||||||
|
|
||||||
> **Gotcha**: never copy a file into a container with `ssh host "docker exec container bash -c 'cat > file'"`
|
> **Gotcha**: never copy a file into a container with `ssh host "docker exec container bash -c 'cat > file'"`
|
||||||
@@ -54,7 +54,7 @@ and Nextcloud puts the whole instance into a "needs upgrade" state until you syn
|
|||||||
manually:
|
manually:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ssh <docker-host> "docker exec -u www-data nextcloud-aio-nextcloud php occ config:app:set occweb installed_version --value='X.Y.Z'"
|
ssh <docker-host> "docker exec -u www-data nextcloud-aio-nextcloud php occ config:app:set extended_occweb installed_version --value='X.Y.Z'"
|
||||||
```
|
```
|
||||||
|
|
||||||
(use the same `X.Y.Z` as the new `<version>`). Verify with `occ status` that
|
(use the same `X.Y.Z` as the new `<version>`). Verify with `occ status` that
|
||||||
@@ -77,8 +77,8 @@ default path) — hence the manual PID lookup.
|
|||||||
## Removing the app
|
## Removing the app
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ssh <docker-host> "docker exec -u www-data nextcloud-aio-nextcloud php occ app:disable occweb && \
|
ssh <docker-host> "docker exec -u www-data nextcloud-aio-nextcloud php occ app:disable extended_occweb && \
|
||||||
docker exec nextcloud-aio-nextcloud rm -rf /var/www/html/custom_apps/occweb"
|
docker exec nextcloud-aio-nextcloud rm -rf /var/www/html/custom_apps/extended_occweb"
|
||||||
```
|
```
|
||||||
|
|
||||||
## `max-version` policy
|
## `max-version` policy
|
||||||
|
|||||||
@@ -39,10 +39,13 @@ path and deploy steps differ from the generic instructions below.
|
|||||||
No build step required (plain PHP + vanilla JS). Clone straight into the
|
No build step required (plain PHP + vanilla JS). Clone straight into the
|
||||||
target server's `apps/` directory and run the install script:
|
target server's `apps/` directory and run the install script:
|
||||||
|
|
||||||
|
Nextcloud requires the app's directory name to match its id (`extended_occweb`), so
|
||||||
|
clone into that name explicitly rather than the repo's own name:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd /var/www/nextcloud/apps
|
cd /var/www/nextcloud/apps
|
||||||
git clone https://github.com/dillardblom/occweb.git
|
git clone https://github.com/dillardblom/occweb.git extended_occweb
|
||||||
bash occweb/install.sh
|
bash extended_occweb/install.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
`install.sh` removes the dev/CI-only files that don't belong in a running
|
`install.sh` removes the dev/CI-only files that don't belong in a running
|
||||||
@@ -53,7 +56,7 @@ server user, and runs `occ app:enable`. It assumes Nextcloud lives at
|
|||||||
values as arguments if that's not the case:
|
values as arguments if that's not the case:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
bash occweb/install.sh /path/to/nextcloud custom-web-user
|
bash extended_occweb/install.sh /path/to/nextcloud custom-web-user
|
||||||
```
|
```
|
||||||
|
|
||||||
`occ app:enable` takes care of registering the app's version correctly, so
|
`occ app:enable` takes care of registering the app's version correctly, so
|
||||||
@@ -102,7 +105,7 @@ So if your instance is pretty big, commands like `occ files:scan` will time out
|
|||||||
|
|
||||||
## Deploying updates
|
## Deploying updates
|
||||||
|
|
||||||
After pulling/copying new code into `nextcloud/apps/occweb/`, restart PHP so
|
After pulling/copying new code into `nextcloud/apps/extended_occweb/`, restart PHP so
|
||||||
the changes actually take effect. `occ app:disable`/`app:enable` is **not**
|
the changes actually take effect. `occ app:disable`/`app:enable` is **not**
|
||||||
enough — it does not clear PHP's opcode cache, so a stale, cached version of
|
enough — it does not clear PHP's opcode cache, so a stale, cached version of
|
||||||
the code can keep running (routes silently 404ing is a typical symptom).
|
the code can keep running (routes silently 404ing is a typical symptom).
|
||||||
@@ -124,7 +127,7 @@ CLI-upgrade wizard, even though nothing about Nextcloud core actually
|
|||||||
changed. After bumping the version, sync it manually:
|
changed. After bumping the version, sync it manually:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo -u www-data php /var/www/nextcloud/occ config:app:set occweb installed_version --value="X.Y.Z"
|
sudo -u www-data php /var/www/nextcloud/occ config:app:set extended_occweb installed_version --value="X.Y.Z"
|
||||||
```
|
```
|
||||||
|
|
||||||
(use the same `X.Y.Z` as the new `<version>`), then restart PHP as above.
|
(use the same `X.Y.Z` as the new `<version>`), then restart PHP as above.
|
||||||
|
|||||||
+3
-3
@@ -1,11 +1,11 @@
|
|||||||
<?xml version="1.0"?>
|
<?xml version="1.0"?>
|
||||||
<info xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
|
<info xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xsi:noNamespaceSchemaLocation="https://apps.nextcloud.com/schema/apps/info.xsd">
|
xsi:noNamespaceSchemaLocation="https://apps.nextcloud.com/schema/apps/info.xsd">
|
||||||
<id>occweb</id>
|
<id>extended_occweb</id>
|
||||||
<name>Extended OCC Web</name>
|
<name>Extended OCC Web</name>
|
||||||
<summary>OCC Commands in a web terminal</summary>
|
<summary>OCC Commands in a web terminal</summary>
|
||||||
<description><![CDATA[Run OCC Commands in a web terminal]]></description>
|
<description><![CDATA[Run OCC Commands in a web terminal]]></description>
|
||||||
<version>0.3.5</version>
|
<version>0.4.0</version>
|
||||||
<licence>agpl</licence>
|
<licence>agpl</licence>
|
||||||
<author mail="dillard.blom@ensembia.com" >Dillard Blom</author>
|
<author mail="dillard.blom@ensembia.com" >Dillard Blom</author>
|
||||||
<namespace>OCCWeb</namespace>
|
<namespace>OCCWeb</namespace>
|
||||||
@@ -25,7 +25,7 @@
|
|||||||
<navigations>
|
<navigations>
|
||||||
<navigation role="admin">
|
<navigation role="admin">
|
||||||
<name>OCCWeb</name>
|
<name>OCCWeb</name>
|
||||||
<route>occweb.occ.index</route>
|
<route>extended_occweb.occ.index</route>
|
||||||
<icon>app.svg</icon>
|
<icon>app.svg</icon>
|
||||||
<type>link</type>
|
<type>link</type>
|
||||||
</navigation>
|
</navigation>
|
||||||
|
|||||||
+5
-4
@@ -1,10 +1,11 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
#
|
#
|
||||||
# Post-clone install script for occweb.
|
# Post-clone install script for occweb (Nextcloud app id: extended_occweb).
|
||||||
#
|
#
|
||||||
# Usage (from nextcloud/apps/):
|
# Usage (from nextcloud/apps/) - clone into "extended_occweb", not the repo's
|
||||||
# git clone https://github.com/dillardblom/occweb.git
|
# own name, since Nextcloud requires the app directory to match its id:
|
||||||
# bash occweb/install.sh [nextcloud-root] [web-user]
|
# git clone https://github.com/dillardblom/occweb.git extended_occweb
|
||||||
|
# bash extended_occweb/install.sh [nextcloud-root] [web-user]
|
||||||
#
|
#
|
||||||
# Defaults: nextcloud-root=/var/www/nextcloud, web-user=www-data
|
# Defaults: nextcloud-root=/var/www/nextcloud, web-user=www-data
|
||||||
#
|
#
|
||||||
|
|||||||
+1
-1
@@ -12,7 +12,7 @@
|
|||||||
var html = $('html');
|
var html = $('html');
|
||||||
html.scrollTop(html.prop('scrollHeight'));
|
html.scrollTop(html.prop('scrollHeight'));
|
||||||
}
|
}
|
||||||
var baseUrl = OC.generateUrl('/apps/occweb');
|
var baseUrl = OC.generateUrl('/apps/extended_occweb');
|
||||||
|
|
||||||
// Current terminal mode: 'occ' (regular occ commands) or 'sql'
|
// Current terminal mode: 'occ' (regular occ commands) or 'sql'
|
||||||
// (running arbitrary SQL queries via /db/query).
|
// (running arbitrary SQL queries via /db/query).
|
||||||
|
|||||||
@@ -189,8 +189,8 @@ class DbController extends Controller
|
|||||||
// Audit: log the fact that execution was attempted BEFORE any checks,
|
// Audit: log the fact that execution was attempted BEFORE any checks,
|
||||||
// so blocked/rejected queries are recorded in the log too, not just
|
// so blocked/rejected queries are recorded in the log too, not just
|
||||||
// the ones that succeeded.
|
// the ones that succeeded.
|
||||||
$this->logger->warning('[occweb] SQL submitted by {user}: {sql}', [
|
$this->logger->warning('[extended_occweb] SQL submitted by {user}: {sql}', [
|
||||||
'app' => 'occweb',
|
'app' => 'extended_occweb',
|
||||||
'user' => $user->getUID(),
|
'user' => $user->getUID(),
|
||||||
'sql' => $sql,
|
'sql' => $sql,
|
||||||
]);
|
]);
|
||||||
@@ -207,8 +207,8 @@ class DbController extends Controller
|
|||||||
foreach ($queries as $query) {
|
foreach ($queries as $query) {
|
||||||
$forbidden = $this->findForbiddenConstruct($query);
|
$forbidden = $this->findForbiddenConstruct($query);
|
||||||
if ($forbidden !== null) {
|
if ($forbidden !== null) {
|
||||||
$this->logger->error('[occweb] Blocked forbidden construct ({construct}) from {user}: {sql}', [
|
$this->logger->error('[extended_occweb] Blocked forbidden construct ({construct}) from {user}: {sql}', [
|
||||||
'app' => 'occweb',
|
'app' => 'extended_occweb',
|
||||||
'construct' => $forbidden,
|
'construct' => $forbidden,
|
||||||
'user' => $user->getUID(),
|
'user' => $user->getUID(),
|
||||||
'sql' => $sql,
|
'sql' => $sql,
|
||||||
@@ -277,8 +277,8 @@ class DbController extends Controller
|
|||||||
$this->db->beginTransaction();
|
$this->db->beginTransaction();
|
||||||
$transactionStarted = true;
|
$transactionStarted = true;
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
$this->logger->warning('[occweb] beginTransaction() failed, proceeding without an explicit transaction: {error}', [
|
$this->logger->warning('[extended_occweb] beginTransaction() failed, proceeding without an explicit transaction: {error}', [
|
||||||
'app' => 'occweb',
|
'app' => 'extended_occweb',
|
||||||
'error' => $e->getMessage(),
|
'error' => $e->getMessage(),
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
@@ -353,8 +353,8 @@ class DbController extends Controller
|
|||||||
// permanently applied — we deliberately do NOT set
|
// permanently applied — we deliberately do NOT set
|
||||||
// rolledBack to true, since that would be untrue.
|
// rolledBack to true, since that would be untrue.
|
||||||
$rollbackFailed = true;
|
$rollbackFailed = true;
|
||||||
$this->logger->warning('[occweb] rollBack() failed after an error — earlier statements in this batch may already be permanently applied: {error}', [
|
$this->logger->warning('[extended_occweb] rollBack() failed after an error — earlier statements in this batch may already be permanently applied: {error}', [
|
||||||
'app' => 'occweb',
|
'app' => 'extended_occweb',
|
||||||
'error' => $rollbackError->getMessage(),
|
'error' => $rollbackError->getMessage(),
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
@@ -371,8 +371,8 @@ class DbController extends Controller
|
|||||||
// a DDL statement on MySQL/MariaDB) — the effects are
|
// a DDL statement on MySQL/MariaDB) — the effects are
|
||||||
// already saved, this isn't an error in executing the batch
|
// already saved, this isn't an error in executing the batch
|
||||||
// itself.
|
// itself.
|
||||||
$this->logger->info('[occweb] commit() had nothing to commit (likely auto-committed by a DDL statement): {error}', [
|
$this->logger->info('[extended_occweb] commit() had nothing to commit (likely auto-committed by a DDL statement): {error}', [
|
||||||
'app' => 'occweb',
|
'app' => 'extended_occweb',
|
||||||
'error' => $e->getMessage(),
|
'error' => $e->getMessage(),
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ class OccController extends Controller
|
|||||||
public function index()
|
public function index()
|
||||||
{
|
{
|
||||||
if ($err = $this->requireAdmin()) return $err;
|
if ($err = $this->requireAdmin()) return $err;
|
||||||
return new TemplateResponse('occweb', 'index');
|
return new TemplateResponse('extended_occweb', 'index');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
+5
-5
@@ -3,11 +3,11 @@
|
|||||||
// reliably present on NC34+ (see e.g. serverinfo needing to bundle its own) -
|
// reliably present on NC34+ (see e.g. serverinfo needing to bundle its own) -
|
||||||
// term.js (jquery.terminal) and index.js both require jQuery to be loaded
|
// term.js (jquery.terminal) and index.js both require jQuery to be loaded
|
||||||
// first, so ship and load our own copy rather than relying on core.
|
// first, so ship and load our own copy rather than relying on core.
|
||||||
script('occweb', 'jquery');
|
script('extended_occweb', 'jquery');
|
||||||
script('occweb', 'index');
|
script('extended_occweb', 'index');
|
||||||
script('occweb', 'term');
|
script('extended_occweb', 'term');
|
||||||
script('occweb', 'unix_formatting');
|
script('extended_occweb', 'unix_formatting');
|
||||||
style('occweb', 'style');
|
style('extended_occweb', 'style');
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<div id="app" class="full-width">
|
<div id="app" class="full-width">
|
||||||
|
|||||||
Reference in New Issue
Block a user