web-dev-qa-db-ja.com

ユーザーがアクセスを許可されているリポジトリの完全なリストを取得するにはどうすればよいですか?

私は次のようなbitbucket apiを見つけました:

https://bitbucket.org/api/2.0/repositories/{teamname}

ただし、このリンクは301ステータスを返します(永続的に!api/2.0/repositories/{teamname}に移動)。

わかりましたが、これはリポジトリなしでステータス200を返します。

userpasswordの2つのパラメーターを指定しましたが、何も変更されていないようです。

それで、特定のユーザーに許可されたプライベートリポジトリの完全なリストを取得する方法を誰かが答えることができますか?

15
gaussblurinc

アトラシアンのドキュメント- リポジトリエンドポイント は、リポジトリへのアクセス方法に関する詳細なドキュメントを提供します。

アカウントのリポジトリのリストを取得するためにbitbucketで言及されているURLは次のとおりです。

GET https://api.bitbucket.org/2.0/repositories/{owner}

上記のURLを使用する場合、常に所有者であるリポジトリーを取得します。ユーザーがメンバーになっているリポジトリーの完全なリストを取得するには、次を呼び出す必要があります。

GET https://api.bitbucket.org/2.0/repositories?role=member

必要に応じて、次の一連のフィルターをロールに適用できます。

返されるリポジトリのセットを制限するには、role = [owner | admin | contributor | member]パラメーターを適用します。ここで、役割は次のとおりです。

  • owner:現在のユーザーが所有するすべてのリポジトリを返します。
  • admin:ユーザーが明示的な管理者アクセス権を持つリポジトリを返します。
  • contributor:ユーザーが明示的な書き込みアクセス権を持つリポジトリを返します。
  • member:ユーザーが明示的な読み取りアクセス権を持つリポジトリを返します。

編集-1:
リクエスト/レスポンスのテストに Bitbucket REST browser を利用できます。(廃止)

17
blizzard

https://bitbucket.org/api ドメインのAPIは使用しないでください。

代わりに、常に https://api.bitbucket.orgを使用する必要があります

リダイレクトに従って空の結果が得られる理由の1つは、サーバーがWWW-Authenticate応答ヘッダーを含む401応答を返すことによって明示的に要求した場合にのみ、一部のHTTPクライアントが基本認証資格情報を送信するためです。

リポジトリエンドポイントは認証を必要としません。匿名ユーザー(ケースでは空のセットである可能性があります)に表示されるリポジトリを返すだけなので、WWW-Authenticateチャレンジを要求するクライアント(Microsoft Powershellを含む多数)は次のように機能しません。予想(注、curlは常に基本認証の資格情報を熱心に送信するため、テストに適したツールです)。

1
Erik van Zijst

Blizzardの答え を拡張すると、ここに私が書いたばかりの小さなnode.jsスクリプトがあります。

import axios from 'axios';
import fs from 'fs';


async function main() {
    const bitbucket = axios.create({
        baseURL: 'https://api.bitbucket.org/2.0',
        auth: {
            username: process.env.BITBUCKET_USERNAME!,
            password: process.env.BITBUCKET_PASSWORD!,
        }
    });

    const repos = [];
    let next = 'repositories?role=member';

    for(;;) {
        console.log(`Fetching ${next}`)
        const res = await bitbucket.get(next);
        if(res.status < 200 || res.status >= 300) {
            console.error(res);
            return 1;
        }
        repos.Push(...res.data.values);
        if(!res.data.next) break;
        next = res.data.next;
    }
    console.log(`Done; writing file`);
    await fs.promises.writeFile(`${__dirname}/../data/repos.json`,JSON.stringify(repos,null,2),{encoding:'utf8'});
}


main().catch(err => {
    console.error(err);
});
0
mpen

残念ながら、私がドキュメントで見たものから、ユーザーがアクセスできるすべてのプライベートリポジトリをリストする方法はありません。

GET https://api.bitbucket.org/2.0/repositories

「すべてのパブリックリポジトリのページ番号付きリストを返します。」 ドコ によると。

GET https://api.bitbucket.org/2.0/repositories/{owner}

「指定されたアカウントまたはUUIDが所有するすべてのリポジトリのページ付けされたリストを返します。」 ドコ によると。

したがって、すべてのprivateリポジトリを取得することは、必ずしもユーザーが所有しているとは限らない不可能、または適切なエンドポイントが見つからない、またはドキュメントが不正確です。

0
Fletch