Skip to content

Commit 916812d

Browse files
committed
Added hard fix for menu header and query param strip
Signed-off-by: Sagar <sagargurung1001@gmail.com>
1 parent 9e15059 commit 916812d

2 files changed

Lines changed: 55 additions & 7 deletions

File tree

failure.log

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
12:57:45 web.1 | I, [2024-09-03T12:57:45.556474 #8636] INFO -- : Started GET "/stable30/index.php/apps/app_api/proxy/openproject-nextcloud-app/projects/demo-project/settings/project_storages/new?storages_project_storage%5B%5D=3&utf8=%E2%9C%93&button=" for 127.0.0.1 at 2024-09-03 12:57:45 +0545
2+
12:57:45 web.1 | I, [2024-09-03T12:57:45.558529 #8636] INFO -- : Processing by Storages::Admin::ProjectStoragesController#new as HTML
3+
12:57:45 web.1 | I, [2024-09-03T12:57:45.558567 #8636] INFO -- : Parameters: {"storages_project_storage"=>["3"], "utf8"=>"✓", "button"=>"", "project_id"=>"demo-project"}
4+
12:57:45 web.1 | User Load (0.5ms) SELECT "users".* FROM "users" WHERE "users"."type" IN ($1, $2, $3, $4) AND "users"."type" NOT IN ($5, $6, $7) AND "users"."status" = $8 AND "users"."id" = $9 LIMIT $10 [["type", "User"], ["type", "DeletedUser"], ["type", "SystemUser"], ["type", "AnonymousUser"], ["type", "SystemUser"], ["type", "AnonymousUser"], ["type", "DeletedUser"], ["status", 1], ["id", 4], ["LIMIT", 1]]
5+
12:57:45 web.1 | ↳ app/controllers/concerns/accounts/current_user.rb:86:in `current_session_user'
6+
12:57:45 web.1 | Setting Maximum (0.4ms) SELECT MAX("settings"."updated_at") FROM "settings"
7+
12:57:45 web.1 | ↳ app/models/setting.rb:316:in `settings_updated_at'
8+
12:57:45 web.1 | Setting Pluck (0.3ms) SELECT "settings"."name", "settings"."value" FROM "settings"
9+
12:57:45 web.1 | ↳ app/models/setting.rb:304:in `block (2 levels) in cached_settings'
10+
12:57:45 web.1 | Storages::Storage Load (0.7ms) SELECT "storages".* FROM "storages" WHERE "storages"."id" IN (SELECT "project_storages"."storage_id" FROM "project_storages" WHERE "project_storages"."project_id" IN (SELECT "projects"."id" FROM "projects" WHERE "projects"."id" IN (SELECT "projects"."id" FROM "projects" INNER JOIN "enabled_modules" ON "projects"."id" = "enabled_modules"."project_id" AND "enabled_modules"."name" IN ('work_package_tracking') AND "projects"."active" = TRUE WHERE "projects"."active" = TRUE)))
11+
12:57:45 web.1 | ↳ modules/storages/lib/open_project/storages/append_storages_hosts_to_csp_hook.rb:53:in `flat_map'
12+
12:57:45 web.1 | Project Load (0.2ms) SELECT "projects".* FROM "projects" WHERE "projects"."identifier" = $1 LIMIT $2 [["identifier", "demo-project"], ["LIMIT", 1]]
13+
12:57:45 web.1 | ↳ app/controllers/application_controller.rb:249:in `find_project_by_project_id'
14+
12:57:45 web.1 | EnabledModule Pluck (0.2ms) SELECT "enabled_modules"."name" FROM "enabled_modules" WHERE "enabled_modules"."project_id" = $1 [["project_id", 1]]
15+
12:57:45 web.1 | ↳ app/models/project.rb:263:in `allowed_permissions'
16+
12:57:45 web.1 | Project Exists? (0.3ms) SELECT 1 AS one FROM "projects" WHERE "projects"."id" IN (SELECT "projects"."id" FROM "projects" WHERE "projects"."active" = TRUE) LIMIT $1 [["LIMIT", 1]]
17+
12:57:45 web.1 | ↳ app/services/authorization/user_permissible_service.rb:70:in `block in cached_in_any_project?'
18+
12:57:45 web.1 | Storages::ProjectStorage Pluck (0.2ms) SELECT "project_storages"."storage_id" FROM "project_storages" WHERE "project_storages"."project_id" = $1 [["project_id", 1]]
19+
12:57:45 web.1 | ↳ modules/storages/app/models/storages/storage.rb:81:in `block in <class:Storage>'
20+
12:57:45 web.1 | Storages::Storage Load (0.3ms) SELECT "storages".* FROM "storages" WHERE 1=1
21+
12:57:45 web.1 | ↳ modules/storages/app/controllers/storages/admin/project_storages_controller.rb:155:in `available_storages'
22+
12:57:45 web.1 | OAuthClient Load (0.2ms) SELECT "oauth_clients".* FROM "oauth_clients" WHERE "oauth_clients"."integration_id" = $1 AND "oauth_clients"."integration_type" = $2 LIMIT $3 [["integration_id", 3], ["integration_type", "Storages::Storage"], ["LIMIT", 1]]
23+
12:57:45 web.1 | ↳ modules/storages/app/models/storages/nextcloud_storage.rb:67:in `configuration_checks'
24+
12:57:45 web.1 | Doorkeeper::Application Load (0.3ms) SELECT "oauth_applications".* FROM "oauth_applications" WHERE "oauth_applications"."integration_id" = $1 AND "oauth_applications"."integration_type" = $2 LIMIT $3 [["integration_id", 3], ["integration_type", "Storages::Storage"], ["LIMIT", 1]]
25+
12:57:45 web.1 | ↳ modules/storages/app/models/storages/nextcloud_storage.rb:68:in `configuration_checks'
26+
12:57:45 web.1 | I, [2024-09-03T12:57:45.575233 #8636] INFO -- : Completed 500 Internal Server Error in 17ms (ActiveRecord: 4.0ms | Allocations: 9089)
27+
12:57:45 web.1 |
28+
12:57:45 web.1 |
29+
12:57:45 web.1 | I, [2024-09-03T12:57:45.575306 #8636] INFO -- : method=GET path=/stable30/index.php/apps/app_api/proxy/openproject-nextcloud-app/projects/demo-project/settings/project_storages/new format=html controller=Storages::Admin::ProjectStoragesController action=new status=500 allocations=9089 duration=16.56 view=0.00 db=4.00 user=4
30+
12:57:45 web.1 | F, [2024-09-03T12:57:45.576318 #8636] FATAL -- :
31+
12:57:45 web.1 | TypeError (no implicit conversion of Symbol into Integer):
32+
12:57:45 web.1 |
33+
12:57:45 web.1 | modules/storages/app/controllers/storages/admin/project_storages_controller.rb:147:in `block in project_folder_mode_from_params'
34+
12:57:45 web.1 | modules/storages/app/controllers/storages/admin/project_storages_controller.rb:146:in `each'
35+
12:57:45 web.1 | modules/storages/app/controllers/storages/admin/project_storages_controller.rb:146:in `find'
36+
12:57:45 web.1 | modules/storages/app/controllers/storages/admin/project_storages_controller.rb:146:in `project_folder_mode_from_params'
37+
12:57:45 web.1 | modules/storages/app/controllers/storages/admin/project_storages_controller.rb:46:in `new'

lib/main.py

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import typing
22
import httpx
33
import os
4-
from urllib.parse import urlparse
4+
from urllib.parse import urlparse, parse_qs
55
import urllib.parse
66
from urllib.parse import urlencode
77
import json
@@ -83,10 +83,6 @@ async def proxy_request_to_server(request: Request, path: str):
8383
backend_url = get_backend_url()
8484
url = f"{backend_url}/{path}"
8585
headers = {}
86-
print("HEADERS--------")
87-
print(url)
88-
print(request.headers)
89-
print("HEADERS--------")
9086
for k, v in request.headers.items():
9187
# NOTE:
9288
# - remove 'host' to make op routes work
@@ -96,10 +92,25 @@ async def proxy_request_to_server(request: Request, path: str):
9692
headers[k] = v
9793

9894
if request.method == "GET":
99-
headers.update({'referer': 'http://localhost/stable30/index.php/apps/app_api/proxy/openproject-nextcloud-app/projects/dev-custom-fields/work_packages'})
95+
params=request.query_params
96+
# A referrer header is required when we request to '/work_packages/menu' enpoint
97+
# Currently the browser does not provide the referer header so it has ben put thourugh this proxy
98+
# Also it works even referrer is empty
99+
if url.endswith("/work_packages/menu"):
100+
headers.update({'referer': ''})
101+
102+
if "/project_storages/new" in url :
103+
# when requesting the storate_id is stripped in the proxy (reason is unknown). This piece of code modifies the query param to add missing storage_id
104+
query_params = dict(params)
105+
if 'storages_project_storage[]' in query_params:
106+
value = query_params['storages_project_storage[]']
107+
new_key = 'storages_project_storage[storage_id]'
108+
query_params[new_key] = value
109+
del query_params['storages_project_storage[]']
110+
params = urlencode(query_params, doseq=True)
100111
response = await client.get(
101112
url,
102-
params=request.query_params,
113+
params=params,
103114
headers=headers,
104115
)
105116
else:

0 commit comments

Comments
 (0)