Reverse proxy in front of GitLab API breaks the project API request
Update
For anybody reading this, directly proceed to this answer by @andreas.wolf for the solution (working configuration of an apache reverse proxy).
To my understanding, there won't be any other fix (see the discussion of the underlying issue on gitlab).
Original description
We are running a Gitlab CE installation (v. 12.7.2) and I wanted to give this extension a try, since VSCode and Gitlab are major aspects of our workflow.
Initially, not much happened - the site pane simply stayed blank.
(Literally) at the end of the day, I found that our local problem (that also seems to exist in a very similar way on gitlab.com) is the way the extension tries to retrieve project information from the API.
Different method of accessing repositories via API
- When querying the API by using the
[instance]/api/v4/projects/namespace%2Frepository
-syntax, the result is an 404 error page. - When using the unencoded version
[instance]/api/v4/projects/namespace/repository
, the result is always{"message":"404 Project Not Found"}
. - Using the
id
of the project ([instance]/api/v4/projects/[id]
) works just fine, so it's not a permissions problem. However, the ID is not known locally (?), so this is not usable for the extension. - Querying the project by using the search function works, but a) returns an array of all matches and b) often returns multiple matches
All of these can be easily reproduced with gitlab.com:
- Query like in the extension fails: https://gitlab.com/api/v4/projects/gitlab-org%2Fgitlab-ce
- Query by ID works: https://gitlab.com/api/v4/projects/3850566
- Query by search works (but returns an array of all matches): https://gitlab.com/api/v4/projects?search=gitlab-org/gitlab-ce
In our setup, all repository names include underscores. As special characters seem to have caused similar problematic behaviour with the API in the past (see [35259] , [197342] and [25030]), I looked into encoding all characters in project name and namespace (instead of just replacing /
with %2F
as currently done).
However, this did not work (encodeURIComponent() would not be enough since it does not replace characters like - _ . ! ~ * ' ( )
, but manual replacing also does not help - try https://gitlab.com/api/v4/projects/gitlab%2Dorg%2Fgitlab%2Dce).
Potential fixes
The root problem seems to be buggy behaviour from gitlab itself. The question @fatihacet is whether this extension wants to implement a workaround or rather wait for the 'official' API to work as expected.
However, from a users PoV it looks like an extension problem and imo could partially explain the different experiences people had with this extension (see 1 star vs. 5 star ratings on marketplace and various issues like https://gitlab.com/fatihacet/gitlab-vscode-extension/issues/118, https://gitlab.com/fatihacet/gitlab-vscode-extension/issues/121).
For anyone interested, my current local 'solution' is to retrieve an array of projects by the ?search=
syntax and then look for the correct entry based on matching the project and namespace. However, this feels clunky and probably puts unnecessary strain on the gitlab instance (collecting data on n
repositories instead of just one).
I'm by no way a javascript developer, but if anyone wants to give it a go or improve it, see my fork (I'll be happy to put in a merge request, just ping me).