Skip to content

Commit 8200a2a

Browse files
authored
[tests-only] CERNBox setup for ScienceMesh tests (#4391)
* Improved sciencemesh config * Reworked temporary deployment of cernbox web * Changelog * Fixes: the CERNBox web UI now almost works, not yet the invitations * Fixed meshdir for CERNBox to support invitations and removed duplicates * ocm provider authorizer: configuration to disable check takes precedence This is preliminary to be able to support OCM without ScienceMesh * Fixed public links provider and some other entries * Patched web link to meshdir * Revert for now the revad build without gaia * Further minor fixes
1 parent 26ebe9b commit 8200a2a

File tree

18 files changed

+106
-91
lines changed

18 files changed

+106
-91
lines changed

changelog/unreleased/sm-cernbox.md

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
Enhancement: CERNBox setup for ScienceMesh tests
2+
3+
This PR includes a bundled CERNBox-like web UI and backend
4+
to test the ScienceMesh workflows with OC10 and NC
5+
6+
https://github.com/cs3org/reva/pull/4391
-869 KB
Binary file not shown.

examples/cernbox/cernbox.toml

+26-8
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ level = "debug"
2020

2121
[shared]
2222
gatewaysvc = "{{ vars.internal_gateway }}:19000"
23+
jwt_secret = "reva-secret"
2324

2425
[grpc.services.gateway]
2526
address = ":19000"
@@ -29,6 +30,7 @@ storageregistrysvc = "{{ grpc.services.storageregistry.address }}"
2930
preferencessvc = "{{ grpc.services.userprovider.address }}"
3031
userprovidersvc = "{{ grpc.services.userprovider.address }}"
3132
usershareprovidersvc = "{{ grpc.services.usershareprovider.address }}"
33+
publicshareprovidersvc = "{{ grpc.services.publicshareprovider.address }}"
3234
ocmcoresvc = "{{ grpc.services.ocmcore.address }}"
3335
ocmshareprovidersvc = "{{ grpc.services.ocmshareprovider.address }}"
3436
ocminvitemanagersvc = "{{ grpc.services.ocminvitemanager.address }}"
@@ -84,13 +86,14 @@ app_int_url = "http://collabora.docker:9980"
8486
# app_int_url = "https://codimd.docker"
8587

8688

87-
### AUTH PROVIDERS ###
89+
### AUTH ###
8890

8991
[grpc.services.authregistry]
9092
driver = "static"
9193

9294
[grpc.services.authregistry.drivers.static.rules]
9395
basic = "{{ grpc.services.authprovider[0].address }}"
96+
bearer = "{{ grpc.services.authprovider[0].address }}"
9497
machine = "{{ grpc.services.authprovider[1].address }}"
9598
ocmshares = "{{ grpc.services.authprovider[2].address }}"
9699

@@ -117,16 +120,16 @@ gateway_addr = "{{ vars.internal_gateway }}:19000"
117120
auth_manager = "ocmshares"
118121

119122

120-
### STORAGE PROVIDERS ###
123+
### STORAGE ###
121124

122125
[grpc.services.storageregistry]
123126
driver = "static"
124127

125128
[grpc.services.storageregistry.drivers.static]
126-
home_provider = "/home"
129+
home_provider = "/"
127130

128131
[grpc.services.storageregistry.drivers.static.rules]
129-
"/home" = {"address" = "{{ grpc.services.storageprovider[0].address }}"}
132+
"/" = {"address" = "{{ grpc.services.storageprovider[0].address }}"}
130133
"localhome" = {"address" = "{{ grpc.services.storageprovider[0].address }}"}
131134
"/ocm" = {"address" = "{{ grpc.services.storageprovider[1].address }}"}
132135
"ocm" = {"address" = "{{ grpc.services.storageprovider[1].address }}"}
@@ -135,11 +138,11 @@ home_provider = "/home"
135138

136139
[[grpc.services.storageprovider]]
137140
driver = "localhome"
138-
mount_path = "/home"
141+
mount_path = "/"
139142
mount_id = "localhome"
140143
expose_data_server = true
141144
data_server_url = "https://localhost:{{ http.services.dataprovider[0].address.port }}/data"
142-
enable_home_creation = false
145+
enable_home_creation = true
143146

144147
[grpc.services.storageprovider.drivers.localhome]
145148
user_layout = "{{.Username}}"
@@ -172,6 +175,8 @@ driver = "memory"
172175
[grpc.services.publicshareprovider]
173176
driver = "memory"
174177

178+
[grpc.services.preferences]
179+
175180
[grpc.services.ocmcore]
176181
driver = "json"
177182

@@ -233,9 +238,15 @@ file = ""
233238

234239
### HTTP ENDPOINTS ###
235240

241+
[http.middlewares.auth]
242+
credential_chain = ["publicshares", "basic", "bearer"]
243+
token_strategy_chain = ["bearer", "header"]
244+
245+
[http.middlewares.auth.credentials_by_user_agent]
246+
"mirall" = "basic"
247+
236248
[http.services.appprovider]
237249
address = ":443"
238-
insecure = true
239250

240251
[http.services.datagateway]
241252
address = ":443"
@@ -259,7 +270,7 @@ driver = "ocmreceived"
259270
[http.services.sciencemesh]
260271
address = ":443"
261272
provider_domain = "{{ vars.provider_domain }}"
262-
mesh_directory_url = "https://sciencemesh.cesnet.cz/iop/meshdir"
273+
mesh_directory_url = "https:/meshdir.docker/meshdir"
263274
ocm_mount_point = "/sciencemesh"
264275

265276
[http.services.sciencemesh.smtp_credentials]
@@ -376,6 +387,7 @@ string = "10.0.11"
376387

377388
[http.services.ocdav]
378389
address = ":443"
390+
insecure = true
379391

380392
[http.services.prometheus]
381393
address = ":443"
@@ -386,4 +398,10 @@ address = ":443"
386398
#address = ":443"
387399

388400
[http.middlewares.cors]
401+
allowed_origins = ["*"]
402+
allowed_methods = ["OPTIONS", "LOCK", "GET", "HEAD", "POST", "DELETE", "PROPPATCH", "COPY", "MOVE", "UNLOCK", "PROPFIND", "MKCOL", "REPORT", "SEARCH", "PUT"]
403+
allowed_headers = ["Accept", "Accept-Language", "Authorization", "Content-Language", "Content-Type", "Depth", "OCS-APIREQUEST", "Referer", "sec-ch-ua", "sec-ch-ua-mobile", "sec-ch-ua-platform", "User-Agent", "X-Requested-With"]
404+
debug = true
405+
exposed_headers = []
406+
389407
[http.middlewares.log]

examples/cernbox/custom-mime-types-demo.json

-3
This file was deleted.

examples/cernbox/keycloak/cernbox.json

+8-5
Original file line numberDiff line numberDiff line change
@@ -636,7 +636,9 @@
636636
"redirectUris": [
637637
"/realms/cernbox/account/*"
638638
],
639-
"webOrigins": [],
639+
"webOrigins": [
640+
"*"
641+
],
640642
"notBefore": 0,
641643
"bearerOnly": false,
642644
"consentRequired": false,
@@ -680,7 +682,9 @@
680682
"redirectUris": [
681683
"/realms/cernbox/account/*"
682684
],
683-
"webOrigins": [],
685+
"webOrigins": [
686+
"*"
687+
],
684688
"notBefore": 0,
685689
"bearerOnly": false,
686690
"consentRequired": false,
@@ -815,8 +819,7 @@
815819
"https://cernbox2.docker/*"
816820
],
817821
"webOrigins": [
818-
"https://cernbox1.docker/*",
819-
"https://cernbox2.docker/*"
822+
"*"
820823
],
821824
"notBefore": 0,
822825
"bearerOnly": false,
@@ -903,7 +906,7 @@
903906
"/admin/cernbox/console/*"
904907
],
905908
"webOrigins": [
906-
"+"
909+
"*"
907910
],
908911
"notBefore": 0,
909912
"bearerOnly": false,

examples/cernbox/nginx/nginx.conf

+8-2
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,10 @@ http {
106106
proxy_set_header Host $host;
107107
}
108108

109+
location ^~ /otg {
110+
return 204;
111+
}
112+
109113
location ^~ /app/ {
110114
proxy_pass https://revad;
111115
proxy_set_header Host $host;
@@ -139,7 +143,9 @@ http {
139143
}
140144

141145
location ^~ /cernbox {
142-
root /var/www/cernbox;
146+
root /var/www;
147+
add_header Cache-Control "no-cache";
148+
add_header Access-Control-Allow-Origin "https://idp.docker:8443" always;
143149
etag off;
144150
gzip_static on;
145151
}
@@ -148,7 +154,7 @@ http {
148154
root /var/www/web;
149155
add_header Cache-Control "no-cache";
150156
add_header Access-Control-Allow-Origin "https://idp.docker:8443" always;
151-
etag on;
157+
etag off;
152158
gzip_static on;
153159
try_files $uri /index.html;
154160
}

examples/cernbox/providers.testnet.json

-26
This file was deleted.

examples/cernbox/web-bundle.tgz

5.53 MB
Binary file not shown.

examples/cernbox/web.json

+1-2
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,10 @@
1212
"options": {
1313
"contextHelpers": true,
1414
"enableAdvancedTable": true,
15-
"runningOnEos": true,
1615
"cernFeatures": true,
1716
"hoverableQuickActions": true,
1817
"disableFeedbackLink": true,
19-
"homeFolder": "/home/{{.Id}}",
18+
"homeFolder": "/{{.Id}}",
2019
"previewFileMimeTypes" : [
2120
"image/gif",
2221
"image/png",
+15-7
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,34 @@
11
[
2-
{ "domain": "revad1.docker", "services": [
2+
{ "domain": "revad1.docker", "services": [
33
{ "endpoint": { "type": { "name": "OCM" }, "path": "https://revad1.docker/ocm/" }, "host": "revad1.docker" },
44
{ "endpoint": { "type": { "name": "Webdav" }, "path": "https://revad1.docker/remote.php/webdav/" }, "host": "revad1.docker" }
55
] },
66
{ "domain": "revad2.docker", "services": [
77
{ "endpoint": { "type": { "name": "OCM" }, "path": "https://revad2.docker/ocm/" }, "host": "revad2.docker" },
88
{ "endpoint": { "type": { "name": "Webdav" }, "path": "https://revad2.docker/remote.php/webdav/" }, "host": "revad2.docker" }
99
] },
10-
{ "domain": "revanextcloud1.docker", "services": [
10+
{ "domain": "revanextcloud1.docker", "services": [
1111
{ "endpoint": { "type": { "name": "OCM" }, "path": "https://revanextcloud1.docker/ocm/" }, "host": "revanextcloud1.docker" },
12-
{ "endpoint": { "type": { "name": "Webdav" }, "path": "https://nc1.docker/remote.php/webdav/" }, "host": "nc1.docker" }
12+
{ "endpoint": { "type": { "name": "Webdav" }, "path": "https://nc1.docker/remote.php/webdav/" }, "host": "nextcloud1.docker" }
1313
] },
1414
{ "domain": "revanextcloud2.docker", "services": [
1515
{ "endpoint": { "type": { "name": "OCM" }, "path": "https://revanextcloud2.docker/ocm/" }, "host": "revanextcloud2.docker" },
16-
{ "endpoint": { "type": { "name": "Webdav" }, "path": "https://nc2.docker/remote.php/webdav/" }, "host": "nc2.docker" }
16+
{ "endpoint": { "type": { "name": "Webdav" }, "path": "https://nc2.docker/remote.php/webdav/" }, "host": "nextcloud2.docker" }
1717
] },
18-
{ "domain": "revaowncloud1.docker", "services": [
18+
{ "domain": "revaowncloud1.docker", "services": [
1919
{ "endpoint": { "type": { "name": "OCM" }, "path": "https://revaowncloud1.docker/ocm/" }, "host": "revaowncloud1.docker" },
20-
{ "endpoint": { "type": { "name": "Webdav" }, "path": "https://oc1.docker/remote.php/webdav/" }, "host": "oc1.docker" }
20+
{ "endpoint": { "type": { "name": "Webdav" }, "path": "https://owncloud1.docker/remote.php/webdav/" }, "host": "owncloud1.docker" }
2121
] },
2222
{ "domain": "revaowncloud2.docker", "services": [
2323
{ "endpoint": { "type": { "name": "OCM" }, "path": "https://revaowncloud2.docker/ocm/" }, "host": "revaowncloud2.docker" },
24-
{ "endpoint": { "type": { "name": "Webdav" }, "path": "https://oc2.docker/remote.php/webdav/" }, "host": "oc2.docker" }
24+
{ "endpoint": { "type": { "name": "Webdav" }, "path": "https://owncloud2.docker/remote.php/dav/" }, "host": "owncloud2.docker" }
25+
] },
26+
{ "domain": "revacernbox1.docker", "services": [
27+
{ "endpoint": { "type": { "name": "OCM" }, "path": "https://revacernbox1.docker/ocm/" }, "host": "revacernbox1.docker" },
28+
{ "endpoint": { "type": { "name": "Webdav" }, "path": "https://cernbox1.docker/remote.php/dav/" }, "host": "cernbox1.docker" }
29+
] },
30+
{ "domain": "revacernbox2.docker", "services": [
31+
{ "endpoint": { "type": { "name": "OCM" }, "path": "https://revacernbox2.docker/ocm/" }, "host": "revacernbox2.docker" },
32+
{ "endpoint": { "type": { "name": "Webdav" }, "path": "https://cernbox2.docker/remote.php/dav/" }, "host": "cernbox2.docker" }
2533
] }
2634
]

examples/sciencemesh/sciencemesh.toml

+1-2
Original file line numberDiff line numberDiff line change
@@ -161,8 +161,7 @@ driver = "nextcloud"
161161
provider_domain = "{{ vars.provider_domain }}"
162162
webdav_endpoint = "{{ vars.external_reva_endpoint }}"
163163
webdav_prefix = "{{ vars.external_reva_endpoint }}/remote.php/dav/files"
164-
# TODO the following should become {{ vars.external_reva_endpoint }}/external/{{.Token}}/...
165-
webapp_template = "https://your.revad.org/external/sciencemesh/{{.Token}}/{relative-path-to-shared-resource}"
164+
webapp_template = "{{ vars.external_reva_endpoint }}/external/sciencemesh/{{.Token}}/{relative-path-to-shared-resource}"
166165

167166
[grpc.services.ocmshareprovider.drivers.nextcloud]
168167
webdav_host = "{{ vars.external_reva_endpoint }}"

pkg/ocm/provider/authorizer/json/json.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -130,10 +130,10 @@ func (a *authorizer) IsProviderAllowed(ctx context.Context, pi *ocmprovider.Prov
130130
}
131131

132132
switch {
133-
case !providerAuthorized:
134-
return errtypes.NotFound(pi.GetDomain())
135133
case !a.conf.VerifyRequestHostname:
136134
return nil
135+
case !providerAuthorized:
136+
return errtypes.NotFound(pi.GetDomain())
137137
case len(pi.Services) == 0:
138138
return errtypes.NotSupported("No IP provided")
139139
}

pkg/ocm/provider/authorizer/mentix/mentix.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -185,10 +185,10 @@ func (a *authorizer) IsProviderAllowed(ctx context.Context, pi *ocmprovider.Prov
185185
}
186186

187187
switch {
188-
case !providerAuthorized:
189-
return errtypes.NotFound(pi.GetDomain())
190188
case !a.conf.VerifyRequestHostname:
191189
return nil
190+
case !providerAuthorized:
191+
return errtypes.NotFound(pi.GetDomain())
192192
case len(pi.Services) == 0:
193193
return errtypes.NotSupported(
194194
fmt.Sprintf("mentix: provider %s has no supported services", pi.GetDomain()))

tests/sciencemesh/init.sh

+26-23
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,6 @@ BRANCH_NEXTCLOUD_APP=nextcloud
99
REPO_OWNCLOUD_APP=https://github.com/sciencemesh/nc-sciencemesh
1010
BRANCH_OWNCLOUD_APP=owncloud
1111

12-
# TODO will be dropped in favour of Reva directly serving the UI
13-
CBOX_WEB=https://github.com/cernbox/web-release/releases/latest/download
14-
1512
REPO_WOPISERVER=https://github.com/cs3org/wopiserver
1613
TAG_WOPISERVER=master
1714

@@ -45,27 +42,33 @@ TAG_WOPISERVER=master
4542
pondersource/dev-stock-owncloud-sciencemesh \
4643
composer install
4744

48-
# CERNBox web and extensions sources: uid=101 is nginx in the nginx container.
49-
# TODO the extensions are temporarily extracted from a tgz
50-
[ ! -d "cernbox-web-sciencemesh" ] && \
51-
mkdir -p temp/cernbox-1-conf temp/cernbox-2-conf && \
52-
cp cernbox/nginx/* temp/cernbox-1-conf && \
53-
cp cernbox/nginx/* temp/cernbox-2-conf && \
45+
# CERNBox web bundle (temporary, to be served by Reva in the future):
46+
# uid=101 is 'nginx' in the nginx container.
47+
[ ! -d "cernbox-web-sciencemesh" ] &&
5448
mkdir cernbox-web-sciencemesh && \
55-
cd cernbox-web-sciencemesh &&
56-
mkdir -p ./web && mkdir -p ./cernbox && \
57-
wget ${CBOX_WEB}/web.tar.gz && \
58-
tar xf web.tar.gz -C ./web --strip-components=1 && \
59-
rm -rf web.tar.gz && \
60-
tar xf ../cernbox/cernbox-extensions-bundle.tgz && \
49+
cd cernbox-web-sciencemesh && \
50+
tar xf ../cernbox/web-bundle.tgz && \
51+
cd web/js && sed -i "s|sciencemesh\.cesnet\.cz\/iop|meshdir\.docker|" \
52+
web-app-science*mjs && \
53+
rm web-app-science*mjs.gz && gzip web-app-science*mjs && \
54+
cd ../.. && \
6155
chmod -R 755 ./* && chown -R 101:101 ./* && \
62-
cd -
56+
cd ..
6357

6458
# wopiserver source code for the config.
65-
[ ! -d "wopi-sciencemesh" ] && \
66-
git clone --branch ${TAG_WOPISERVER} ${REPO_WOPISERVER} wopi-sciencemesh && \
67-
mkdir -p temp/wopi-1-conf temp/wopi-2-conf && \
68-
cp wopi-sciencemesh/wopiserver.conf temp/wopi-1-conf/wopiserver.defaults.conf && \
69-
echo "shared-secret-2" > temp/wopi-1-conf/iopsecret && \
70-
echo "wopisecret" > temp/wopi-1-conf/wopisecret && \
71-
cp temp/wopi-1-conf/* temp/wopi-2-conf/
59+
[ ! -d "wopi-sciencemesh" ] && \
60+
git clone --branch ${TAG_WOPISERVER} ${REPO_WOPISERVER} wopi-sciencemesh \
61+
62+
# Runtime configurations for WOPI and CERNBox.
63+
[ ! -d "temp" ] && \
64+
mkdir -p temp/cernbox-1-conf temp/cernbox-2-conf && \
65+
cp cernbox/nginx/* temp/cernbox-1-conf && \
66+
cp cernbox/nginx/* temp/cernbox-2-conf && \
67+
mkdir -p temp/wopi-1-conf temp/wopi-2-conf && \
68+
cp wopi-sciencemesh/wopiserver.conf \
69+
temp/wopi-1-conf/wopiserver.defaults.conf && \
70+
echo "shared-secret-2" > temp/wopi-1-conf/iopsecret && \
71+
echo "wopisecret" > temp/wopi-1-conf/wopisecret && \
72+
cp temp/wopi-1-conf/* temp/wopi-2-conf/ && \
73+
echo "temp folder for runtime configurations created"
74+

tests/sciencemesh/scripts/build-reva.sh

+2
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,7 @@ set -e
55
git config --global --add safe.directory /reva
66
# go mod tidy
77
go mod vendor
8+
#make gaia
9+
#gaia build --with github.com/cernbox/reva-ocweb-plugin --with github.com/cs3org/reva=$(shell pwd) -o ./cmd/revad/revad
810
make revad
911
make reva

0 commit comments

Comments
 (0)