GitLab: properly handle token which has Guest only access
parent
3e82542812
commit
55d252b9c3
|
@ -427,6 +427,30 @@ class GitLabDriver extends VcsDriver
|
|||
if ($fetchingRepoData) {
|
||||
$json = JsonFile::parseJson($res, $url);
|
||||
|
||||
// Accessing the API with a token with Guest (10) access will return
|
||||
// more data than unauthenticated access but no default_branch data
|
||||
// accessing files via the API will then also fail
|
||||
if (!isset($json['default_branch']) && isset($json['permissions'])) {
|
||||
$this->isPrivate = $json['visibility'] !== 'public';
|
||||
|
||||
$moreThanGuestAccess = false;
|
||||
// Check both access levels (e.g. project, group)
|
||||
// - value will be null if no access is set
|
||||
// - value will be array with key access_level if set
|
||||
foreach ($json['permissions'] as $permission) {
|
||||
if ($permission && $permission['access_level'] > 10) {
|
||||
$moreThanGuestAccess = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (!$moreThanGuestAccess) {
|
||||
$this->io->writeError('<warning>GitLab token with Guest only access detected</warning>');
|
||||
$this->setupGitDriver($this->generateSshUrl());
|
||||
|
||||
return $res;
|
||||
}
|
||||
}
|
||||
|
||||
// force auth as the unauthenticated version of the API is broken
|
||||
if (!isset($json['default_branch'])) {
|
||||
if (!empty($json['id'])) {
|
||||
|
|
Loading…
Reference in New Issue