概要
過去に CLI を使った方法を紹介しました
CLI の場合 Gitlab インスタンスに ssh が必要なのと接続チェックしか行えないので実際のログインまでのテストはできません
今回は実際にログインするテストを ssh なしで実装してみました
UI と同じリクエストを Python スクリプトから送信すれば OK です
環境
- Gitlab 18.1.6
- Python 3.12.11
- requests 2.32.5
- beautifulsoup4 4.13.5
サンプルコード
import requests
from bs4 import BeautifulSoup
# GitLab の URL
GITLAB_URL = "https://your-gitlab-fqdn"
# LDAP ユーザーの資格情報
USERNAME = "hawk"
PASSWORD = "xxxxxxxx"
LDAP_NAME = "ldapserver01"
def test_ldap_login():
# セッションを作成
session = requests.Session()
# ログインページにアクセスして CSRF トークンを取得
login_page = session.get(f"{GITLAB_URL}/users/sign_in")
if login_page.status_code != 200:
print("ログインページへのアクセスに失敗しました。")
return
# CSRF トークンを取得
soup = BeautifulSoup(login_page.text, "html.parser")
element = soup.find("input", {"name": "authenticity_token"})
if element is None:
print("authenticity_tokenが見つかりませんでした。")
return
csrf_token = element["value"] # type: ignore
# ログインデータを準備
login_data = {
"username": USERNAME,
"password": PASSWORD,
"authenticity_token": csrf_token,
}
# ログインリクエストを送信
response = session.post(
f"{GITLAB_URL}/users/auth/{LDAP_NAME}/callback",
data=login_data,
)
# レスポンスを確認
if response.status_code == 200 and "Invalid Login or password" not in response.text:
if "Welcome to GitLab" in response.text:
print("LDAP ログインテストが成功しました。")
else:
print("LDAP ログインテストに失敗しました。")
print("レスポンスに 'Welcome to GitLab' が含まれていません。")
else:
print("LDAP ログインテストに失敗しました。")
print("ステータスコード:", response.status_code)
print("レスポンス:", response.text)
if __name__ == "__main__":
test_ldap_login()
少し解説
LDAP_NAME の部分は gitlab.rb に設定した ldap_name を設定してください
クロスサイト対策として CSRF トークンが必要になるのでそれをページから取得しリクエストに含める必要があります
Gitlab の API はなく直接 UI ページにアクセスして UI のフォームと同じリクエストを送信している感じです
最後に
これで LDAP のログインテストも ssh せずにテストできます
0 件のコメント:
コメントを投稿