Доступ к GitLab через API с Ruby - PullRequest
       1

Доступ к GitLab через API с Ruby

0 голосов
/ 01 октября 2018

При попытке доступа к GitLab моего университета в первый раз через API (я владелец репо, но у меня нет доступа к консоли и я не могу редактировать файлы конфигурации или перезапускать сервер), мне кажется, что мне не хватает некоторых обязательных основ.Пытался использовать Ruby (без рельсов) с оболочкой Narkoz API.К сожалению, нет доступных учебных пособий, которые объясняют самый первый шаг:

Как подключиться к серверу и пройти аутентификацию с использованием UID + passwd?

Кто-нибудь может объяснить этот процесс в понятных человеку инструкциях? Руководство по GitLab мне не помогло.

Я надеюсь, что смогу тогда выяснить, как добавить пользователей GitLab в мой репозиторий.Не хочу добавлять 100 пользователей с помощью веб-интерфейса.

Ответы [ 2 ]

0 голосов
/ 07 октября 2018

Для записей - то, что помогло бы быстрее, является минимально жизнеспособным примером - тем более, что документация API содержит известные и не исправленные ошибки.

host = myGitlabServer

require 'oauth2'
client = OAuth2::Client.new(clientIdFromGitLab, clientSecretFromGitLab, :site => host)
accessToken = client.password.get_token(myGitLabUid, myGitLabPassword)

require 'httparty'
# get own user data
response = HTTParty.get(host + '/api/v4/user?access_token=' + accessToken.token)
puts response.parsed_response

# get user data by user name
response = HTTParty.get(host + '/api/v4/users?username=' + username + '&access_token=' + access_token.token)
puts response.parsed_response[0]

# add user as reporter to project
response = HTTParty.post(host + '/api/v4/projects/' + projectId + '/members/?user_id=' + newUID + '&access_level=20&access_token=' + access_token.token)
puts response.parsed_response
0 голосов
/ 02 октября 2018

Введенная вами ручная запись предназначена для входа в GitLab со сторонним поставщиком OAuth, что не похоже на то, что вы пытаетесь сделать.Похоже, вы пытаетесь запросить токен OAuth , который затем можно использовать для доступа к API GitLab.

Из документации:

В этом потоке токен запрашивается в обмен на учетные данные владельца ресурса (имя пользователя и пароль).Учетные данные следует использовать только в том случае, если существует высокая степень доверия между владельцем ресурса и клиентом (например, клиент является частью операционной системы устройства или приложения с высоким уровнем привилегий), а также когда недоступны другие типы разрешений авторизации (например,в качестве кода авторизации).

Что звучит как то, что вы пытаетесь сделать.

Одна важная вещь из документации:

Примечание об устаревании: Начиная с GitLab 8.11, учетные данные пароля владельца ресурса отключены для пользователей с включенной двухфакторной аутентификацией.Эти пользователи могут получить доступ к API, используя персональные токены доступа .

Если это так, то следующее не будет работать, и вам потребуется сгенерировать доступвместо токена.

1.Запрос токена доступа

POST-запрос к / oauth / token с параметрами:

{
  "grant_type"    : "password",
  "username"      : "user@example.com",
  "password"      : "secret"
}

Затем вы получите токен доступа обратно в ответе:

{
  "access_token": "1f0af717251950dbd4d73154fdf0a474a5c5119adad999683f5b450c460726aa",
  "token_type": "bearer",
  "expires_in": 7200
}

Затем вы назначите этот токен как GitLab.private_token.

...